Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1768to1772
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

Namensmanager und Schleifen

Namensmanager und Schleifen
30.06.2020 16:04:19
Steve

Moin Leute,
ich hab mal eine Frage. Ich hab einen Fehler im Code, denke sogar zu wissen wo, aber ich weiss nicht wie ich ihn behebe.
Ich habe mit dem Namensmanager Namen vergeben. Normalerweise sind die ja auf "Arbeitsmappe" eingestellt. Aber das hat den Nachteil, das es mit jeder Kopie eines Sheets auch automatisch eine Kopie dieser Namen gibt. Eine endlos lange Liste bei 50 neu erstellten Sheets.
Vor allem dann, wenn die eingestellten Namen nur relevant für die ersten 4 Sheets sind und niemals in der Kopierten verwendet werden.
Also hab ich die Namen auf die entsprechenden Arbeitsblätter fixiert.
Nun musste ich mein Makro entpsrechend anpassen. Das habe ich versucht, aber er stoppt bei der Schleife.
Sub yfertigDATEN()
'die Überschriften in STARTSEITE, LISTE, INFO und MASTER
'werden entsprechend der Vorgabe in DATEN angepasst.
Dim i As Integer
Dim Objekt As Range, Objekt1 As Range, Objekt2 As Range, Objekt3 As Range, Objekt4 As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Set Objekt = Worksheets("DATEN").Range("N_Objekt")
Set Objekt1 = Worksheets("Startseite").Range("N_Objekt1")
Set Objekt2 = Worksheets("LISTE").Range("N_Objekt2")
Set Objekt3 = Worksheets("INFO").Range("N_Objekt3")
Set Objekt4 = Worksheets("ARCHIV").Range("N_Objekt4")
Worksheets("DATEN").Range("N_Objekt").Copy
For i = 1 To 4
 Range("Objekt" & i).PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, _
SkipBlanks:=False, Transpose:=False
Next i
With Sheets("DATEN")
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True, AllowUsingPivotTables:=True
.Visible = False
End With
Sheets("Startseite").Select
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Ich denke es liegt an dem "Range" weil beim ausführen würde dann ja stehen:
Range(Worksheets("Startseite").Range("N_Objekt1") .....usw
Also dachte ich mir, das "Range" muss weg damit ein sinnvoller Code daraus entsteht aber das scheint nicht zu funktionieren.
Hat da jemand ein Tipp für mich? Oder eine Website mit einer guten Erklärung wie man mit dem Namensmanager und VBA in diesem Fall arbeitet.
Ich hab zunächst keine Datei angefügt, weil ich befürchte einen Flüchtigkeitsfehler (oder Unkenntnis) zu haben, hole das aber gerne nach, wenn der Bedarf besteht.
Liebe Grüße
Steve

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Namensmanager und Schleifen
30.06.2020 18:20:12
Jürgen
Hallo Steve,
das funktioniert einwandfrei, wenn Du
Range("Objekt" & i).PasteSpecial Paste:=xlPasteValues, Operation:= xlPasteSpecialOperationNone
verwendest.
Übrigens, bei mir geht auch

Range("N_Objekt" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False
ohne den Zwischenschritt über die VBA Objekte.
Gruß
Jürgen
AW: Namensmanager und Schleifen
30.06.2020 19:05:51
Luschi
Hallo Jürgen,
Steve benutzt lokalisierte Namen, die so definiert sind:
N_Objekt1 = =Startseite!$N$13:$N$38
Damit Range("N_Objekt1") zugriffsfähig ist, muß 'Startseite' das aktive TAbellenblatt sein, sonst gibt's einen Vba-Fehler.
Hallo Steve,
ich mache das über ein Array:
Wegen Regelverstoß gelöscht - Hans W. Herber
Anzeige
AW: kleine Korektur
01.07.2020 06:05:17
Luschi
Hallo Excel-Fan's
natürlich die der arbeitsblattbezogene Name so definiert:
Startseite!N_Objekt1: =Startseite!$N$13:$N$38
Gruß von Luschi
aus klein-Paris
AW: Namensmanager und Schleifen
01.07.2020 16:01:54
Steve
Moin Luschi,
das klappt super. Ich habe es noch angepasst, damit nicht immer "Diese Arbeitsmappe" durchlaufen wird.
Ausserdem hab ich noch zwei weitere Einträge hinzugefügt.
Habe ich die Lösung richtig verstanden?
Bei der ursprünglichen Version wurde ja nur eine Zahl - also die Zahlen 1-4 druchgegangen, der rest war aber gleich, da sich das Range im Namenmanager ja auf kein bestimmtes Sheet bezog und deshalb für alle gleich gültig war.
Da sich nun aber das Sheet mit im Code steht, wird jedes Objekt in dem Array gespeichert und ihr wird eine Nummer vergeben. Diese wird dann in der Schleife durchgegangen.
Laienhafte erklärung, aber besser bekomme ich es nicht hin.
Hoffe ich habe das dennoch richtig verstanden und wiedergegeben.
Liebe Grüße und großen Dank.
Steve
PS:Hier mein veränderter Code. sollte aber passen. Er funktioniert zumindest.
Sub MachMal()
Dim i As Integer
Dim myArr(0 To 4) As Object
Application.EnableEvents = False
Set myArr(0) = Worksheets("DATEN").Range("N_Objekt")
Set myArr(1) = Worksheets("Startseite").Range("N_Objekt1")
Set myArr(2) = Worksheets("Liste").Range("N_Objekt2")
Set myArr(3) = Worksheets("INFO").Range("N_Objekt3")
Set myArr(4) = Worksheets("ARCHIV").Range("N_Objekt4")
myArr(0).Copy
For i = 1 To UBound(myArr)
myArr(i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Next i
Application.CutCopyMode = False
Erase myArr
Application.EnableEvents = True
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige