Excel VBA“;下标超出范围“;运行错误';9';

Excel VBA“;下标超出范围“;运行错误';9';,vba,excel,Vba,Excel,我尝试实现以下代码,以便读取单元格值,然后将该值放入同一工作表上的另一个单元格中 工作表的名称如下:TestUserGuidence(没有空格) 代码如下: Sub GuideTest() Dim dblPower, dblMass, dblRatedSpeed, dblRefLength, dblAwot, dblEngineSpeed, dblRoadSpeed As Double Dim dblPMR As Double dblPower = Worksheets

我尝试实现以下代码,以便读取单元格值,然后将该值放入同一工作表上的另一个单元格中

工作表的名称如下:TestUserGuidence(没有空格) 代码如下:

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 
谁能告诉我哪里出了问题

谢谢


只有
dblRoadSpeed
被声明为double。 要解决这个问题,请将所有变量声明为单个变量,在vba中,您可以通过两种方式执行

Dim dblPower As Double, dblMass As Double

此外,您不需要声明任何变量来执行您正在执行的操作。 您可以一步复制该值

Worksheets("TestUserGuidance").Range("E1").Value = Worksheets("TestUserGuidance").Range("B1").Value 

只有
dblRoadSpeed
被声明为double。 要解决这个问题,请将所有变量声明为单个变量,在vba中,您可以通过两种方式执行

Dim dblPower As Double, dblMass As Double

此外,您不需要声明任何变量来执行您正在执行的操作。 您可以一步复制该值

Worksheets("TestUserGuidance").Range("E1").Value = Worksheets("TestUserGuidance").Range("B1").Value 

这是使代码正常工作的方法:

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”时,您应该使用
范围
,而不是单元格。在我的回答中,
工作表(1)
指的是
工作表(“TestUserGuide”)
这是使代码正常工作的方法:

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”时,您应该使用
范围
,而不是单元格。在我的回答中,
工作表(1)
指的是
工作表(“TestUserGuide”)
我认为vba找不到TestUserGuide工作表。如果在即时窗口中运行以下操作,则会出现“对象不支持此属性或方法”错误:

如果我运行这个,我会得到您提到的错误“下标超出范围”:

这向我表明,活动工作簿是不正确的,因为如果vba能够找到工作表,您可能会得到另一个错误。您可以尝试添加此工作簿(并使用范围)吗

另一个选项是重命名工作表:

这样,您就不必担心活动工作簿(还可以获得intellisence):

此外,我建议您对其他人建议的所有更正进行修改。否则,您可能会遇到其他问题

最后,如果工作表像一个模板,并且结构不会改变,那么最好只使用一个公式(即E1的公式:=B1)。即使有条件逻辑,也可能更容易作为公式而不是vba代码进行维护

以下是一些故障排除步骤:

通过单击左侧灰色区域,在设置dblPower的线上切换断点:

如果即时窗口尚不存在,也可以按ctrl+g打开该窗口:

运行代码时,它应该在断点处暂停。现在您可以检查范围内的内容。尝试在即时窗口中键入以下内容,然后按enter键:

?Worksheets("TestUserGuidance").Name


请注意,当光标位于子例程中的某个位置时,也可以通过按F8键逐行遍历代码。归根结底,您可能需要逐行检查代码,以便弄清楚这一点

我想vba找不到TestUserGuide表。如果在即时窗口中运行以下操作,则会出现“对象不支持此属性或方法”错误:

如果我运行这个,我会得到您提到的错误“下标超出范围”:

这向我表明,活动工作簿是不正确的,因为如果vba能够找到工作表,您可能会得到另一个错误。您可以尝试添加此工作簿(并使用范围)吗

另一个选项是重命名工作表:

这样,您就不必担心活动工作簿(还可以获得intellisence):

此外,我建议您对其他人建议的所有更正进行修改。否则,您可能会遇到其他问题

最后,如果工作表像一个模板,并且结构不会改变,那么最好只使用一个公式(即E1的公式:=B1)。即使有条件逻辑,也可能更容易作为公式而不是vba代码进行维护

以下是一些故障排除步骤:

通过单击左侧灰色区域,在设置dblPower的线上切换断点:

如果即时窗口尚不存在,也可以按ctrl+g打开该窗口:

运行代码时,它应该在断点处暂停。现在您可以检查范围内的内容。尝试在即时窗口中键入以下内容,然后按enter键:

?Worksheets("TestUserGuidance").Name


请注意,当光标位于子例程中的某个位置时,也可以通过按F8键逐行遍历代码。归根结底,您可能需要逐行检查代码,以便弄清楚这一点

这个问题是重复的,我一周前刚刚回答了完全相同的问题。如果单击“调试”,代码的哪一部分会突出显示?没有
工作表.Cell
,我想你的意思是
工作表.Range
。将
Dim dblPower,dblMass声明为Double
只会将最后一个声明为
Double
,但第一个将保留为
Variant
而不是为每个变量声明一个类型,如
Dim dblPower声明为Double,dblMass声明为Double,…
@silenrevolution我已经修改了如何声明dblMass等,这很好。。现在给我带来问题的代码是:dblPower=Worksheets(“TestUserGuidance”).Range(“B6”).Value??我认为Dave Thornton的答案是正确的解决方案。您提供的代码应该没有错误的原因。但是,建议避免出现
选择
激活
等情况<代码>工作表(“TestUserGuidence”)与
活动工作簿相同。工作表(“TestUserGuidence”)
但不一定与
此工作簿相同。工作表(“TestUserGuidence”)
尤其是当您打开多个工作簿时。此问题重复,一周前我刚刚回答了完全相同的问题。如果单击“调试”,代码的哪一部分会突出显示?没有
Worksheets.Cell
?Worksheets("TestUserGuidance").Name
?ActiveWorkbook.Name