Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Namensmanager in Z1S1 Schreibweise

Forumthread: VBA: Namensmanager in Z1S1 Schreibweise

VBA: Namensmanager in Z1S1 Schreibweise
23.11.2021 20:29:32
Scotch
Hallo zusammen,
bislang bin ich immer als stiller Mitleser mit meinen Problemchen fertig geworden - diesmal leider nicht.
Ich habe eine Tabelle Werten, welche ich erstmal über den Namensmanager ordnen möchte (viele verschieden große Bereiche). Die Namen möchte ich dann in Formeln weiternutzen. Beispielsweise versehe ich einen Bereich mit dem Namen

s_1_4_1_1000_d_m
und rufe dann später in einer Zelle die Formel

=MITTELWERT(s_1_4_1_1000_d_m)
auf.
Leider erhalte ich nach Durchlauf des Makros im Namensmanager die gewünschten Namen, jedoch beziehen diese sich auf Zellen in der Z1S1 Schreibweise und die Formeln mit den Namen sind nicht nutzbar. Im Namensmanager wird mir als Wert eine leere Klammer {...} angezeigt.
Wenn ich dieselben Bereiche händisch einpflege, ist der Bezug in A1 Schreibweise und die Formeln funktionieren.
Erst habe ich mit RefersTo: Range(Cells(), Cells()) gearbeitet, bin dann auf einen String mit Zellennamen umgestiegen. Das Problem bleibt. Auch das umstellen von Excel auf die Z1S1 Bezugsart hat nicht funktioniert...
Folgender Codeschnipsel erzeugt die Namen, bei Bedarf kann ich die Datei gerne uploaden.

Sub Namenvergeben()
For blatt = 3 To 4
For scan = 1 To 100 Step 9
zeilestart = 3
For umo = 1 To 3
If umo = 1 Then
suffix = "u"
ElseIf umo = 2 Then
suffix = "m"
ElseIf umo = 3 Then
suffix = "o"
End If
zeileende = ThisWorkbook.Sheets(blatt).Cells(zeilestart, scan).End(xlDown).Row
Application.CutCopyMode = False
Namebasis = "s_" & Replace(Left(ThisWorkbook.Sheets(blatt).Cells(1, scan).Value, Len(ThisWorkbook.Sheets(blatt).Cells(1, scan).Value) - 4), "-", "_") & "_"
For i = 1 To 1
vergname = Namebasis & LCase(Left(ThisWorkbook.Sheets(blatt).Cells(2, scan + i), 1)) & "_" & suffix
ActiveWorkbook.Names.Add Name:=vergname, RefersTo:="='" & ThisWorkbook.Sheets(blatt).Name & "'!" & "$" & CStr(spaltenname(scan + i)) & "$" & CStr(zeilestart) & ":$" & CStr(spaltenname(scan + i)) & "$" & CStr(zeileende)
ActiveWorkbook.Names(vergname).Comment = ""
Next i
For i = 6 To 7
vergname = Namebasis & Left(ThisWorkbook.Sheets(blatt).Cells(2, scan + i), 1) & suffix
ActiveWorkbook.Names.Add Name:=vergname, RefersTo:="='" & ThisWorkbook.Sheets(blatt).Name & "'!" & "$" & CStr(spaltenname(scan + i)) & "$" & CStr(zeilestart) & ":$" & CStr(spaltenname(scan + i)) & "$" & CStr(zeileende)
ActiveWorkbook.Names(vergname).Comment = ""
Next i
zeilestart = zeileende + 2
Next umo
Next scan
Next blatt
End Sub
Function spaltenname(ByVal spalte As Integer) As String
spaltenname = Left(Replace(Sheets(1).Cells(1, spalte).Address, "$", ""), Len(Replace(Sheets(1).Cells(1, spalte).Address, "$", "")) - 1)
End Function
Vielen Dank im Voraus!
VG
Scotch
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Namensmanager in Z1S1 Schreibweise
23.11.2021 21:20:41
Daniel
Hi
das wichtigste zuerst:
lösch die Zeilen: ActiveWorkbook.Names(vergname).Comment = ""
das Einfügen des Kommentars ist fehlerhaft programmiert und verursacht das Problem.
dann sollten auch die anderen Methoden den Namen zu erstellen funktionieren.
du hast dir hier die komplizierteste rausgesucht.
schreibst du die Formel als RefersToR1C1 mit R1C1-Zelladressen, kannst du dir die Umwandlung von Spaltennummer in Spaltenbuchstaben - dh die Funktion spaltenname - sparen, weil man ja bei R1C1-Adressen auch die Spalte als nummer angibt (so die du sie her vorliegen hast).
auch RefersTo:=Range(Cells(), Cells()) also den Zellbereich direkt anhängen sollte funktionieren und damit das einfachste sein.
Du musst hier nur beachten, dass das Tabellenblatt vor den beiden Cells stehen muss und nicht vor der Range (dort darf es stehen, muss aber nicht bzw nur in bestimmten Fällen (Code steht in einem Tabellenblattmodul))
also: ... RefersTo:=Range(ThisWorkbook.Sheets(blatt).Cells(Zeilestart, scan + i), ThisWorkbook.Sheets(blatt).Cells(Zeileende, scan + i))
oder einfacher: ...RefersTo:=ThisWorkbook.Sheets(blatt).Cells(Zeilestart, scan + i).Resize(Zeileende - Zeilestart + 1, 1)
und nur so nebenbei
bei CStr(spaltenname(scan + i)) ist das CStr überflüssig, da die Funktion spaltenname ja schon einen Text ausgibt und ein Text schon ein Text ist und nicht mehr in einen Text umgewandelt werden muss (was CStr ja so macht).
Gruß Daniel
Anzeige
AW: VBA: Namensmanager in Z1S1 Schreibweise
23.11.2021 21:41:44
Scotch
Wow, vielen Dank für die schnelle Hilfe!
Es lag tatsächlich an dem Names().Comment
Damit ist der Abend gerettet, danke @Daniel!
VG
Scotch
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige