【发布时间】:2023-03-18 10:02:01
【问题描述】:
我正在处理 Excel 2011 for Mac(版本 14.3.1)上的一些数据,稍后我需要绘制这些数据并添加更多数据。为此,我使用了范围名称,正如here 所解释的那样。基本上,使用公式 =OFFSET($A$2,0,0,COUNTA($A:$A)-1)(西班牙语:=DESREF($A$2,0,0,CONTARA($A:$A)-1))创建名称范围。
我有很多专栏,所以我写了这个 vba 来帮我做:
Sub Botón6_AlHacerClic()
For i = 1 To Columns.Count
Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersTo:="=DESREF(" & Cells(2, i).Address & ",0,0,CONTARA(" & Replace(Cells(1, i).Address, "$1", "") & ":" & Replace(Cells(1, i).Address, "$1", "") & ")-1)"
Next i
End Sub
地点:
-
Cells(2, i).Address是第二行的单元格 ID(例如:$A$2) -
Replace(Cells(1, i).Address, "$1", "")是行字母(例如:$A)
我遇到的问题是,当手动输入名称时,它会将公式 =DESREF($A$2,0,0,CONTARA($A:$A)-1) 替换为 =DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1),这很好并且效果很好。但是当我通过 vba 执行此操作时,它会将其替换为不起作用的 =Sheet1!DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1)。
我尝试使用 Add manual 的不同选项,甚至尝试在创建名称后运行此代码以消除开头的 Sheet1! 但最后他们保留 Sheet1!:
Sub Botón7_AlHacerClic()
Set nms = ActiveWorkbook.Names
For i = 1 To nms.Count
nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREF")
Next i
End Sub
我尝试的另一件事是将 Sheet1!DESREF 替换为不是函数的东西:
Sub Botón7_AlHacerClic()
Set nms = ActiveWorkbook.Names
For i = 1 To nms.Count
nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREFF")
Next i
End Sub
在这种情况下,它给了我:=DESREFF($A$2,0,0,CONTARA($A:$A)-1) 但我还没有找到一种方法来使用 DESREF 而不添加 Sheet1!
如何防止 Sheet1! 出现在开头?
谢谢
【问题讨论】:
-
当您说 VBA 将其更改为
=Sheet1!DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1)时,具体的 VBA 是在做什么?看起来您最初的 sn-p 会覆盖那里的任何内容。你能指出导致这种变化的特定 VBA 行吗? -
它在行中:
Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersTo:="=DESREF(" & Cells(2, i).Address & ",0,0,CONTARA(" & Replace(Cells(1, i).Address, "$1", "") & ":" & Replace(Cells(1, i).Address, "$1", "") & ")-1)"此外,即使我尝试用nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREF")替换它,它仍然会写入 Sheet1!DESREF。另一方面,如果我这样做nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREFF"),它会写=DESREFF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1) -
哇,这太疯狂了。我觉得我可以让这个工作,只要我能重复这个问题。每次,Excel/VBA 都会做我认为应该做的事——我无法让它重新创建你的错误。如果这仍然是一个问题,并且您可以重复导致错误的步骤(在您的 OP 中),我很乐意查看它。您可能需要具体说明——“突出显示 C 列,将其命名为“blah”,运行 VBA Sub 'XYZ'。”我知道这对你来说可能并不那么重要,所以我会让你决定。
-
我将在另一个 Excel 版本上尝试这个,以防它是 Mac 版本 14.3.1 上的特定错误。我会让你知道结果。
-
有点古怪...我刚试过,我可以使用名称,既可以使用 F5 也可以使用左上角的框,但它们没有t 在下拉菜单中显示为选项,或者在我选择它们时显示为...换句话说,它有点有效。也许存在某种类型的“注册”事件,使 Excel 的其他部分能够以与 UI 相同的方式工作?
标签: excel vba macos excel-2011