无法从Cells excel VBA中检索值

时间:2017-04-18 09:13:09

标签: excel vba excel-vba

我正在尝试从另一个工作表激活工作表并在excel的消息框中显示单元格值,但每当我运行它时,都会有一个下标错误,说下标超出范围。

我的代码:

Sub Home()
Dim tbValue As String
tbValue = Worksheets("Home").TextBox1.Value

Worksheets(tbValue).Activate

MsgBox Cells(7,1).Value


End Sub

任何人都知道为什么下标超出范围?感谢

2 个答案:

答案 0 :(得分:2)

下标超出范围,因为找不到工作表名称。这可能发生在Worksheet(...)行代码中。

  1. Worksheets("Home")可能会返回下标错误,因为您的有效工作簿可能不是您的主页工作表;

  2. Worksheets(tbValue)可能会因同样的第一个原因而失败,因为tbValue可能与确切的工作表名称不匹配。

  3. 首先解决方案可能是确保正确的图书处于活动状态:

    Sub Home()
       Dim tbValue As String
       Workbooks("your_workbook_name.xlsm").Activate
       tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value
       Worksheets(tbValue).Activate
       MsgBox Cells(7,1).Value
    End Sub
    

    更好的解决方案是避免工作表和书籍激活并使用完全合格的对象。如果您的宏与Home sheet在同一本书中:

    Sub Home()
        Dim tbValue As String
        tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value
        MsgBox ThisWorkbook.Worksheets(tbValue).Cells(7,1)
    End Sub
    

    您也可以将Worksheets("Home")替换为VBA分配的名称到工作表,可能是Sheet1(您可以在IDE中检查此名称)。

答案 1 :(得分:0)

代码看起来可行,但是,尝试顶部的With/ End withOption Explicit,它可能会起作用。此外,它可能是.Cells(7,1)是一个错误或其他东西。无论如何,再试一次:

Option Explicit

Sub Home()
    Dim tbValue As String
    tbValue = trim(Worksheets("Home").TextBox1.text)

    with worksheets(tbValue)
        MsgBox .Cells(7,1)
    end with

End Sub

评论中Trim的想法也很好。 为了更进一步,请使用TextBox1.Text。点击此处了解更多信息 - Distinction between using .text and .value in VBA Access