vba excel 2010中意外自动更改a1/r1c1符号
我有一个excel/vba问题,似乎发生在excel2010年,而不是excel2016年。对我来说,这是a1和r1c1符号之间不可理解的转换 我有一个动态范围vba excel 2010中意外自动更改a1/r1c1符号,excel,vba,Excel,Vba,我有一个excel/vba问题,似乎发生在excel2010年,而不是excel2016年。对我来说,这是a1和r1c1符号之间不可理解的转换 我有一个动态范围 Dim rng As Range rng = Application.Range("worksheet!A4:A" & _ Worksheets("worksheet").Range("A" & rows.Count).End(xlUp).Row 此外,我还有一个名称变量(称为“Norm”),我在单元格中用
Dim rng As Range
rng = Application.Range("worksheet!A4:A" & _
Worksheets("worksheet").Range("A" & rows.Count).End(xlUp).Row
此外,我还有一个名称变量(称为“Norm”),我在单元格中用作下拉选项,并希望使用
With Application.Names("Norm")
.Name = "Norm"
.RefersTo = rng.Address
.Comment = ""
End With
在保存之前,两者都在工作簿上运行
在vba编辑模式下保存时,一切正常,名称变量在a1表示法中具有正确的范围,规范内容根据范围
但在纯excel模式下保存会导致r1c1表示法中的范围,名称变量无法处理该范围而将其保留为空。不幸的是,我找不到任何解释或解决办法。这是excel2010版还是我能做些什么?
Name
有两个属性referesto
和referestor1C1
,这意味着您应该分配适当的地址样式。如果要确保获得正确的符号,应使用ReferenceStyle
参数:
Names("Norm").RefersTo = "=" & Range("A1").Address(ReferenceStyle:=xlA1)
Names("Norm").RefersToR1C1 = "=" & Range("A1").Address(ReferenceStyle:=xlR1C1)
Dim rng As Range
WITH THISWORKBOOK.WORKSHEETS("worksheet")
SET rng = .Range(.cells(4, "a"), .cells(.rows.count, "a").end(xlup))
end with
With thisworkbook.Names("Norm")
.Name = "Norm" 'totally redundant, it already has a name identified in the line above
.RefersTo = rng 'no address, just rng
.Comment = ""
End With
首先,您没有正确设置
rng
对象:
rng = Application.Range("worksheet!A4:A" & _
Worksheets("worksheet").Range("A" & rows.Count).End(xlUp).Row
如果给您一个错误,您需要设置您的rng
对象,请参见下面的代码:
Dim Sht As Worksheet
Dim Rng As Range, LastRow As Long
' set the worksheet object
Set Sht = ThisWorkbook.Worksheets("worksheet")
With Sht
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' get last row with data in column A
' set the Range object
Set Rng = .Range("A4:A" & LastRow)
End With
' updating the range that "Norm" refres to
With ThisWorkbook.Names("Norm")
.RefersTo = Rng
End With
非常感谢。我也试过了,但没有影响问题。但是有用的信息!非常感谢。我不知道如何正确地处理范围对象。我选择了@user10847676的答案,因为它更紧凑。但如果允许的话,我也会投你的一票。