Autor
|
Thema: Tablle ans Ende kopieren (861 mal gelesen)
|
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 04. Jun. 2008 11:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, brauche mal euren Rat bei folgendem Problem. In Mappe 1 steht der Code. Suche Mappe 2 und öffne diese. Suche in Mappe 1 eine bestimmte Tabelle und lösche diese wenn vorhanden. Kopiere aus Mappe 2 die Erste Tabelle ans Ende von Mappe 1. Gib der Tabelle einen bestimmten Namen. Soweit funktioniert das alles schon prima. Nur das mit dem ans [i][Ende/i] will nicht funktionieren.
Code: Workbooks(2).Worksheets(1).Copy _ After:=Workbooks(1).Worksheets(Worksheets.Count)
Code: Dim i As Integer; i = Sheets.Count Workbooks(2).Worksheets(1).Copy _ After:=Workbooks(1).Sheets(i)
Diese 2 Varianten habe ich getestet und jedesmal wird die Tabelle an 3.te Stelle kopiert.Ach ja. es sind in Mappe 1 insgesammt schon 13 Tabelle. Ich hoffe mal mir kann geholfen werden. Gruß Andreas
------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 04. Jun. 2008 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Moin, moin, was hälst Du von einer Variablen? Code: Dim i As Longi = Workbooks(1).Worksheets.Count Workbooks(2).Worksheets(1).Copy After:=Workbooks(1).Sheets(i)
mit so etwas kann man schön feststellen, was denn wohl in die Klammer gehört, in diesem Falle sollte es also auch ein Workbooks(2).Worksheets(1).Copy After:=Workbooks(1).Sheets(Workbooks(1).Worksheets.Count) tun. Bei mehreren geöffneten Mappen empfiehlt es sich, diese immer so genau wie möglich anzusprechen also schwammige Formulierungen, wie Sheets(1) ohne Workbookangabe zu vermeiden, ein Grund, warum ich ActiveWorkbook ungern einsetze ;-) ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Excel -Suche RuA-Suche FAQ-ACAD Hilfe zu CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 04. Jun. 2008 12:01 <-- editieren / zitieren --> Unities abgeben:
|
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 04. Jun. 2008 13:05 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von runkelruebe: Moin, moin, was hälst Du von einer Variablen?
Code: Dim i As Longi = Workbooks(1).Worksheets.Count Workbooks(2).Worksheets(1).Copy After:=Workbooks(1).Sheets(i)
Das kann so doch gar nich funktionieren. es müsste eher so sein
Code: Dim i As Longi = Worksheets.Count Workbooks(2).Worksheets(1).Copy After:=Workbooks(1).Sheets(i)
Soweit funktioniert das jetzt sehr gut bis auf ein nun neues problem, was vorher aber funktionierte. Wenn die Tabelle bereits vorhanden ist sollte diese gelöscht werden und das tut er nun nicht und somit kann keine neue Tabelle erstellt werden, da der Name ja schon vergeben ist.Hier mal der gesammte Code: Code: Private Sub TabKopieren() Dim ThisMap Dim NewTabName As String Dim nme As Name Dim i As Long ThisMap = ThisWorkbook.Name NewTabName = "Artickel" i = Worksheets.Count 'Bildschirmaktaulisierung aus Application.ScreenUpdating = False 'Excel Fehlermeldungen aus. Application.DisplayAlerts = False 'Für jeden Tabellennamen For Each nme In ThisWorkbook.Names With WorksheetFunction 'Wenn Tabellenname bereits vorhanden If InStr(nme.Name, NewTabName) Then 'Tabelle löschen Workbooks(ThisMap).Sheets(NewTabName).Delete End If End With Next nme 'Tabelle aus externer Mappe ans Ende kopierem Workbooks(2).Worksheets(1).Copy _ After:=Workbooks(ThisMap).Sheets(i) 'Tabelle umbenennen ActiveSheet.Name = NewTabName '1te Tabelle aktivieren Workbooks(ThisMap).Sheets(1).Activate 'Excel Fehlermeldungen an. Application.DisplayAlerts = True End Sub
Sieht jemand den meinen Fehler? Ich find Ihn nicht.Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 04. Jun. 2008 13:45 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Also, zu "Das kann doch so gar nicht funktionieren": kann es nicht? und warum nicht? es funktioniert nämlich bei mir. Ich schreibe im Normalfall nichts, was ich nicht probiert habe.Jetzt zum Rest: Ich weise nochmal auf die Wichtigkeit genauer Ansprachen hin. Außerdem möchten manche Funktionen (wie z.B. das Paste) immer im aktiven Workbook/sheet ausgeführt werden, aber das nur am Rande. Im Einzelnen: das ThisWorkbook.Name gibt Dir den Namen der Mappe zurück, in der der VBA-code steht. -> i = Worksheets.Count ist gleich der Anzahl der Sheets in dieser Mappe. For Each nme In ThisWorkbook.Names -> die Zeile springt nicht an weil nme nirgendwo zugewiesen wird. Nimm da mal ne andere Schleife (imho einfacher, und vor Allem: deklarierte Vars) Wenn Du mit Deiner Aktion ein Sheet löschst, stimmt der Worksheets.count natürlich nicht mehr, also liest den neu aus (Du willst nämlich außerdem auch den von ThisMap undnicht mehr den von der anderen Tabelle. Alles in allem: teste mal bitte: Code: Private Sub TabKopieren() Dim ThisMap As String Dim NewTabName As String Dim nme As Variant Dim i As Long, a% ThisMap = ThisWorkbook.Name NewTabName = "Tabelle10" i = Worksheets.Count 'Bildschirmaktaulisierung aus Application.ScreenUpdating = False 'Excel Fehlermeldungen aus. Application.DisplayAlerts = False 'Für jeden Tabellennamen For a = 1 To i With WorksheetFunction 'Wenn Tabellenname bereits vorhanden Debug.Print Sheets(a).Name If InStr(Sheets(a).Name, NewTabName) Then 'Tabelle löschen Workbooks(ThisMap).Sheets(NewTabName).Delete End If End With Next a 'nme i = Workbooks(ThisMap).Worksheets.Count 'Tabelle aus externer Mappe ans Ende kopierem Workbooks(2).Worksheets(1).Copy _ After:=Workbooks(ThisMap).Sheets(i)'Tabelle umbenennen ActiveSheet.Name = NewTabName '1te Tabelle aktivieren Workbooks(ThisMap).Sheets(1).Activate 'Excel Fehlermeldungen an. Application.DisplayAlerts = True End Sub
PS: Ich habe jetzt grob Deinen code beibehalten, komplett umstricken fehlen mir Zeit und Motivation ;-) ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Excel -Suche RuA-Suche FAQ-ACAD Hilfe zu CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 04. Jun. 2008 14:09 <-- editieren / zitieren --> Unities abgeben:
Zum "Das geht dorch gar nicht" nochmal: Code: dein Code i = Workbooks(1).Worksheets.Count Workbooks(2).Worksheets(1).Copy After:=Workbooks(1).Sheets(i)
Da ist bei 2x Workbooks(1) vorhanden. Das Workbooks(1) bei i= ist doch falsch, zumindes bei mir wird gemeckert. Den Rest werd ich gleich mal testen. Danke und Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 04. Jun. 2008 14:26 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Das sind zwei Zeilen = zwei versch. Paar Schuhe. die erste Zeile bestimmt die Variable i mit =Workbooks(1).Worksheets.Count die zweite Zeile kopiert ein sheets aus Workbook(2) in Workbook(1) und zwar dort ans Ende, so, wie ich verstanden habe, dass Du es möchtest. Meckern tut er immer dann, wenn er diese Mappe nicht findet, bei mir vorhin: ich hatte 3 Mappen auf, habe den code anlaufen lassen (nicht durch) habe eine Mappe geschlossen und im weiteren Verlauf, konnte er diese Mappe dann nicht mehr finden -> Mecker von Excel.
------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Excel -Suche RuA-Suche FAQ-ACAD Hilfe zu CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |