Excel VBA“;下标超出范围“;运行错误';9';
我尝试实现以下代码,以便读取单元格值,然后将该值放入同一工作表上的另一个单元格中 工作表的名称如下:TestUserGuidence(没有空格) 代码如下: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
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