我试图激活从另一个用片材,并显示在Excel消息框中的单元格的值,但每当我运行它,会出现一个下标错误,称标超出的范围。无法检索值擅长VBA
我的代码:
Sub Home()
Dim tbValue As String
tbValue = Worksheets("Home").TextBox1.Value
Worksheets(tbValue).Activate
MsgBox Cells(7,1).Value
End Sub
任何人有任何想法,为什么下标越界?谢谢
我试图激活从另一个用片材,并显示在Excel消息框中的单元格的值,但每当我运行它,会出现一个下标错误,称标超出的范围。无法检索值擅长VBA
我的代码:
Sub Home()
Dim tbValue As String
tbValue = Worksheets("Home").TextBox1.Value
Worksheets(tbValue).Activate
MsgBox Cells(7,1).Value
End Sub
任何人有任何想法,为什么下标越界?谢谢
该代码看起来可行,但是,在顶部尝试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
现在msgbox出现,但它什么都不显示,好像它无法检索工作表中的单元格的值 – decemberrobot
那里有什么?这是A7。 – Vityata
“Option Explict”和“With”如何解决下标超出范围? –
下标越界,因为工作表名称找不到。它可能发生在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
更好的办法是避免纸张和书本激活和使用完全合格的对象。如果宏是在同一本书首页表:
Sub Home()
Dim tbValue As String
tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value
MsgBox ThisWorkbook.Worksheets(tbValue).Cells(7,1)
End Sub
您还可以使用VBA指定的名称替换Worksheets("Home")
到工作表中,可能Sheet1
(您可以检查IDE这个名字)。
我通常将我的wb和ws硬编码为:“Dim wb As Workbook Dim ws as Worksheet Set wb = Application.Workbooks(”workbookname.xlsm“)Set ws = wb.Worksheets(”Sheetname“)'then then just can just引用如:'Msgbox ws.Cells(7,1)' – Luuklag
但是,为什么当你已经创建了对象时创建一个新变量? 'ThisWorkbook'是以前定义的,并且不依赖于你可能改变的文件名! –
为了避免多个工作簿打开时出现复杂情况。 – Luuklag
您是否在输入工作表名称'Textbox1'实际存在的表?如果它试图用'TRIM'包裹你的Textbox1的价值在年底摆脱任何多余的空格:'修剪(工作表(“家”)TextBox1.Value)' –
它的存在呀,我甚至尝试硬编码表名称而不是使用tbValue但它仍然是相同的错误,运行时错误9,下标超出范围。 – decemberrobot
我不认为'TextBox1'不能像那样访问。它必须是“Sheet1.TextBox1”或“Worksheets(”Home“)”的表单对象。形状(“TextBox1”)...' – Slai