Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

218 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige