2017-04-25 7 views
0

Ich habe diesen Code:..Benennen einer Zelle mit VBA in Excel

ActiveWorkbook.Names.Add Name:="BuBatch", RefersToR1C1:= _ 
    "='Business Units'" & ActiveCell.Address 

Ich verwende „ActiveCell.Address, weil die Zelle ändert aber ich erhalte eine Fehlermeldung sagen, es ist ein Fehler in der Formel I don ‚t wissen, was der Fehler ist. jede Hilfe dankbar.

+5

Entfernen Sie den 'R1C1', da Sie ihm eine A1-Adresse geben. –

Antwort

1

Unter der Annahme, dass die ActiveCell auf dem Blatt ist‚Business Units‘(und dass Sie nicht versuchen, einen Namen für die Zelle auf Blatt‚Business Units‘zu setzen, dass an einer Stelle als aktuelle Zelle auf einem anderen Blatt), können Sie Ihren Code vereinfachen:

ActiveCell.Name = "BuBatch" 

die vorhandene Formel Befestigung erfordert die Entfernung von R1C1 Referenztyp und das Einführen der ! (wie in einem Kommentar von Scott Craner erwähnt), um die Blattnamen von der Adresse zu trennen, dh

ActiveWorkbook.Names.Add Name:="BuBatch", RefersTo:= _ 
    "='Business Units'!" & ActiveCell.Address 
+0

danke so viel \ – aoswald

0

Range.Address ist eine parametrisierte Eigenschaft. Sie können mit dem Object Browser (drücken Sie einfach F2) an seiner Definition peek:

VBE Object Browser showing Range.Address definition

Wie Sie sehen können, die Definition lautet wie folgt:

Property Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle As XlReferenceStyle = xlA1], [External], [RelativeTo]) As String 

Eckige Klammern bezeichnen optionale Parameter, wenn Sie dies tun:

foo = ActiveCell.Address 

Du eigentlich so etwas wie dies zu tun:

foo = ActiveCell.Address(_ 
     RowAbsolute:=True, _ 
     ColumnAbsolute:=True, _ 
     ReferenceStyle:=xlA1, _ 
     External:=False, _ 
     RelativeTo:=Nothing) 

Hinweis der xlA1 Wert des ReferenceStyle Argument; die andere Möglichkeit dafür ist xlR1C1.

Wenn Sie RefersToR1C1 zuweisen möchten, müssen Sie eine R1C1 Adresse liefern, die einen Nicht-Standardwert zum ReferenceStyle Parameter beinhaltet Versorgung:

ActiveWorkbook.Names.Add _ 
    Name:="BuBatch", _ 
    RefersToR1C1:="='Business Units'!" & ActiveCell.Address(ReferenceStyle:=XlR1C1) 

Oder verwenden Sie die Standard-Adressierung Stil und zuweisen RefersTo statt:

ActiveWorkbook.Names.Add _ 
    Name:="BuBatch", _ 
    RefersTo:="='Business Units'!" & ActiveCell.Address 

ich die Verwendung von ActiveCell Frage würde Hier: Es bedeutet, dass Sie an einer anderen Stelle in Ihrem Code diese bestimmte Zelle aktivieren. Nicht. Arbeiten Sie stattdessen mit dem Objektmodell:

Dim targetBook As Workbook 
Set targetBook = Application.Workbooks.Open(path) 

Dim target As Range 
Set target = targetBook.Worksheets("Sheet1").Range("A1") 'whatever the actual target cell is 

targetBook.Names.Add Name:="BuBatch", RefersTo:="='Business Units'!" & target.Address 
Verwandte Themen