2017-07-26 73 views
0

的許多範圍我有一列中,我想讓命名範圍值的一個長長的清單:命名可變長度

  • A1010標準地基
  • A101001牆基
  • A101001 COLUMN地基&樁帽
  • A1020特殊地基
  • A102001 PILE FOUNDATIONS

其中每個範圍的名稱應該是加粗的單元格。

這是我到目前爲止,我確定它笨重,但它是我的(有點);我從其他代碼中找到的其他代碼拼湊在一起。它應該用粗體文本減去空格來命名一個範圍;然後重複刪除命名的範圍,並使用每個新的非粗體字符串重新添加。

當我嘗試運行它時,出現錯誤:運行時錯誤9;下標超出範圍。

我想我被掛在了「RefersToR1C1」的東西上,我用Google搜索了一下,但對我來說沒有意義。

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打破了事情,浪費了我的時間,所以假設我什麼都不知道。

+0

是您的工作表「Sheet 4」或「Sheet4」? – braX

+0

它實際上是Sheet4。現在我得到錯誤1004:應用程序定義或對象定義的錯誤。 – 1honeybadger

+0

準確地說,工作表上您希望名稱參考的範圍是什麼?或者它是一個數組而不是範圍? –

回答

0

我想通了。我必須在名稱上做大量的替換,以便它們可以是適當的範圍名稱。範圍名稱是粗體,值不是。

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