【问题标题】:Matching a cell on another sheet匹配另一张纸上的单元格
【发布时间】:2021-07-27 11:55:33
【问题描述】:

我编写了下面的代码来匹配另一个工作表上一个单元格中的一个单元格,这样我就可以在需要的地方偏移和粘贴更多数据。

代码似乎只能找到工作表的第一行而不是具有值的单元格。

Sub Find_select()
  
    Dim matchValue As Variant, FindCell As Long
   
    Sheets("Booking Sheet").Activate
      
    matchValue = Worksheets("Booking Sheet").Range("BE5").Value
    FindCell = WorksheetFunction.Match(matchValue, Worksheets("Data Storage").Range("A2:A10000"), 0)
    
    Sheets("Data Storage").Activate
    ActiveSheet.Cells(FindCell).Select
End Sub

【问题讨论】:

    标签: excel vba match


    【解决方案1】:

    要获得想要的结果,您需要做的最小更改是:

    ActiveSheet.Cells(FindCell,1).SelectActiveSheet.Cells(FindCell,"A").Select

    基本上,当您使用.cells 集合时,您需要同时指定行索引和列索引,以便 VBA 了解您指的是哪个单元格。

    ActiveSheet.Cells(FindCell) 指的是索引为FindCell 的列的第一个单元格,例如,如果FindCell=10 则您的代码将选择单元格J1

    话虽如此,当.Activate 方法和ActiveSheet 对象不是特别需要时,我也会避免使用它们,而是使用显式引用。

    Dim matchValue As Variant, FindCell As Long
    Dim sht1 As Worksheet, sht2 As Worksheet
    Set sht1 = ThisWorkbook.Worksheets("Booking Sheet")
    Set sht2 = ThisWorkbook.Worksheets("Data Storage")
    
    matchValue = sht1.Range("BE5").value
    FindCell = Application.WorksheetFunction.Match(matchValue, sht2.Range("A2:A10000"), 0)
    sht2.Cells(FindCell, "A").Select
    

    此外,我不确定您为什么要使用 .select 方法,但如果没有它,可能会有更好的方法来实现相同的结果。

    【讨论】:

    • 感谢您的解释真的很有帮助!老实说,在编写 VBA 方面是新手,并且一直在用小事增长知识。我正在使用选择,因为我想偏移然后粘贴数据(它与我正在制作的表格效果更好,至少这是我目前所知道的最佳方式)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2014-03-23
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多