Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Worksheets Objekt

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Worksheets Objekt (3289 mal gelesen)
Christian B.
Mitglied



Sehen Sie sich das Profil von Christian B. an!   Senden Sie eine Private Message an Christian B.  Schreiben Sie einen Gästebucheintrag für Christian B.

Beiträge: 86
Registriert: 09.03.2006

Windows 7
AutoCAD 2009
AutoCAD Architecture 2012

erstellt am: 05. Sep. 2010 12:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi, anbei hab ich folgenden Code ausprobiert zum Erzeugen eines neuen Blattes von einer Vorlage Index 3:

Worksheets(3).Copy After:=Worksheets(3)
Sheets(4).Select
Worksheets(4).Name = "test"
Worksheets(4).Activate

Worksheets("Test").Cells(1, 7).Value = Testzeile

Klappt soweit, da das ganze jetzt aber in eine Schleife eingebaut werden soll, soll bei jedem Aufruf ein Sheet (n+1) ab 4 als Kopie von 3 erzeugt werden.
Dann wird in das gerade aktuelle Worksheet werde reingeschrieben.

Kann mir jemand helfen, wie ich den Index in eine Variable bekomme?

Allerdings würde ich nun gerne auch den (Name) = Tabelle X des Worksheets ändern.
Durch den Code wird nur in der Tabelle der Name geändert und das Attribut Name und nicht (Name). Kennt da jemand den Unterschied?

Vielen Dank, Christian B.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 05. Sep. 2010 14:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich


Taste_F4.png

 
Hallo Christian B.,

hier ein Ansatz:

Code:
Private Sub Registerkopie()

Dim i As Integer 'für die Schleife
Dim i_maxWS As Integer 'max. Anzahl an Kopien der WorkSheets

i_maxWS = 5

'--- Bisheriger Code mit Anmerkungen ---
'Worksheets(3).Copy After:=Worksheets(3)
'Sheets(4).Select 'UNNÖTIG - siehe hier: http://www.online-excel.de/excel/singsel_vba.php?f=61
'Worksheets(4).Name = "test" 'Klappt nur 1x, da ab dem zweiten Durchlauf das Register "test"
' bereits vorhanden ist --> Fehlermeldung
'Worksheets(4).Activate 'Soll er das WIRKLICH jedes mal machen - oder erst am Ende der Schleife?
' kann gespart werden, da neu erzeugte Register ohnehin aktiviert werden.

    'Bildschirmflackern aus
    Application.ScreenUpdating = False

    'Schleife setzen - aus VBA z. B. mit F8 im Einzelschritt:
    For i = 1 To i_maxWS
        Worksheets(3).Copy After:=Worksheets(i_maxWS - 3 + i)
        Worksheets(3 + i).Name = "Test_" & i
    Next i
   
    'Bildschirmflackern an
    Application.ScreenUpdating = True

End Sub


Zu Deiner zweiten Frage: WARUM möchtest Du die Bezeichnung ändern? Möglich ist das schön - in der VBA-IDE. Auf diese Eigenschaft - siehe Screenshot - lässt sich (glaube ich) auch per Code zugreifen; wenn's denn sein muss. Der Benutzer kriegt davon allerdings rein gar nichts mit?!

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 06. Sep. 2010 10:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Christian B.:
Allerdings würde ich nun gerne auch den (Name) = Tabelle X des Worksheets ändern.
Durch den Code wird nur in der Tabelle der Name geändert und das Attribut Name und nicht (Name). Kennt da jemand den Unterschied?

Der Unterschied zwischen dem Ausdruck ohne Klammer und dem in Klammern besteht in folgendem: der Ausdruck in Klammern ist der Tabellenname bzw. die für den Benutzer sichtbare Aufschrift auf dem Tabellenreiters, der ohne Klammer dagegen ist der interne oder Codename des Tabellenblattes. Der Codename wird beim Erstellen des Tabellenblattes von Excel automatisch vergeben und erhält eine fortlaufende Nummerierung. Wird ein Tabellenblatt gelöscht, erhält das nächste erstellte die Nummer des gelöschten.
Unter normalen Bedingungen reicht der im VBA-Editor in Klammern stehende Ausdruck für die Ansprache eines Tabellenblattes aus, wenn man sich im Code ganz konkret auf ein bestimmtes Tabellenblatt beziehen will: Worksheets("Test1").Range("A1") = "Hallo". In solchen Fällen, wenn man sich auf ein Tabellenblatt beziehen muss, dessen Reiter vom Benutzer geändert werden kann, hilft diese Methode nicht weiter, denn der Debugger zeigt dann den Fehler "Index außerhalb des gültigen Bereichs", weil dieses Tabellenblatt ja nicht mehr existiert. Man kann sich natürlich auch auf die Reihenfolgen-Nummer eines Tabellenblattes beziehen: Worksheets(3).Range("A1") = "Hallo" - das ist dann das 3. von links gezählt. Das führt jedoch zu Problemen, wenn die Reihenfolge der Tabellenblätter durch den Benutzer geändert werden darf, denn in diesem Fall würde sich der Code dann auf ein falsches Blatt beziehen. Hier nun kommt die dritte Möglichkeit ins Spiel: der Codename des Tabellenblattes, also derjenige der von Excel automatisch vergeben wird. Man verwendet ihn z.B. auf diese Weise: Tabelle3.Range("A1") = "Hallo". Den Codenamen kann man natürlich auch ändern, man muss sich dabei jedoch auf das VBA-Projekt beziehen, was jedoch voraussetzt, dass das VBA-Projekt nicht mit Passwort geschützt ist.

Hier dein Code, wenn du sowohl Tabellenname als auch Codename des Tabellenblattes ändern willst:

Code:
    Dim intTabelle As Integer
    For intTabelle = 1 To 5
        Worksheets(3).Copy After:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Cells(1, 7) = Testzeile
        ' Ändern des Tabellenblatt-Namen bzw. der Aufschrift des Tabellenreiters
        Worksheets(Worksheets.Count).Name = "Test" & intTabelle
        ' Ändern des Codenamen des Tabellenblattes
        ThisWorkbook.VBProject.vbcomponents(Worksheets(Worksheets.Count).CodeName).Name = "Test" & intTabelle
    Next intTabelle

Anstelle von

Code:
        ThisWorkbook.VBProject.vbcomponents(Worksheets(Worksheets.Count).CodeName).Name = "Test" & intTabelle

kannst du natürlich auch dieses schreiben:

Code:
        ThisWorkbook.VBProject.vbcomponents(Worksheets("Test" & intTabelle).CodeName).Name = "Test" & intTabelle

denn das Tabellenblatt hat ja bereits einen Namen bekommen und kann zielgerichtet angesprochen werden.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian B.
Mitglied



Sehen Sie sich das Profil von Christian B. an!   Senden Sie eine Private Message an Christian B.  Schreiben Sie einen Gästebucheintrag für Christian B.

Beiträge: 86
Registriert: 09.03.2006

Windows 7
AutoCAD 2009
AutoCAD Architecture 2012

erstellt am: 06. Sep. 2010 22:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi, Danke für die Antowrt,

ich dachte nur das (Name) einen Einfluss auf den Index des Worksheets hat. war aber nicht so.
hab mich nur gefragt, warum das Worksheet eigentlich zwei namen hat: name / (name) ist ja eigentlich unötig und dazu noch einen Index; danke an Beverly, jetzt hab ich den Unterschied verstanden!

Grüße Christian B.

[Diese Nachricht wurde von Christian B. am 06. Sep. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz