无法从excel VBA单元格中检索值
我试图从另一个工作表激活一个工作表,并在excel的消息框中显示单元格值,但每当我运行它时,都会出现下标错误,表示下标超出范围 我的代码:无法从excel VBA单元格中检索值,vba,excel,Vba,Excel,我试图从另一个工作表激活一个工作表,并在excel的消息框中显示单元格值,但每当我运行它时,都会出现下标错误,表示下标超出范围 我的代码: Sub Home() Dim tbValue As String tbValue = Worksheets("Home").TextBox1.Value Worksheets(tbValue).Activate MsgBox Cells(7,1).Value End Sub 有人知道为什么下标超出范围吗?谢谢代码看起来是可行的,但是,请尝试顶部带有
Sub Home()
Dim tbValue As String
tbValue = Worksheets("Home").TextBox1.Value
Worksheets(tbValue).Activate
MsgBox Cells(7,1).Value
End Sub
有人知道为什么下标超出范围吗?谢谢代码看起来是可行的,但是,请尝试顶部带有/End With的
和选项Explicit
,它可能会起作用。此外,它可以是。单元格(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
。请参阅此处的详细信息-由于找不到工作表名称,下标超出范围。这可能发生在工作表(…)
行代码中
工作表(“主工作表”)
可能返回下标错误,因为您的活动工作簿可能不是主工作表中的工作簿
工作表(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
更好的解决方案是避免工作表和书籍激活,并使用完全限定的对象。如果宏与主工作表在同一本书中:
Sub Home()
Dim tbValue As String
tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value
MsgBox ThisWorkbook.Worksheets(tbValue).Cells(7,1)
End Sub
您还可以使用VBA为工作表指定的名称替换工作表(“主页”)
,可能是Sheet1
(您可以在IDE中检查此名称)。您在Textbox1
中输入的工作表名称是否实际作为工作表存在?如果它确实尝试用TRIM
包装您的Textbox1值,以消除末尾的多余空格:TRIM(Worksheets(“Home”).Textbox1.value)
是的,它存在,我甚至尝试硬编码工作表名称而不是使用tbValue,但仍然是相同的错误,运行时错误9,下标超出范围。我不认为不能像那样访问TextBox1
。它必须是图纸对象,如Sheet1.TextBox1
或工作表(“主页”).Shapes(“TextBox1”)…
错误发生在哪一行?我之前的评论会出现在工作表激活行上。tbValue
是否从TextBox1
正确获取值?如果不在MsgBox单元格(7,1)中限定工作表,value
将使用当前活动的工作表-您可能从错误的工作表中读取了单元格值@Vityata展示了如何使用和。。。以
block结束(或只是将工作表名称放在单元格前面)。现在msgbox出现,但它什么也不显示,似乎无法检索工作表中单元格的值。其中有什么?这是A7。Option Explicit
和With
如何解决下标超出范围的问题?@LS\u dev-考虑到错误不再显示的事实,至少它解决了一些问题。但是您知道Option Explicit
是一个编译器和选项,With
只是语法上的suggar<代码>单元格
与有很大不同。单元格
可能就是这样解释的。我通常将我的wb和ws硬编码设置为:将wb设置为工作簿将wb设置为工作簿将ws设置为工作表集wb=Application.Workbooks(“workbookname.xlsm”)将ws=wb.Worksheets(“Sheetname”)
然后你可以像这样引用:Msgbox ws.Cells(7,1)
但是既然已经创建了对象,为什么还要创建新变量呢此工作簿
是以前定义的,不依赖于文件名,您可以更改文件名!为了避免打开多个工作簿时出现复杂情况。wb=Workbook(“somename”)
如何比ThisWorkbook
更简单?