无法从单元格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(...)行代码。

  1. Worksheets("Home")可能会返回下标错误,因为您的活动工作簿可能不是家庭工作表中的工作簿;

  2. 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 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 。 在这里查看更多 – 在VBA Access中使用.text和.value之间的区别