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