【发布时间】:2016-11-22 13:30:09
【问题描述】:
我目前正在使用命名范围的选项卡。它们都与第 1 类相关联。我想将这些单元格复制两次,为第 2 类和第 3 类创建相同的列。除了为接下来的两个类附加 _2/_3 之外,命名范围应该保持不变。我还需要在每列中更改公式,但包含正确的后缀(_2/_3)。
这是一个简化版本,可以更好地解释我想要做什么:
**Class 1**
Lives
Age
Adjust
Claim
Risk
**Class1 Class2 Class3**
Lives Lives_2 Lives_3
Age Age_2 Age_3
Adjust Adjust_2 Adjust_3
Claim Claim_2 Claim_3
Risk Risk_2 Risk_3
这些代表细胞的名称;它们还都包含在每个类中链接的公式。已完成的 1 类区域有 9 列和 120 行。我希望第二类填充第 10 到 18 列,第三类填充接下来的 9。这是我正在使用的代码,试图只更改名称,但我没有成功:
Sub ChangeNames()
Dim OldName As String
Dim NewName2 As String
Dim NewName3 As String
Dim rng As Range
For r = 1 To 127
For c = 1 To 10
If IsNamedRange(Cells(r, 1 + c)) Then
Set rng = Sheets("Medical").Cells(r, 1 + c)
OldName = rng.Name
NewName2 = OldName & "_2"
NewName3 = OldName & "_3"
Sheets("Medical").Cells(r, 11 + c).Name = NewName2
Sheets("Medical").Cells(r, 21 + c).Name = NewName3
End If
Next c
Next r
End Sub
Function IsNamedRange(MyRange) As Boolean
Dim vntName As Variant
On Error Resume Next
IsNamedRange = MyRange.Name <> ""
Exit Function
End Function
VBA 可以做到这一点吗?任何帮助将不胜感激!
子名称() 将此作为字符串调暗 将旧名称调暗为字符串 将 NewName2 调暗为字符串 将 NewName3 调暗为字符串 将 x 调暗为整数 Dim y As Integer
For Each this In Workbook.names
If Range(this).Worksheet = "Medical" Then
NewName2 = Range(this).Name & "_2"
NewName3 = Range(this).Name & "_3"
x = Range(this).Column
y = Range(this).Row
Sheets("Medical").Cells(x, 10 + y).Name = NewName2
Sheets("Medical").Cells(x, 20 + y).Name = NewName3
End If
Next this
结束子
【问题讨论】:
-
VBA 可以做到这一点 - 是的。 但我没有成功 - 如果您详细说明什么不起作用,我们可以为您提供更多帮助。
-
当我运行上面的代码时;旧名称变量的值为“=Medical!$b$3”,而不是单元格名称 Med_Prod——我如何让它返回名称范围而不是单元格位置。如果我需要进一步澄清,请告诉我
-
名称是在工作表级别还是工作簿级别定义的?
-
名称是在工作簿级别定义的
-
这会很复杂......您将不得不遍历工作簿中的名称集合 - 确保它们在您想要的工作表上,然后定义它们所在的列,然后使用偏移量和计数器将它们设置为
*n*列与name_*x*