簡體   English   中英

設置UsedRange的起點

[英]Set starting point for UsedRange

我有一個組合框下拉列表,用於填充列表中的項目,並具有按以下代碼收集的組合框中的字符類型過濾下拉列表選項的功能

Option Explicit

Private cLstPrior As Variant

Private Sub Worksheet_SelectionChangePrior(ByVal Target As Range)
    cLstPrior = Application.Transpose(Database.Columns("1:1").SpecialCells(xlCellTypeConstants, 23)) 'set module-level variable
    Tool.priorCmb.List = cLstPrior        'initialize ComboBox to range Col A (UsedRange only)
    Tool.priorCmb.ListIndex = -1     'set ComboBox value to empty
End Sub

Private Sub priorCmb_Change()
   filterComboListPrior Tool.priorCmb, cLstPrior
End Sub

Private Sub priorCmb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Tool.priorCmb.DropDown
End Sub

Private Sub priorCmb_GotFocus()   'or _MouseDown()
    Tool.priorCmb.DropDown
End Sub

Public Sub filterComboListPrior(ByRef cmbPrior As ComboBox, ByRef dLstPrior As Variant)
    Dim itmPrior As Variant, lstPrior As String, selPrior As String


    Application.EnableEvents = False
    With cmbPrior
        selPrior = .Value
        If IsEmpty(cLstPrior) Then cLstPrior = Worksheets("Database").Columns("1:1").SpecialCells(xlCellTypeConstants, 23)
        For Each itmPrior In cLstPrior
            If Len(itmPrior) > 1 Then If InStr(1, itmPrior, selPrior, 1) Then lstPrior = lstPrior & itmPrior & "||"
        Next
        If Len(lstPrior) > 1 Then .List = Split(Left(lstPrior, Len(lstPrior) - 2), "||") Else .List = dLstPrior
    End With
    Application.EnableEvents = True

End Sub

在這種情況下,組合框需要填充的數據全部來自列1,其中包含字符的任何單元格。 問題是在A1和A2處有空白單元格,因此稍后在組合框下拉列表中會填充空白條目。 我試圖強制范圍僅包含其中包含值的單元格,但是在If IsEmpty(cLstPrior) Then cLstPrior = Worksheets("Database").Columns("1:1").SpecialCells(xlCellTypeConstants, 23)時收到應用程序定義或對象定義的錯誤If IsEmpty(cLstPrior) Then cLstPrior = Worksheets("Database").Columns("1:1").SpecialCells(xlCellTypeConstants, 23)我似乎無法弄清楚。 另外,我的Application.Transpose行為是否正確?

代替:

Database.UsedRange.Rows(2)

嘗試:

Database.Range(Database.Cells(2,2),Database.Cells(Database.UsedRange.Rows.Count, 2))

最好使用特殊單元格,並遍歷具有值的單元格。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rRng As Range, c As Range, ws As Worksheet
    Set ws = Sheets("Database")

    Me.ComboBox1.Clear

    Set rRng = ws.Rows("2:2").SpecialCells(xlCellTypeConstants, 23)
    For Each c In rRng.Cells
        Me.ComboBox1.AddItem c
    Next c

End Sub

使用相交來排除列

With Worksheets("Database")
    Set rng = Application.Intersect(.UsedRange.Rows(2), .Cells.Resize(.Columns.Count - 1).Offset(1))
    End With

將相關行更改為新定義的范圍

If IsEmpty(cLst) Then cLst = rng

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM