2015-01-01 1 views
0

"combobox1"이라는 콤보 상자가있는 userform을 포함하는 통합 문서를 최근 작성했습니다.다른 통합 문서의 데이터를 아래 범위의 "B2 : B .."방향으로 가져 오는 코드가 있습니다. .. " 이제 콤보 상자에 견인 열을 넣는 방법을 만들고 싶습니다. 다른 열은 동일한 디렉토리에서 데이터를 가져 오지만 엑스의 범위는"A1 : A .... "입니다. 나는 당신의 도움이 필요합니다. thx .vba 외부 데이터를 사용하는 두 열 콤보 상자

[Private Sub UserForm_Initialize() 

`Dim ListItems As Variant, i As Integer 
`Dim SourceWB As Workbook 
With Me.ComboBox1 
.Clear ' remove existing entries from the listbox 
' turn screen updating off, 
' prevent the user from seeing the source workbook being opened 
Application.ScreenUpdating = False 
' open the source workbook as ReadOnly 
Set SourceWB = Workbooks.Open("C:\Users\Mohsen\Desktop\new prj\Data base\partlist.xls", _ 
False, True) 
ListItems = SourceWB.Worksheets(1).Range("B2:B1468").Value 
' get the values you want 
SourceWB.Close False ' close the source workbook without saving changes 
Set SourceWB = Nothing 
Application.ScreenUpdating = True 
ListItems = Application.WorksheetFunction.Transpose(ListItems) 
' convert values to a vertical array 
For i = 1 To UBound(ListItems) 
.AddItem ListItems(i) ' populate the listbox 
Next i 
.ListIndex = -1 ' no items selected, set to 0 to select the first item 


End With 
End Sub 

답변

0

귀하의 질문은 데이터의 두 번째 열은 그래서 첫 번째 콤보 상자 열 SourceWB, Sheet1의, 열 B에서 것을 두 번째 콤보 상자의 열은 같은 시트라고 가정 한에서 온해야하는 위치에 대한 명확하지 않다 B 열의 왼쪽 열에 표시됩니다.이 값은 원하는대로 변경할 수 있습니다.

또한 B 열의 마지막 데이터row를 식별하기 위해 코딩했습니다. 그러면 불필요하게 1468 행을 검색하지 못하게됩니다. 이것이 도움이되지 않는다면 다시 변경하십시오.

Option Explicit 
Private Sub UserForm_Initialize() 
Dim ListItems As Variant 
Dim i As Integer 
Dim SourceWB As Workbook 
Dim listVal As Range 
Dim srcLastRow As Long 

'for testing purposes 
Dim srcName As String 
srcName = "C:\Users\Mohsen\Desktop\new prj\Data base\partlist.xls" 

    With Me.ComboBox1 
     'Set the number of columns by code 
     .ColumnCount = 2 
     .Clear 
     Application.ScreenUpdating = False 
     Set SourceWB = Workbooks.Open(srcName, False, True) 
      'find the last row of data to prevent searching 1468 rows unnecessarily 
      srcLastRow = SourceWB.Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row 
      For Each listVal In SourceWB.Sheets(1).Range("B2:B" & srcLastRow) 
       .AddItem listVal.Value 
       'Offset(0,-1) gets second column of data from cell to the left 
       .List(.ListCount - 1, 1) = listVal.Offset(0, -1).Value 
      Next listVal 
     SourceWB.Close False 
     Set SourceWB = Nothing 
     Application.ScreenUpdating = True 
     .ListIndex = -1 
    End With 
End Sub 

코드 내에서 설정해야 할 수도있는 다른 속성의 경우 Combobox1의 속성 창을 살펴보십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 "C9"범위에 콤보 상자 값을 연결하고 왼쪽 열 값을 C9로 반환하고 OK, 이제 두 번째 열 (오른쪽 하나)을 exp "B9"셀에 연결하려고합니다. 두 개의 연결 값을 설정하는 VBA 코드. –