命名多个可变长度范围
Naming Many Ranges of Variable Length
我在一列中有一长串值,我想将其命名为范围:
- A1010 标准基础
- A101001 墙基础
- A101001 柱基础和桩帽
- A1020 特殊基金会
- A102001 桩基础
每个范围的名称应该是加粗的单元格。
这是我目前得到的,我确定它很笨重但它是我的(有点);我从其他问题中发现的其他零碎代码中拼凑了它。它应该用粗体文本减去空格来命名一个范围;然后重复删除命名范围并使用每个新的非粗体字符串再次添加它。
当我尝试 运行 它时,出现错误:运行时错误 9;下标超出范围。
我想我对 "RefersToR1C1" 这件事很着迷,我用谷歌搜索了它,但对我来说没有意义。
Sub Change_Name()
Dim RngName As String
Dim MyADD As String
Sheets("Sheet 4").Select
Range("C2").Select
While Not IsEmpty(ActiveCell.Value)
If ActiveCell.Font.Bold = True Then
ActiveCell.Replace " ", ""
RngName = ActiveCell.Value
Else
MyADD = ActiveWorkbook.Names(RngName).RefersToR1C1
MyADD = MyADD & "," & CStr(ActiveCell)
ActiveWorkbook.Names("RngName").Delete
ActiveWorkbook.Names.Add Name:="RngName", RefersToR1C1:=MyADD
End If
Selection.Offset(1, 0).Select
Wend
End Sub
我觉得我很接近,这就是我几个小时前的想法。任何帮助表示赞赏。我只知道 vba 足以破坏东西和浪费我的时间,所以假设我什么都不知道。
我明白了。我不得不在名称中进行大量替换,以便它们成为正确的范围名称。范围名称是粗体,值不是。
Option Explicit
Sub Change_Name()
Dim Rng As Range
Dim cell As String
Dim RngName As String
Dim MyADD As Range
Set MyADD = Nothing
Sheets("Sheet6").Select
Range("F1").Activate
Set Rng = Nothing
While Not IsEmpty(ActiveCell.Value)
If ActiveCell.Font.Bold = True Then
ActiveCell.Replace " ", ""
ActiveCell.Replace "&", "_"
ActiveCell.Replace "/", "."
ActiveCell.Replace "-", ""
ActiveCell.Replace "(", "_"
ActiveCell.Replace ")", "_"
ActiveCell.Replace ",", "_"
RngName = ActiveCell.Value
Selection.Offset(1, 0).Select
While ActiveCell.Font.Bold = False And IsEmpty(ActiveCell.Value) = False
If Rng Is Nothing Then
Set Rng = Range(ActiveCell.Address)
Selection.Offset(1, 0).Select
Else
Set MyADD = Range(ActiveCell.Address)
Set Rng = Union(Rng, MyADD)
Selection.Offset(1, 0).Select
End If
Wend
ActiveWorkbook.Names.Add Name:=RngName, RefersTo:=Rng
Set Rng = Nothing
End If
Wend
End Sub
我在一列中有一长串值,我想将其命名为范围:
- A1010 标准基础
- A101001 墙基础
- A101001 柱基础和桩帽
- A1020 特殊基金会
- A102001 桩基础
每个范围的名称应该是加粗的单元格。
这是我目前得到的,我确定它很笨重但它是我的(有点);我从其他问题中发现的其他零碎代码中拼凑了它。它应该用粗体文本减去空格来命名一个范围;然后重复删除命名范围并使用每个新的非粗体字符串再次添加它。
当我尝试 运行 它时,出现错误:运行时错误 9;下标超出范围。
我想我对 "RefersToR1C1" 这件事很着迷,我用谷歌搜索了它,但对我来说没有意义。
Sub Change_Name()
Dim RngName As String
Dim MyADD As String
Sheets("Sheet 4").Select
Range("C2").Select
While Not IsEmpty(ActiveCell.Value)
If ActiveCell.Font.Bold = True Then
ActiveCell.Replace " ", ""
RngName = ActiveCell.Value
Else
MyADD = ActiveWorkbook.Names(RngName).RefersToR1C1
MyADD = MyADD & "," & CStr(ActiveCell)
ActiveWorkbook.Names("RngName").Delete
ActiveWorkbook.Names.Add Name:="RngName", RefersToR1C1:=MyADD
End If
Selection.Offset(1, 0).Select
Wend
End Sub
我觉得我很接近,这就是我几个小时前的想法。任何帮助表示赞赏。我只知道 vba 足以破坏东西和浪费我的时间,所以假设我什么都不知道。
我明白了。我不得不在名称中进行大量替换,以便它们成为正确的范围名称。范围名称是粗体,值不是。
Option Explicit
Sub Change_Name()
Dim Rng As Range
Dim cell As String
Dim RngName As String
Dim MyADD As Range
Set MyADD = Nothing
Sheets("Sheet6").Select
Range("F1").Activate
Set Rng = Nothing
While Not IsEmpty(ActiveCell.Value)
If ActiveCell.Font.Bold = True Then
ActiveCell.Replace " ", ""
ActiveCell.Replace "&", "_"
ActiveCell.Replace "/", "."
ActiveCell.Replace "-", ""
ActiveCell.Replace "(", "_"
ActiveCell.Replace ")", "_"
ActiveCell.Replace ",", "_"
RngName = ActiveCell.Value
Selection.Offset(1, 0).Select
While ActiveCell.Font.Bold = False And IsEmpty(ActiveCell.Value) = False
If Rng Is Nothing Then
Set Rng = Range(ActiveCell.Address)
Selection.Offset(1, 0).Select
Else
Set MyADD = Range(ActiveCell.Address)
Set Rng = Union(Rng, MyADD)
Selection.Offset(1, 0).Select
End If
Wend
ActiveWorkbook.Names.Add Name:=RngName, RefersTo:=Rng
Set Rng = Nothing
End If
Wend
End Sub