使用 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