我是VBA的新手,我目前正尝试通过引用命名范围而不是特定单元格来使我的生活更轻松(我仍在研究整个工作簿,并且我不想继续更改单元格每次移动时引用)。据我所知,使用命名范围而不是单元格地址应该不是一个大问题?
下面的代码是我正在处理的更大代码的特定部分。它只是将值从一个单元格(在工作表中包含一个公式)输入到其上方的单元格。我可以使用代码“ wsi.Cells(19,10).Value = Cells(20,10).Value”来实现这一点,但是我不能使用设置为整数的命名范围来使其工作。
我尝试了几种变体,但我不断遇到错误,因此任何建议都将是很棒的!
编辑:删除了几行与该帖子无关的代码。
Sub Test1()
Application.CutCopyMode = False
Dim wsi As Worksheet
Dim StartA As Integer
Dim StartB As Integer
Set wsi = Worksheets("Input")
StartA = wsi.Range("In_StartA")
StartB = wsi.Range("In_StartB")
StartA = StartB
End Sub
您需要将它们定义为Range
not Integer
。
以下两行相同。
StartA = wsi.Range("In_StartA")
StartA = wsi.Range("In_StartA").Value
如果省略,.Value
它仍然是默认值。但是在第二行中,您可以清楚地看到发生了什么:range的值In_StartA
被写入变量StartA
(由于StartA
是数字值Integer
而不是range对象,所以没有链接到range)。
但是,如果您将变量声明为范围…
Dim StartA As Range
Dim StartB As Range
...并将变量设置为范围...
Set StartA = wsi.Range("In_StartA")
Set StartB = wsi.Range("In_StartB")
……然后下一行将更改单元格中的值In_StartA
……
StartA = StartB
…因为它实际上与
StartA.Value = StartB.Value
…可以清楚地看到两个变量都是范围对象。
因此,以下应该工作:
Sub Test1()
Application.CutCopyMode = False
Dim wsi As Worksheet
Set wsi = ThisWorksheet.Worksheets("Input")
Dim StartA As Range
Set StartA = wsi.Range("In_StartA")
Dim StartB As Range
Set StartB = wsi.Range("In_StartB")
StartA.Value = StartB.Value
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句