當我激活作業表時,我想用列的專案填充組合框的專案,但我想避免重復。它用于過濾目的。
好吧,我的第一個想法是用資料迭代所有行,以查看該專案是否在組合框中,如果它不在組合框中,則添加它。
但是,我不知道如何檢查該專案是否在組合框中,或者是否有更簡單的方法而不是遍歷所有行。
謝謝。
編輯:我添加了我用來填充組合框的代碼
Private Sub Worksheet_Activate()
Me.cmbProveedores.Clear
Me.cmbProveedores.AddItem ("")
'Se recorren todas las filas de la hoja
For miIterador = PrimeraLineaConDatos To 65536
If (Me.Cells(miIterador, NombreColumnaRevisiones) = "") Then Exit For
Dim miProveedor As String
miProveedor = Me.Cells(miIterador, NombreColumnaProveedor)
If miProveedor <> "" Then
Me.cmbProveedores.Value = miProveedor
If Me.cmbProveedores.MatchFound = False Then
Me.cmbProveedores.AddItem (miProveedor)
End If
End If
Next miIterador
Me.cmbProveedores.Value = ""
End Sub
我也有變數:
NombreColumnaRevisiones:我使用這個變數來知道何時停止迭代行。當我在此列中找到第一個為空的單元格時,我會停下來。
NombreColumnaProveedor:是我從中獲取組合框專案的列。
uj5u.com熱心網友回復:
使用列(字典)中的唯一值填充組合框
Option Explicit
Private Sub Worksheet_Activate()
' Reference the range.
Dim lr As Long
lr = Me.Cells(Me.Rows.Count, NombreColumnaProveedor).End(xlUp).Row
Dim rCount As Long: rCount = lr - PrimeraLineaConDatos 1
If rCount < 1 Then Exit Sub
Dim rg As Range: Set rg = Me.Cells(PrimeraLineaConDatos, _
NombreColumnaProveedor).Resize(rCount)
' Write the values from the range to an array.
Dim Data As Variant
If rCount = 1 Then
ReDim Data(1 To 1, 1 To 1): Data(1, 1) = rg.Value
Else
Data = rg.Value
End If
' Write the unique values from the array to a dictionary.
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
dict.CompareMode = vbTextCompare
Dim Key As Variant
Dim r As Long
For r = 1 To rCount
Key = Data(r, 1)
If Not IsError(Key) Then
If Len(Key) > 0 Then
dict(Key) = Empty
End If
End If
Next r
If dict.Count = 0 Then Exit Sub
' Populate the combo box.
Me.cmbProveedores.Clear
Me.cmbProveedores.List = dict.Keys
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/452975.html
上一篇:退出for沒有Nextfor回圈
下一篇:為什么這個過濾函式回傳值錯誤?
