ich möchte ein Tabellenblat kopieren. Bisher habe ich es wie folgt in VBA
gemacht :
Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
Es kopiert das letzte Tabellenblatt nach "ganz hinten". Jedes Tabellenblatt
stellt ja ein Objekt dar - dementsprechend benennt VBA das Objekt
automatisch, z.B. "Tabelle2", "Tabelle3" usw... ich möchte nun dem Objekt
einen Namen geben, und ich vermute, daß ich das VOR dem Kopieren machen
muss.
Jetzt die Frage, wie kopiere ich ein Tabellenblatt so, daß ich dem
Blatt/dem Objekt einen Namen geben kann?
Vielen Dank
--
Mit freundlichen Grüssen,
Timo Rumland
"Timo Rumland" schrieb:
nachdem du ein Blatt kopiert hast, ist dieses das aktive Blatt.
Darauf lässt sich gleich im Anschluss leicht zugreifen:
Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
ActiveSheet.Name = "NeuesBlatt"
--
Mit freundlichen Grüßen
Melanie Breden
_____________________
[Microsoft MVP für Excel]
Am Wed, 23 Jul 2003 18:48:23 +0200 hat Melanie Breden
<Melanie...@mvps.org> geschrieben:
> nachdem du ein Blatt kopiert hast, ist dieses das aktive Blatt.
> Darauf lässt sich gleich im Anschluss leicht zugreifen:
>
> Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
> ActiveSheet.Name = "NeuesBlatt"
danke für die Antwort, aber das war nicht das, was ich gemeint habe. Ich
möchte nicht die Eigenschaft "Name" ändern, sondern ich will den Namen des
*Objektes* im Programmiertechnischen Sinne ändern (ändern im weitesten
Sinne, es reich mir auch, den Namen vor dem Erstellen des Objekte
anzugeben).
Tabellen sind Objekte, und diese Objekte haben einen Namen. Ändere ich die
.Namen Eigenschaft der Tabelle, so sieht man die Tabelle in VBA als Objekt,
z.B. "Tabelle3 (Tabellenname)". Mit der Eigenschaft .Name kann ich den
"Sichtbaren" Namen ändern, also der Teil in Klammern. Ich möchte aber das
Eigentliche Objekt benennen.
Ich bin mir sicher, daß dies möglich ist (vermutlich muss ich vorher ein
Tabellen - Objekt instanzieren [mit set?] und einen Namen geben... ich bin
leider kein VBler und weiß nicht, wie ich das anstellen soll).
Ich hoffe das Problem nun besser beschrieben zu haben
Gruß, Timo
ich hoffe ich habe Dich richtig verstanden. Mir fällt nur
eine Lösung mit einen dynamischen Array ein. Jetzt heisst
es nicht mehr Tabelle1.Name, sondern arrSheet(0).Name
Public Sub test()
Dim arrSheet() As Variant
ReDim arrSheet(Sheets.Count - 1)
For i = 0 To Sheets.Count - 1
Set arrSheet(i) = Sheets(i + 1)
Next i
End Sub
Public Sub tabelleMitName()
Dim cmpVB As Object
Sheets(Sheets.Count).Copy
After:=Sheets(DieseArbeitsmappe.Sheets.Count)
Set cmpVB = Application.VBE.ActiveVBProject.VBComponents(2 +
Sheets.Count)
cmpVB.Name = "Arbeitsblatt"
End Sub
dann sollte dat Dingen <Arbeitsblatt> heißen.
Heiko
:-)
> ich hoffe ich habe Dich richtig verstanden. Mir fällt nur eine Lösung mit
> einen dynamischen Array ein. Jetzt heisst es nicht mehr Tabelle1.Name,
> sondern arrSheet(0).Name
>
> Public Sub test()
>
> Dim arrSheet() As Variant
> ReDim arrSheet(Sheets.Count - 1)
> For i = 0 To Sheets.Count - 1
> Set arrSheet(i) = Sheets(i + 1)
> Next i
> End Sub
Wo wird in Deinem Beispiel denn der Name des Objektes gesetzt? Nehmen wir
mal an, ich will ein Tabellenblatt kopieren, es ans Ende setzen, dessen
Name auf "Rechnung" stellen und den OBJEKTNAMEN auf "Tab01" setzen. Ich
verstehe nicht ganz, warum Du als Lösungsansatz ein Array verwenden willst?
Langsam beginne ich zu glauben, daß man mit VBA gar nicht in der Lage ist,
sein "eigenes Obejekt" zu erstellen :-/
Timo
"Timo Rumland" schrieb:
> > nachdem du ein Blatt kopiert hast, ist dieses das aktive Blatt.
> > Darauf lässt sich gleich im Anschluss leicht zugreifen:
> >
> > Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
> > ActiveSheet.Name = "NeuesBlatt"
>
> danke für die Antwort, aber das war nicht das, was ich gemeint habe. Ich
> möchte nicht die Eigenschaft "Name" ändern, sondern ich will den Namen des
> *Objektes* im Programmiertechnischen Sinne ändern (ändern im weitesten
> Sinne, es reich mir auch, den Namen vor dem Erstellen des Objekte
> anzugeben).
> Ich hoffe das Problem nun besser beschrieben zu haben
du meintest den Codenamen, jetzt hab ich's auch verstanden :-)
Probier mal folgende Prozedur:
Sub Codename()
Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Codename) _
.Properties("_CodeName").Value = "NeuerCodename" & Sheets.Count
End Sub
Die fortlaufende Zahl dient hier nur zur Fehlervermeidung,
falls es den Codenamen schon gibt.
"Heiko" schrieb:
> Public Sub tabelleMitName()
> Dim cmpVB As Object
> Sheets(Sheets.Count).Copy
> After:=Sheets(DieseArbeitsmappe.Sheets.Count)
> Set cmpVB = Application.VBE.ActiveVBProject.VBComponents(2 +
> Sheets.Count)
> cmpVB.Name = "Arbeitsblatt"
> End Sub
>
> dann sollte dat Dingen <Arbeitsblatt> heißen.
was zählst du da? Die VBE Komponenten?
Bei mir wird das zweite Standardmodul umbenannt :-(
wer im Glashaus sitzt...
Heiko
:-)
"Heiko" schrieb:
> wer im Glashaus sitzt...
> Heiko
> :-)
?
hat der Code bei dir funktioniert?
Man sollte aber erwähnen dass die Objekte in Excel sich in der
Registry widerspiegeln und das Umbenennen schöne Nebeneffekte haben
kann. Außerdem sehe ich bspw. wenig Sinn die Tabelle1 Hinz
Arbeitsblatt Kunz zu nennen, Hauptsache ich vermag sie zu manipulieren
.
Heiko
:-)
"Melanie Breden" <Melanie...@mvps.org> wrote:
"Heiko" schrieb:
> hat er. 1 ist in Norm DieseArbeitsmappe
> dann 1...n Arbeitsblatt (=>2+).
> trotzdem ist deine Auflistung mit (CodeName) die korrekte Variante.
> War aber nicht willens die veeXX.hlp auf CD zu suchen.
die VBE-Hilfe wird eigentlich automatisch mit installiert.
Arbeitest du noch mit Excel97 (veenob3.hlp )?
Ansonsten schau dir mal die neue Version an: VBOB6.CHM .
Einfach über die Windows-Suche suchen.
Oder setzte einen Verweis auf die Extensibilitys, dann wird die Datei in der OH integriert.
> Man sollte aber erwähnen dass die Objekte in Excel sich in der
> Registry widerspiegeln und das Umbenennen schöne Nebeneffekte haben
> kann. Außerdem sehe ich bspw. wenig Sinn die Tabelle1 Hinz
> Arbeitsblatt Kunz zu nennen, Hauptsache ich vermag sie zu manipulieren
Welche Nebeneffekte kann das haben?
Am Thu, 24 Jul 2003 13:35:39 +0200 hat Melanie Breden
<Melanie...@mvps.org> geschrieben:
> du meintest den Codenamen, jetzt hab ich's auch verstanden :-)
>
> Probier mal folgende Prozedur:
>
> Sub Codename()
> Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
>
> ThisWorkbook.VBProject.VBComponents(ActiveSheet.Codename) _
> .Properties("_CodeName").Value = "NeuerCodename" & Sheets.Count
> End Sub
ja genau, das meinte ich. Allerdings kommt bei Ausführung des Codes dieser
Fehler
"Die Methode 'Value' für das Objekt 'Property' ist fehlgeschlagen. Genau so
sieht der Code aus :
' Kopieren des letzten Tabellenblatt
Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
.Properties("_CodeName").Value = "test"
Was ist daran falsch?
Danke
Beste Grüsse,
Timo
"Timo Rumland" schrieb:
> > ThisWorkbook.VBProject.VBComponents(ActiveSheet.Codename) _
> > .Properties("_CodeName").Value = "NeuerCodename" & Sheets.Count
> > End Sub
>
> ja genau, das meinte ich. Allerdings kommt bei Ausführung des Codes dieser
> Fehler
>
> "Die Methode 'Value' für das Objekt 'Property' ist fehlgeschlagen. Genau so
> sieht der Code aus :
>
> ' Kopieren des letzten Tabellenblatt
> Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
> ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
> .Properties("_CodeName").Value = "test"
am besten kopierst du den Code, es fehlt nur ein Leerschritt mit Unterstrich in der ersten Zeile:
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Codename) _
Du willst den Objektnamen verändern, okay da hab ich Dich
falsch verstanden.
Tschüß
Julia
Am Fri, 25 Jul 2003 09:03:11 +0200 hat Melanie Breden
<Melanie...@mvps.org> geschrieben:
>> ' Kopieren des letzten Tabellenblatt
>> Sheets(Sheets.Count).Copy After:=Sheets(DieseArbeitsmappe.Sheets.Count)
>> ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
>> .Properties("_CodeName").Value = "test"
>
> am besten kopierst du den Code, es fehlt nur ein Leerschritt mit
> Unterstrich in der ersten Zeile:
>
> ThisWorkbook.VBProject.VBComponents(ActiveSheet.Codename) _
Nein das kann es nicht sein, es sieht nur so aus, als stände der Code in
zwei Zeilen bei mir, da die Zeile durch die Mail Formatierung umgebrochen
war. Das Zeichen "_" weist soweit ich weiß den Interpreter von VBA an, daß
der aktuelle Ausdruck in der nächsten Zeile noch weiter geht. Also dies
hier steht in EINER Zeile bei mir :
ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
.Properties("_CodeName").Value = "test"
Und verursacht den Fehler "Die Methode 'Value' für das Objekt 'Property'
ist fehlgeschlagen".
Gruß, Timo
"Timo Rumland" schrieb:
> Nein das kann es nicht sein, es sieht nur so aus, als stände der Code in
> zwei Zeilen bei mir, da die Zeile durch die Mail Formatierung umgebrochen
> war. Das Zeichen "_" weist soweit ich weiß den Interpreter von VBA an, daß
> der aktuelle Ausdruck in der nächsten Zeile noch weiter geht. Also dies
> hier steht in EINER Zeile bei mir :
>
> ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
> .Properties("_CodeName").Value = "test"
>
> Und verursacht den Fehler "Die Methode 'Value' für das Objekt 'Property'
> ist fehlgeschlagen".
diese Fehlermeldung erhalte ich nur, wenn in dem aktiven VBA-Projekt bereits
ein Blatt mit dem gleichen Codenamen existiert.
Dabei spielt die Groß/Kleinschreibung keine Rolle.
"Test" geht nicht, wenn es schon "test" gibt.
BTW: Welche Excel- Version verwendest du?
Am Fri, 25 Jul 2003 13:44:48 +0200 hat Melanie Breden
<Melanie...@mvps.org> geschrieben:
> diese Fehlermeldung erhalte ich nur, wenn in dem aktiven VBA-Projekt
> bereits
> ein Blatt mit dem gleichen Codenamen existiert.
> Dabei spielt die Groß/Kleinschreibung keine Rolle.
> "Test" geht nicht, wenn es schon "test" gibt.
>
> BTW: Welche Excel-Version verwendest du?
Nanu, auf einmal funktioniert es - ich habe eindeutig kein doppelten Namen
verwendet, und die Zeile soweit auch nicht geändert. Ich kann mir wirklich
nicht erklären, warum es vorher nicht ging..
<SCHNIPP>
Ha, jetzt weiß ich es, habe gerade nochmal den Namen überprüft. Der Name
für das Objekt wurde von mir fälschlicherweise so erstellt, daß er am Ende
ein Leerzeichen hatte, z.B. "test ", deshalb ging es nicht - jetzt
funktioniert alles wie erwartet.
Danke!
"Timo Rumland" <schrieb:
> Nanu, auf einmal funktioniert es - ich habe eindeutig kein doppelten Namen
> verwendet, und die Zeile soweit auch nicht geändert. Ich kann mir wirklich
> nicht erklären, warum es vorher nicht ging..
>
> <SCHNIPP>
>
> Ha, jetzt weiß ich es, habe gerade nochmal den Namen überprüft. Der Name
> für das Objekt wurde von mir fälschlicherweise so erstellt, daß er am Ende
> ein Leerzeichen hatte, z.B. "test ", deshalb ging es nicht - jetzt
> funktioniert alles wie erwartet.
manchmal sind es die Kleinigkeiten, die einem das Leben schwer machen :-(
Prima das es nun klappt und danke für die Rückmeldung.