Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1264to1268
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

Namen löschen

Namen löschen
Michael
Hallo Zusammen,
ich habe folgendes Problem: Ich kopiere ein Tabellenblatt in eine neu angelegte Datei. ( in einem Befehl) Dabei werden leider alle definierten Blattnamen mit in die neue Datei kopiert [und es wird natürlich ein Bezug zur Quelldatei aufgebaut)
Leider scheitern alle meine Versuche, via Makro von der Quelldatei aus, die Namen in der neuen Datei zu löschen.
Meine Frage: Geht das überhaupt?! oder kriegt man die Tabelle auch ohne Namen in eine neu erzeugte Datei?
Viele Grüße
Mcihael
AW: Namen löschen
31.05.2012 18:58:10
Matthias
Hallo Mc Ihael ;o)
Zitat:
... werden leider alle definierten Blattnamen mit in die neue Datei kopiert ...
Meinst Du tatsächlich die Blattnamen, also die Namen der Blattregister
oder meinst Du vielleicht doch die Definierte Namen aus dem zu kopierenden Registerblatt?
Du kannst ja die Namen vor dem Kopieren aus dem Quellblatt entfernen und erst dannach in die neue Datei kopieren.
Die Quelldatei schließt Du dannach wieder ohne sie zu speichern, somit bleiben in der Quelle alle definierten Namen erhalten.
Wie kopierst Du das Blatt? Zeig mal den Code den Du benutzt, oder machst Du das händisch ohne VBA?
Gruß Matthias
Anzeige
AW: Namen löschen
31.05.2012 19:05:53
Michael
Hallo Matthias,
ja, sehr unscharf beschrieben!
also ich kopiere ein ganzes Blatt und erzeuge dabei eine neue Datei:
Dim a As Integer
Application.ScreenUpdating = False
Tabelle19.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & "_" & Date & ".xlsx"
For a = 1 To ActiveWorkbook.Names.Count
ActiveWorkbook.Names(1).Delete
Next
Leider kann ich die mit kopierten Zell- und Bereichsnamen nicht in der Zieldatei löschen. In der Quelle kann ich die Namen nicht löschen, das ist zu umständlich. [Datei ist sehr groß, Öffnen dauert sehr lange!)
Woran scheitert denn das Löschen in der Zieldatei?
Gruß
Michael
Anzeige
Namen löschen
31.05.2012 19:20:36
Matthias
Hallo Michael
Probiers mal so
Option Explicit
Sub Kopiere()
Dim a As Integer, MyName As Name
On Error Resume Next
Application.ScreenUpdating = False
Tabelle1.Copy
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "\" & .Name & "_" & Date & ".xlsx"
For Each MyName In .Names
MyName.Delete
Next
End With
Application.ScreenUpdating = True
End Sub
Gruß Matthias
! Ich hab Tabelle1 statt 19 benutzt ! owT
31.05.2012 19:22:00
Matthias
:-))
31.05.2012 19:27:30
Michael
Hallo Matthias,
na das klappt ja super!
Wenn ich jetzt noch verstehe, warum das so ist, wäre das noch besser!!!
Vielen Dank auch.
Gruß
Michael
Anzeige
Du schickst ne Schleife über alle Namen ...
31.05.2012 19:34:09
Matthias
Hallo
... im ActiveWorkbook (also die neue Datei, die hat ja nur das eine kopierte Blatt)
Dabei wird in ihr jeder definierte Name abgeklappert, der Variable MyName übergeben und gelöscht.
Gruß Matthias
Vielen Dank!
31.05.2012 19:45:42
Michael
Hallo Matthias,
alles klar. Das wird mir auch künftig sehr weiter helfen!
Gruß
Mcihael
Jetzt bist Du wieder Mc Ihael ;-) kwT
31.05.2012 19:47:28
Matthias
AW: Vielen Dank!
31.05.2012 20:22:00
Reinhard
Hallo Michael,
dir ist alles klar? Na wunderbar, dann erklär mir doch bitte warum dein Code nicht lief.
DAS wäre alles. Einen anderen Weg nehmen ist nur ein Teil von alles :-)
Gruß
Reinhard
wie soll er das wissen mit VBA bescheiden
31.05.2012 20:45:35
Matthias
Hallo Reinhard
alls klar war sicher nicht so gemeint ;-)
' ActiveWorkbook.Names(1).Delete
MsgBox ActiveWorkbook.Names(a)..Name
Gruß Matthias
Anzeige
Ei Ei Ei .. ein Punkt zuviel ;o) kwT
31.05.2012 20:49:12
Matthias
AW: Ei Ei Ei .. ein Punkt zuviel ;o) kwT
31.05.2012 21:11:04
Reinhard
Hallo Matthias,
ich wollt doch nix böses, ICH wollte wissen wo der Wurm drin ist. Kam wohl falsch rüber *fluch*
An der Schleife von Michael liegt das m.E. nicht direkt.
Denn dieses klappt problemlos.
Sub tt()
Dim a
ActiveWorkbook.Names.Add Name:="Matthias", RefersToR1C1:="=Tabelle1!R1C1"
ActiveWorkbook.Names.Add Name:="Reinhard", RefersToR1C1:="=Tabelle1!R3C2"
MsgBox ActiveWorkbook.Names.Count
For a = 1 To ActiveWorkbook.Names.Count
ActiveWorkbook.Names(1).Delete
Next
MsgBox ActiveWorkbook.Names.Count
End Sub

Insofern ist die 1 in der Klammer völlig okay.
Ich habe ActiveWorksheet im Verdacht aber Sinn macht das auch nicht :-(
Frage noch offen
Gruß
Reinhard
Anzeige
hast Du falsch interpretiert ;-)
31.05.2012 21:19:36
Matthias
Hallo
Ich hatte hier einen Punkt zuviel drin
MsgBox ActiveWorkbook.Names(a)..Name
deshalb der Betreff
Gruß Matthias
AW: hast Du falsch interpretiert ;-)
31.05.2012 21:38:37
Reinhard
Hallo Matthias,
mach nur so weiter dann rufe ich wenn ich dann noch fähig bin zum telefonieren selbst die Jungs in den weißen Kitteln an die dann für mich einen sehr speziellen Kittel mitbringen, mich dann mitnehmen dahin
wo ich Ruhe hab... :-))
Ich habe bislang nicht verstanden warum der Code von Michael nicht funktioniert.
Meiner Meinug nach müßte er in ActiveWorkbook alle vergebenen Namen löschen.
Nach .Copy ist die neue Mappe das ActiveWorkbook.
Lt. Michael löscht sein Code dort nicht die Namen. Deiner macht es, warum?
Mit dem Punkt,
MsgBox ActiveWorkbook.Names(a).Name
da habe ich nicht verstanden was du mir damit sagen willst. Du benutzt kein .Names(a), Micahel auch nicht.
@Michael, sind denn wenigstens nach Durchlauf deines Codes in irgendeinem deiner offenen Mappen alle Namen verschwunden?
Ratlos.
Gruß
Reinhard
Anzeige
@ Reinhard
31.05.2012 23:01:14
Michael
Hallo Reinhard,
ich hoffe, Dir geht es gleich besser: Also mein Code brach mit einer Fehlermeldung ab: Die Namen können nicht angelegt werden!!! (witzig, oder)
Nun hat Matthias am Anfang die Fehlermeldung abgefangen und sein Code lief dadurch durch und es klappte alles prima.
Begründung: Windows legt wohl aus Kompatibilitätsgründen oder so Namen für die neuen Funktionen in Office 2007 an, damit diese Namen in alten Office-Versionen anstelle der Funktionen verwendet werden können. Und diese Dinger kann man wohl nicht löschen. Das erklärt die Fehlermeldung.
Das hat mir ein Guter Bekannter gesteckt, den ich auch um Hilfe angefleht habe.
alles in allen, hat Matthias doch alles Richtig gemacht und mir sehr geholfen.
Na dann eine gute Nacht
Mcihael
Anzeige
AW: @ Reinhard
01.06.2012 09:17:09
Reinhard
Hallo Michael,
ich krieg mit nachstehendem Code in XL 2007 keinen Fehler :-(
Sub tt()
Dim a As Integer
Application.ScreenUpdating = False
ActiveWorkbook.Names.Add Name:="Matthias", RefersToR1C1:="=Tabelle1!R1C1"
ActiveWorkbook.Names.Add Name:="Reinhard", RefersToR1C1:="=Tabelle1!R3C2"
Tabelle1.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & "_" & _
Format(Time, "hh_mm_ss") & ".xlsx"
For a = 1 To ActiveWorkbook.Names.Count
ActiveWorkbook.Names(1).Delete
Next a
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
Anzeige
AW: @ Reinhard
01.06.2012 11:07:51
Michael
Hallo Reinhard,
verwende mal in irgend einer Zelle die Funktion wennfehler!
...dann sollte eine Fehlermeldung kommen, wenn Du das Makro startest!
Gruß
Michael
Eeeendlich hab ich auch den Fehler :-)
01.06.2012 17:49:31
Reinhard
Hallo Michael,
danke daß du drangeblieben bist denn das interessiert mich schon sonst hätte ich nicht nachgebohrt.
Jetzt mit WennFehler klappt es, äh klappen = Fehler kommt *gg*
In D5 hatte ich vorher per Code "=Matthias" schreiben lassen, da kam kein Fehler.
Jetzt mit D5: =WennFehler(Matthias+1;... kommt der Fehler 1004
"Der eingegeben Name ist ungültig, bla bla möglicherweise Konflikt mit anderen namen/Objekten"
(gekürzte Wiedergabe)
Nachstehend der entsprechende Code.
Manuell kann ich übrigens in der neu entstandenen Mappe problemlos die Namen löschen.
Gruß
Reinhard
Sub tt()
Dim a As Integer
Application.ScreenUpdating = False
ActiveWorkbook.Names.Add Name:="Matthias", RefersToR1C1:="=Tabelle1!R1C1"
ActiveWorkbook.Names.Add Name:="Reinhard", RefersToR1C1:="=Tabelle1!R3C2"
Tabelle1.Range("D5").FormulaLocal = "=wennfehler(Matthias+1;""falsch"")"
Tabelle1.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & "_" & _
Format(Time, "hh_mm_ss") & ".xlsx"
For a = 1 To ActiveWorkbook.Names.Count
ActiveWorkbook.Names(1).Delete
Next a
Application.ScreenUpdating = True
End Sub

Anzeige
Makro Namen in Mappe listen
02.06.2012 17:33:57
fcs
Hallo Reinhard,
nachdem du endlich dem Problem auf die Schliche gekommen bist kann der Thread ja geschlossen werden.
Als Goody hier noch ein Makro, das alle Namen (inkl. der nicht sichtbaren) in der aktiven Arbeitsmappe in einem externen Tabellenblatt listet.
Gruß
Franz
Sub Datei_Namen_listen()
'Alle Namen in der aktiven Arbeitsmappe werden mit Zusatzinformation _
in einer Tabelle in einer neuen Arbeitsmappe gelistet.
Dim objName As Name, wbAktiv As Workbook, wbZiel As Workbook, wksZiel As Worksheet
Dim lngZei As Long
On Error Resume Next
Set wbAktiv = ActiveWorkbook
If wbAktiv.Names.Count = 0 Then
MsgBox "Keine Namen in Datei """ & wbAktiv.Name & """", vbInformation + vbOKOnly, "Namen  _
auslesen"
GoTo Beenden
End If
'Neue Arbeitsmappe für Namens-Liste anlegen
Set wbZiel = Workbooks.Add(Template:=xlWBATWorksheet)
Set wksZiel = wbZiel.Worksheets(1)
Application.ScreenUpdating = False
With wksZiel
lngZei = lngZei + 1
.Cells(lngZei, 1).Value = "Liste der Namen in Datei"
lngZei = lngZei + 1
.Cells(lngZei, 1).Value = wbAktiv.Name
'Spaltentitel
lngZei = lngZei + 1
.Cells(lngZei, 1).Value = "Name"
.Cells(lngZei, 2).Value = "Name Local"
.Cells(lngZei, 3).Value = "Refers to Local"
.Cells(lngZei, 4).Value = "Refers to R1C1Local"
.Cells(lngZei, 5).Value = "Visible"
.Cells(lngZei, 6).Value = "Parent"
.Cells(lngZei, 7).Value = "Category"
.Cells(lngZei, 8).Value = "MacroType"
Cells(lngZei + 1, 2).Select
Application.ActiveWindow.FreezePanes = True
For Each objName In wbAktiv.Names
lngZei = lngZei + 1
.Cells(lngZei, 1).Value = "'" & objName.Name
.Cells(lngZei, 2).Value = "'" & objName.NameLocal
.Cells(lngZei, 3).Value = "'" & objName.RefersToLocal
.Cells(lngZei, 4).Value = "'" & objName.RefersToR1C1Local
.Cells(lngZei, 5).Value = objName.visible
With .Cells(lngZei, 6)
If objName.Parent.Name = wbAktiv.Name Then
.Value = "Datei: "
Else
.Value = "Tabelle: "
End If
.Value = .Value & objName.Parent.Name
End With
.Cells(lngZei, 7).Value = objName.Category
.Cells(lngZei, 8).Value = objName.MacroType
Next
.Range(.Columns(1), Columns(8)).AutoFit
End With
wbZiel.Activate
Beenden:
Application.ScreenUpdating = True
Set wbAktiv = Nothing: Set wbZiel = Nothing: Set wksZiel = Nothing: Set objName = Nothing
End Sub

AW: Makro Namen in Mappe listen
02.06.2012 18:13:50
Reinhard
Hallo Franz,
danke für den Code, wird gebunkert, ich seh gerne Goodies :-)
Wenn du mit "endlich" darauf anspielen würdest daß ich hier genervt habe so tut mir das zwar leid
aber ich sah/sehe es als notwendig für mich an überhaupt mal das Problem nachstellen zu können.
So ergab es sich halt das der Thread wuchs und wuchs...
"auf die Schliche gekommen" schon, aber noch ist mein Status so, da ist Code der etwas machen will
was aber einen Fehler erzeugt. Mache ich das gleiche manuell geht es. Das muß ich für mich noch
klären/erkunden/testen...
Aber, wenn ich dann eine gezielte Rückfrage habe frage ichh hier neu an.
Gruß
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige