将命名范围设置为整数
Set Named Ranges as Integers
我是 VBA 的新手,目前我正在尝试通过引用命名范围而不是特定单元格来让我的生活更轻松(我仍在处理整个工作簿,而且我不' 想要在每次移动单元格时都必须更改引用)。据我所知,使用命名范围而不是单元格地址应该不是什么大问题?
下面的代码是我正在处理的更大代码的特定部分。它只是将一个单元格(包含工作表中的公式)的值输入到其上方的单元格。我可以使用代码 "wsi.Cells(19, 10).Value = Cells(20, 10).Value" 实现这一点,但我无法使用设置为整数的命名范围来实现它。
我已经尝试了几个变体,但我总是遇到错误,所以任何建议都很好!
编辑:删除了几行与 post.
无关的代码
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
而不是 Integer
。
以下两行相同
StartA = wsi.Range("In_StartA")
StartA = wsi.Range("In_StartA").Value
如果您省略 .Value
,它仍然是默认值。但是在第二行中你清楚地看到发生了什么:范围In_StartA
的值被写入变量StartA
(没有link到范围,因为 StartA
是一个数值 Integer
而不是范围对象)。
但是如果您将变量声明为范围……
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
我是 VBA 的新手,目前我正在尝试通过引用命名范围而不是特定单元格来让我的生活更轻松(我仍在处理整个工作簿,而且我不' 想要在每次移动单元格时都必须更改引用)。据我所知,使用命名范围而不是单元格地址应该不是什么大问题?
下面的代码是我正在处理的更大代码的特定部分。它只是将一个单元格(包含工作表中的公式)的值输入到其上方的单元格。我可以使用代码 "wsi.Cells(19, 10).Value = Cells(20, 10).Value" 实现这一点,但我无法使用设置为整数的命名范围来实现它。
我已经尝试了几个变体,但我总是遇到错误,所以任何建议都很好!
编辑:删除了几行与 post.
无关的代码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
而不是 Integer
。
以下两行相同
StartA = wsi.Range("In_StartA")
StartA = wsi.Range("In_StartA").Value
如果您省略 .Value
,它仍然是默认值。但是在第二行中你清楚地看到发生了什么:范围In_StartA
的值被写入变量StartA
(没有link到范围,因为 StartA
是一个数值 Integer
而不是范围对象)。
但是如果您将变量声明为范围……
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