| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Excel VBA Zellen eines Datenblatts ans Ende eines anderen Datenblatts kopieren (4665 mal gelesen)
|
daniu Mitglied Mechanik-Entwickler
  
 Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 09. Aug. 2012 09:59 <-- editieren / zitieren --> Unities abgeben:         
Hallo, folgendes Problem: ich möchte alle Zeilen eines Datenblatts ans Ende eines anderen kopieren. Dazu hatte ich folgenden VBA Code verwendet: ActiveWorkbook.Worksheets(I + 1).UsedRange.Copy Destination:=ActiveWorkbook.Worksheets(I).Range("A1").End(xlDown).Offset(1, 0) I ist eine Zählervariable, die entsprechend durchzählt. Es wird abgeprüft, ob es Worksheet(I) und Worksheet(I+1) gibt Wenn ich das langsam mit dem Debugger durchmache, läuft es durch, wenn ich es ohne Unterbrechung mache, bekomme ich meistens bei unterschiedlichen Stellen eine Fehlermeldung: "" und Excel stürzt komplett ab. Eine MsgBox oder irgendeine andere Unterbrechung, verhindert den Absturz. Es scheint so, als würde sich Excel verschlucken ... Keine Ahnung, ob das wichtig ist, aber: ich gehe alle Blätter durch und suche nach Tabellenblätter in der Form: irgendwas_1 / irgendwas_2 - sobald ich das gefunden habe, versuche ich, die Daten rüberzukopieren. habe jetzt schon einiges rumprobiert und gelesen, was man statt usedrange verwenden kann, auch mit Select anzeigen lassen, was er da selectiert - sieht alles passend aus, aber das Makro stürzt immer an unterschiedlicher Stelle ab Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daniu Mitglied Mechanik-Entwickler
  
 Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 09. Aug. 2012 10:09 <-- editieren / zitieren --> Unities abgeben:         
Hier noch die Fehlermeldung: [edit: sorry - falsch - das war die Fehlermeldung bei Verwendung von Paste statt Destination] Laufzeitfehler '-2147417848 (80010108)': Automatisierungsfehler Das aufgerufene Objekt wurde von den Clients getrennt [edit2] manchmal stürzt Excel auch einfach so ab - ohne genauer darauf einzugehen, warum. Unter Details steht dann z. B.: Problemsignatur: Problemereignisname: APPCRASH Anwendungsname: EXCEL.EXE Anwendungsversion: 14.0.6117.5003 Anwendungszeitstempel: 4f622ef8 Fehlermodulname: VBE7.DLL Fehlermodulversion: 7.0.16.27 Fehlermodulzeitstempel: 4f86f5aa Ausnahmecode: c0000005 Ausnahmeoffset: 00003742 Betriebsystemversion: 6.1.7601.2.1.0.256.4 Gebietsschema-ID: 1031 Zusatzinformation 1: 30ba Zusatzinformation 2: 30baa02468220cbe32edfea7e57957fc Zusatzinformation 3: 9659 Zusatzinformation 4: 9659639a8d9db650f7fcf1bc2e6f7560 Lesen Sie unsere Datenschutzbestimmungen online: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0407 Wenn die Onlinedatenschutzbestimmungen nicht verfügbar sind, lesen Sie unsere Datenschutzbestimmungen offline: C:\Windows\system32\de-DE\erofflps.txt und manchmal - läuft es dann doch einfach durch ... ich habe Option Explicit oben im Modul und entsprechend alle Variablen vorher definiert. [Diese Nachricht wurde von daniu am 09. Aug. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx

 Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 09. Aug. 2012 11:15 <-- editieren / zitieren --> Unities abgeben:          Nur für daniu
|
daniu Mitglied Mechanik-Entwickler
  
 Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 09. Aug. 2012 11:39 <-- editieren / zitieren --> Unities abgeben:         
Hi, Danke für das feedback. Kann ich mir kaum vorstellen. Beide Tabellenblätter werden kurz vorher erzeugt, indem eine (Text)Datei geöffnet wird und dann in die Arbeitsmappe kopiert wird. Gleiches Dateiformat, gleicher Prozess Grüße Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
   
 Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 09. Aug. 2012 11:56 <-- editieren / zitieren --> Unities abgeben:          Nur für daniu
|
daniu Mitglied Mechanik-Entwickler
  
 Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 09. Aug. 2012 12:18 <-- editieren / zitieren --> Unities abgeben:         
|
Paulchen Mitglied Bauing./SW-Entwickler
   
 Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 09. Aug. 2012 13:43 <-- editieren / zitieren --> Unities abgeben:          Nur für daniu
|
daniu Mitglied Mechanik-Entwickler
  
 Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 09. Aug. 2012 14:44 <-- editieren / zitieren --> Unities abgeben:         
Hi, Seltsam. Hab jetzt diese nichtsändernde Änderung gemacht: Code: I = 2 While (I < WS_Count) If (Worksheets(I).Visible = xlSheetVisible And (Worksheets(I + 1).Visible = xlSheetVisible)) Then ' nur sichtbare verarbeiten text1 = Worksheets(I).Name text2 = Worksheets(I + 1).Name ltext1 = Left(text1, Len(text1) - 1) ltext2 = Left(text2, Len(text2) - 1) If (Right(text1, 1) = "1" And Right(text2, 1) = "2" And (ltext1 = ltext2) And Not IsNumeric(ltext1)) Then ' rechter Teil: 1 und 2, linker Teil gleich und nicht nummerisch Worksheets(I + 1).UsedRange.Copy _ Destination:=Worksheets(I).Range("A1").End(xlDown).Offset(1, 0) ' hier tritt der Fehler auf! Worksheets(I).Name = Left(text1, Len(text1) - 2) 'Application.Wait Now + TimeSerial(0, 0, 0.1) Application.DisplayAlerts = False ' sonst kommt eine nachfrage Worksheets(I + 1).Delete Application.DisplayAlerts = True WS_Count = Worksheets.Count End If End If I = I + 1 Wend
und bekomme es jetzt nicht mehr zum Absturz ... das Application.Wait hatte ich zum spielen drin. War aber letztendlich doch nicht nötig. Was mich aber noch bisschen stört, ist dass er beim Sortieren aus irgendeinem Grund das Blatt wechselt. Muss das so? Müsste ich ggf. manuell wieder zurückwechseln, oder lässt sich das irgendwie verhindern? Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
   
 Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 09. Aug. 2012 15:25 <-- editieren / zitieren --> Unities abgeben:          Nur für daniu
|
daniu Mitglied Mechanik-Entwickler
  
 Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 16. Aug. 2012 14:40 <-- editieren / zitieren --> Unities abgeben:         
Hi, nur kurze Rückmeldung: Der Fehler kam wieder und zwar jedes Mal. Nur im Debug-Mode mit Schritt für Schritt konnte ich es ausführen. Zu Hause hab ich es auf meinem privaten Rechner versucht und das Script nie zum Absturz gebracht. Komisch ... Hab ein Wait mit 0,1 eingefügt, jetzt klappt es. Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |