Excel VBA“下标超出范围”运行错误“9”
我试图实现下面的代码,以便我可以读取单元格值,然后将该值放入同一Worksheet上的另一个单元格。
工作表具有以下名称:TestUserGuidance(不含空格)代码如下:
Sub GuideTest() Dim dblPower, dblMass, dblRatedSpeed, dblRefLength, dblAwot, dblEngineSpeed, dblRoadSpeed As Double Dim dblPMR As Double dblPower = Worksheets("TestUserGuidance").Cell("B1").Value Worksheets("TestUserGuidance").Cell("E1") = dblPower End Sub
任何人都可以请告诉我哪里出错了?
谢谢
我认为vba找不到TestUserGuidance表单。 如果我在即时窗口中运行以下内容,则会收到“对象不支持此属性或方法”错误:
?worksheets(1).cell("A1")
如果我运行这个,我得到你提到的“下标超出范围”的错误:
?worksheets("non-existent sheet").cell("A1")
这向我build议,活动工作簿是不正确的,因为如果vba能够find工作表,你会得到另一个错误。 你可以尝试添加ThisWorkbook(也使用范围)?
dblPower = ThisWorkbook.Worksheets("TestUserGuidance").Range("B1").Value ThisWorkbook.Worksheets("TestUserGuidance").Range("E1") = dblPower
另一个选项是重命名你的工作表:
那么你将不必担心有效的工作簿(并获得智能):
shtTestUserGuidance.Range("E1") = shtTestUserGuidance.Range("B1")
另外,我build议你提出其他人提出的所有更正。 否则,您可能会遇到其他问题。
最后,如果工作表像一个模板,结构不会改变,那么最好使用公式(即E1的公式:= B1)。 即使有条件逻辑,也可能更容易维护为公式而不是vba代码。
以下是一些疑难解答步骤:
通过单击左侧的灰色区域来切换dblPower所在行的断点:
另外打开立即窗口,如果它不在那里按ctrl + g:
当你运行代码时,它应该在中断点暂停。 现在你可以检查一下范围。 尝试在立即窗口中input以下内容,然后按Enter键:
?Worksheets("TestUserGuidance").Name
要么
?ActiveWorkbook.Name
请注意,当光标位于子程序中的某处时,也可以按F8逐行执行代码。 底线是,你可能需要逐行检查代码,以解决这个问题。
这是让你的代码工作的方法:
Sub GuideTest() Dim dblPower, dblEngineSpeed, dblRoadSpeed As Double ' first two are of variant type Dim dblPMR As Double dblPower = Worksheets(1).Range("B1").Value Worksheets(1).Range("E1") = dblPower End Sub
当你使用“E1”或“B1”时,你应该使用Range
而不是Cells。 在我的答案Worksheets(1)
是指Worksheets("TestUserGuidance")
。
只有dblRoadSpeed
被声明为double。 要解决这个问题,把所有的variables都声明为单独的,在vba中你可以用两种方法来完成。
Dim dblPower As Double, dblMass As Double
要么
Dim dblPower As Double Dim dblMass As Double
此外,你不需要声明任何variables来做你正在做的事情。 您可以一步复制该值。
Worksheets("TestUserGuidance").Range("E1").Value = Worksheets("TestUserGuidance").Range("B1").Value