无法从单元格excel VBA检索值
我试图激活另一张工作表,并在Excel中的消息框中显示单元格的值,但每当我运行它,将有一个下标错误,说下标超出范围。
我的代码:
Sub Home() Dim tbValue As String tbValue = Worksheets("Home").TextBox1.Value Worksheets(tbValue).Activate MsgBox Cells(7,1).Value End Sub
有人知道为什么下标超出范围? 谢谢
下标超出范围,因为找不到工作表名称。 这可能发生在两个Worksheet(...)
行代码。
-
Worksheets("Home")
可能会返回下标错误,因为您的活动工作簿可能不是家庭工作表中的工作簿; -
Worksheets(tbValue)
可能会因相同的第一个原因而失败,因为tbValue可能与精确的工作表名称不匹配。
第一个解决scheme可能是确保正确的书是活跃的
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
更好的解决scheme是避免表单和图书的激活,并使用完全合格的对象。 如果您的macros与Home工作表位于同一本书中:
Sub Home() Dim tbValue As String tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value MsgBox ThisWorkbook.Worksheets(tbValue).Cells(7,1) End Sub
您也可以用VBA分配的工作表replaceWorksheets("Home")
到工作表,可能是Sheet1
(您可以在IDE中检查这个名称)。
代码看起来可行,但是,尝试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
。 在这里查看更多 – 在VBA Access中使用.text和.value之间的区别