excel VBA:Array/Ubound有时工作-不总是返回完整的数组

l7mqbcuq  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(227)

我以前有一个问题回答了一些不相关的(循环)和建议包括使用数组和Ubounds,这一切都工作得很好,在第一(见我接受的答案),但现在数组部分不是返回一个完整的数组所有的时间时,激活或调用此子。

背景

我有一个工作表,其中2列范围(“D 7:E28”)包含用户输入/选择,然后将其发送到隐藏的“查找”ws,在该ws中查找表以进行交叉引用/匹配。然后将查找结果发送到“汇总列表”ws并逐一列出。

验证码:

Sub WS_Lookup()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim LookupWS As Worksheet
    Dim SummaryCodeWS As Worksheet
    Dim lookupLR As Long
    Dim summaryRow As Range
    Dim arr As Variant
    
    Set wb = ActiveWorkbook
    Set LookupWS = wb.Worksheets("Lookup")
    Set SummaryCodeWS = wb.Worksheets("Summary List")
    lookupLR = LookupWS.Range("K10000").End(xlUp).Row
                
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    For Each ws In wb.Worksheets
        If ws.Visible = xlSheetVisible And ws.Name <> " " Then
                    
            Set summaryRow = SummaryCodeWS.Range("B10000").End(xlUp).Offset(2).EntireRow
            summaryRow.Columns("A").Value = ws.Range("A4").Value
                    
            LookupWS.Range("G3:H24").Value = ws.Range("D7:E28").Value
                    
            arr = LookupWS.Range("K4:O" & lookupLR).Value
            summaryRow.Columns("B").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr 
                                  
            With summaryRow.Range("A1:F1").Borders(xlEdgeTop)
                 .LineStyle = xlContinuous
                 .Weight = xlThin
                 .ColorIndex = xlAutomatic
            End With
            
         End If
    Next ws
    
    With SummaryCodeWS
        .Visible = xlSheetVisible
        .Move After:=Sheets(Sheets.Count)
    End With
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
End Sub

当试图排除故障时,我会从用户选择中添加/删除值,有时我可以让它重置并显示完整的“新”摘要,但当再次播放(未更改的用户选择)时,它会将数组缩短到第一个值,有时只到第二个值。我附上了一个屏幕截图来解释不同的数组大小。
我只是为了更好地理解ubound参数,但这超出了我的深度。我没有改变任何语法,因为它看起来与这里的其他upvoted决议一致。
我希望这是有意义的,并将感谢任何帮助!

nvbavucw

nvbavucw1#

看起来您希望动态查找最后一行。移动

lookupLR = LookupWS.Range("K10000").End(xlUp).Row

到紧接在

arr = LookupWS.Range("K4:O" & lookupLR).Value

旁注,如果你不想硬编码10000(可能是避免这种情况的好主意),那么用途:

With LookupWS
   lookupLR = .Cells(.Rows.Count, "K").End(xlUp).Row
End With

相关问题