현재 동일한 목록이있는 40 개의 콤보 상자가있는 userform을 만드는 중입니다. 내 문제는 콤보 상자가 가득 채워서 userform.show
을 느리게 만듭니다. 이러한 콤보 상자에 채워지는 목록은 매우 긴 목록 (46542 개의 행과 목록 길이가 다를 수 있음)이며 목록은 3 개의 열로 구성됩니다.여러 콤보 상자를 채우면 VBA 사용자 폼이 느려집니다.
나는 전체 목록을 CONCATENATE로 바보짓을하고 있지만 그다지 변화를주지는 않습니다. 또한 내가 콤보 박스에서 선택할 때 값을 가질 필요가 있기 때문에 콤보 박스의 모든 3 개의 열과 함께 행 번호를 선택할 때 함께 할 수 있습니다. combobox에서 1 대신에 comboxbox 텍스트 필드에 1을 쓰면 모든 3 열을 반환하므로 실제로 첫 열이 CONCATENATE이고 드롭 다운에 숨겨진 열이 4 개 있다는 것을 의미합니다.
제 궁금한 점은 프로세스를 더 가볍게 만드는 방법이 있습니까? 그래서 여기
코드입니다 : 그것은 combox40
내 예전의 코드가 꽤 빨리 일하고 충돌하지만이 연결된 된 열을하지 않았다까지
Private Sub UserForm_Initialize()
Set tsheet = ThisWorkbook.Sheets("Players")
Dim v As Variant, i As Long
v = tsheet.Range("A2:l" & Worksheets("Players").Cells(Rows.Count,
1).End(xlUp).Row).Value
With Me.ComboBox1
.RowSource = ""
.ColumnCount = 4
.BoundColumn = 2
.ColumnWidths = "1;50;50;50" 'Hide first column in dropdown
For i = LBound(v) To UBound(v)
.AddItem v(i, 1) & " " & v(i, 2) & " " & v(i, 3)
.List(.ListCount - 1, 1) = v(i, 1)
.List(.ListCount - 1, 2) = v(i, 2)
.List(.ListCount - 1, 3) = v(i, 3)
Next i
End With
With Me.ComboBox2
.RowSource = ""
.ColumnCount = 4
.BoundColumn = 2
.ColumnWidths = "1;50;50;50" 'Hide first column in dropdown
For i = LBound(v) To UBound(v)
.AddItem v(i, 1) & " " & v(i, 2) & " " & v(i, 3)
.List(.ListCount - 1, 1) = v(i, 1)
.List(.ListCount - 1, 2) = v(i, 2)
.List(.ListCount - 1, 3) = v(i, 3)
Next i
End With
이 코드는 계속
ComboBox3.ColumnWidths = "50;50;50" 'COLUMN WITH OF LISTBOX
ComboBox3.ColumnCount = 3
'COLUMN NUMBER OF LISTBOX
ComboBox3.List = tsheet.Range("A2:l" &
Worksheets("Players").Cells(Rows.Count, 1).End(xlUp).Row).Value
'tsheet'를 정의한 다음 코드에서 'Worksheets ("Players")'를 사용하지 마십시오 ....'tsheet'사용 – jsotola
'.RowSource'' .ColumnCount''BoundColumn'을 정의 할 필요가 없습니다. 런타임시 .ColumnWidths 속성 .... 이러한 값은 통합 문서와 함께 저장됩니다 ....워크 북을 한 번만 실행 한 다음 통합 문서를 저장하는 별도의 서브 루틴에 설정하십시오. 그 값을 변경하고 싶다면 sub를 다시 실행하십시오. – jsotola