使用 VBA 创建混合引用命名范围
Creating a mixed reference named range with VBA
我正在尝试编写一些 VBA,如果它匹配 header,它可以创建一个命名范围。我已经设法实现了这一点,但遇到了一个障碍,我似乎无法开始工作。
我需要将命名范围混合引用仅锁定在列中。我也有这个工作但是当试图结合所有它不携带混合参考时。
示例 -
Sub test()
i = 1
Do Until Cells(1, i) = "Created Date"
i = i + 1
Loop
NR1 = Cells(1, i).Offset(1, 0).Address(False, True)
ActiveWorkbook.Names.Add Name:="Created_Date", RefersTo:=NR1
ActiveWorkbook.Names("Created_Date").Comment = ""
End Sub
以上将使用所需的混合引用设置命名范围,但显然没有 sheet 名称 -
所以我的想法是像这样简单地使用 activesheet.range(NR1) -
Sub test()
i = 1
Do Until Cells(1, i) = "Created Date"
i = i + 1
Loop
NR1 = Cells(1, i).Offset(1, 0).Address(False, True)
ActiveWorkbook.Names.Add Name:="Created_Date", RefersTo:=ActiveSheet.Range(NR1)
ActiveWorkbook.Names("Created_Date").Comment = ""
End Sub
这确实在 sheet 上创建了命名范围,但引用返回到被锁定到一个单元格!
有什么想法吗?
您可以在 Range.Address
属性 中使用 External
参数使工作簿和 Sheet 名称成为返回地址的一部分。
如果将地址放入 RefersTo
参数,它只会将字符串作为其值,而不是转到地址指向的单元格或范围。要解决此交互问题,您可以在地址前添加一个 =
以使字符串成为 Excel 将计算的公式。
因此,通过以下更改,您的代码应该可以满足您的要求:
NR1 = Cells(1, i).Offset(1, 0).Address(False, True, External:=True)
ActiveWorkbook.Names.Add Name:="Created_Date", RefersTo:="=" & NR1
我正在尝试编写一些 VBA,如果它匹配 header,它可以创建一个命名范围。我已经设法实现了这一点,但遇到了一个障碍,我似乎无法开始工作。
我需要将命名范围混合引用仅锁定在列中。我也有这个工作但是当试图结合所有它不携带混合参考时。
示例 -
Sub test()
i = 1
Do Until Cells(1, i) = "Created Date"
i = i + 1
Loop
NR1 = Cells(1, i).Offset(1, 0).Address(False, True)
ActiveWorkbook.Names.Add Name:="Created_Date", RefersTo:=NR1
ActiveWorkbook.Names("Created_Date").Comment = ""
End Sub
以上将使用所需的混合引用设置命名范围,但显然没有 sheet 名称 -
所以我的想法是像这样简单地使用 activesheet.range(NR1) -
Sub test()
i = 1
Do Until Cells(1, i) = "Created Date"
i = i + 1
Loop
NR1 = Cells(1, i).Offset(1, 0).Address(False, True)
ActiveWorkbook.Names.Add Name:="Created_Date", RefersTo:=ActiveSheet.Range(NR1)
ActiveWorkbook.Names("Created_Date").Comment = ""
End Sub
这确实在 sheet 上创建了命名范围,但引用返回到被锁定到一个单元格!
有什么想法吗?
您可以在 Range.Address
属性 中使用 External
参数使工作簿和 Sheet 名称成为返回地址的一部分。
如果将地址放入 RefersTo
参数,它只会将字符串作为其值,而不是转到地址指向的单元格或范围。要解决此交互问题,您可以在地址前添加一个 =
以使字符串成为 Excel 将计算的公式。
因此,通过以下更改,您的代码应该可以满足您的要求:
NR1 = Cells(1, i).Offset(1, 0).Address(False, True, External:=True)
ActiveWorkbook.Names.Add Name:="Created_Date", RefersTo:="=" & NR1