我正在尝试从另一个工作表激活工作表并在excel的消息框中显示单元格值,但每当我运行它时,都会有一个下标错误,说下标超出范围。
我的代码:
Sub Home()
Dim tbValue As String
tbValue = Worksheets("Home").TextBox1.Value
Worksheets(tbValue).Activate
MsgBox Cells(7,1).Value
End Sub
任何人都知道为什么下标超出范围?感谢
答案 0 :(得分:2)
下标超出范围,因为找不到工作表名称。这可能发生在Worksheet(...)
行代码中。
Worksheets("Home")
可能会返回下标错误,因为您的有效工作簿可能不是您的主页工作表;
Worksheets(tbValue)
可能会因同样的第一个原因而失败,因为tbValue可能与确切的工作表名称不匹配。
首先解决方案可能是确保正确的图书处于活动状态:
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 with
和Option 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