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

recorderaufzeichnungscode schöner schreiben?

recorderaufzeichnungscode schöner schreiben?
28.06.2014 12:35:50
Spenski
hallo
ich habe einen code mit dem recorder folgenden code aufgenommen ... eigentlich nix weltbewegendes:
Sub Makro4()
Sheets("x").Select
Columns("A:P").Select
Selection.Copy
Workbooks.Open Filename:="C:\Users\Spenski\Documents\TESTDATEI.htm"
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Sheets("y").Select
End Sub
und will damit folgendes erreichen :
daten aus dem tabellenblatt x sollen kopiert werden und in einer vorhandenen .htm datei die alten daten überschreiben.
gearbeitet wird im tabellenblatt y. daher spring ich mit dem recorder erst auf tabellenblatt x.
meine frage ist wie man diesen code schöner schreiben kann. funktionieren tut er.
gruss und danke

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Viell mit '5th Avenue' oder WordArt...? ;-] orT
28.06.2014 13:26:10
Luc:-?
Gruß, Luc :-?

Viell mit '5th Avenue' oder WordArt...? ;-] orT
28.06.2014 13:26:19
Luc:-?
Gruß, Luc :-?

witzig :P
28.06.2014 13:38:00
Spenski
meinte eigentlich besser schreiben ohne den select kram..
gut "schöner" war wohl der falsche begriff

AW: recorderaufzeichnungscode schöner schreiben?
28.06.2014 13:40:13
Daniel
Hi
Eine Zellreferenzierung besteht immer aus den drei Objekten Workbook.Worksheet.Range
In der Recorder-Aufzeichnung werden diese drei objekte nacheinander selektiert und dann der Befehl auf das selektierte Objekt angewendet.
Der Recorder muss das so aufzeichnen, weil wir Mausschubser so arbeiten.
Im Makro jedoch kann man den Befehl auf die gesamte Objektkette direkt anwenden:
Sub Makro4()
Sheets("x").Columns("A:P").Copy
Workbooks.Open Filename:="C:\Users\Spenski\Documents\TESTDATEI.htm"
Range("A1").PasteSpecial xlpasteall
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Sheets("y").Select
End Sub
Lässt man in der Objektkette einzelne Objekte weg (Workbook oder Workbook.Worksheet), so setzt VBA das jeweils aktive Element an dieser Stelle ein, deswegen richt beim Einfügen die Zellangabe aus, weil direkt nach dem Öffnen die geöffnete Datei das aktive Workbook .
Beim Einfügen von Excelzellen in andere Excelblätter sollte man nicht das allgemeinenEinfügen aus der Zwischenablage verwenden, sondern das Excelspezifische Inhalte-Einfügen aus dem Kontextmenü.
Dieses hat für VBA den Vorteil, dass man die Zielzelle direkt angeln kann und nicht selektieren muss.
Gruß Daniel

Anzeige
danke
28.06.2014 13:48:26
Spenski
danke für die super erklärung
gruss und schönes wochenenede

AW: recorderaufzeichnungscode schöner schreiben?
29.06.2014 02:06:27
Spenski
ich nochmal , bisschen anderes thema aber im prinzip nix anderes:
also der code funktioniert ist aber mehr als umständlich geschrieben aber für mehr bin ich nicht fähig.
im ersten teil wird die datei kopiert , die zieldatei geöffnet , alle bilder der zieldatei gelöscht und die zellen eingefügt.
im zweiten teil werden nochmal die neuen bilder hinterhergeschoben
wie müsste ich das schreiben das alles in einem schritt gemacht wird?
und wie umgehe ich den fehler wenn kein bild vorhanden ist
ActiveSheet.DrawingObjects.Select
Selection.Delete
Sub Seite1()
Sheets("A").Cells.Copy
Workbooks.Open Filename:="C:\Users\Spenski\Documents\TESTDATEI.htm"
ActiveSheet.DrawingObjects.Select
Selection.Delete
Range("A1").PasteSpecial xlPasteAll
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Sheets("A").Select
ActiveSheet.Shapes.Range(Array("Picture 3")).Select
Selection.Copy
Workbooks.Open Filename:="C:\Users\Spenski\Documents\TESTDATEI.htm"
Range("C6").Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
If t = True Then Timer2
End Sub
danke

Anzeige
AW: recorderaufzeichnungscode schöner schreiben?
29.06.2014 02:44:53
Daniel
Auch hier gilt:
nicht selektiern, sondern Befehl direkt anfügen.
Wenn du fehler vermeiden willst, einfach vorher fragen, ob überhaupt was zum löschen da ist:
If ActiveSheet.DrawingObjects.Count > 0 Then ActiveSheet.DrawingObjects.Delete
Gruß Daniel

AW: recorderaufzeichnungscode schöner schreiben?
29.06.2014 07:50:47
Spenski
hallo Daniel
ich hab es versucht so wie du es mir erklärt hast mit dem selectieren aber in diesem fall mache ich dann wohl noch einen fehler. (Laufzeitfehler 438)
Sub Seite1()
Sheets("A").Shapes.Range(Array("Picture 3")).Copy 'hier wird der fehler ausgeben
Workbooks.Open Filename:="C:\Users\Spenski\Documents\TESTDATEI.htm"
Range("C6").Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
gruss

Anzeige
AW: recorderaufzeichnungscode schöner schreiben?
29.06.2014 12:49:44
Daniel
Hi
Bei Grafiken sind die Objektkette bei direkter Befehlsausführung und der aufgezeichneten Select-Methode manchmal unterschiedlich.
Probiere mal
Sheets("A").Shapes.("Picture 3").Copy 
Wenn das nicht funktioniert, weiß ich aber auch nicht weiter.
Gruß Daniel

'If t = True Then' heißt im Prinzip ...
29.06.2014 02:56:23
Luc:-?
If True = True Then bzw If False = True Then, Spenski,
je nachdem, was t gerade für einen Wert hat. Du machst also eine überflüssige Prüfung, denn dabei kann ja nur der schon vorhandene Wert von t herauskommen! ;->
Merke: Boole'sche Variablen können bei Vgln direkt eingesetzt wdn, ohne sie nochmals auf ihren Wert zu prüfen (weshalb ich sie u.a. VglsVariablen auch ausnahmsweise mit dem Namenspräfix is zu kennzeichnen pflege)! Nicht-Boole'sche skalare Variablen können übrigens mit CBool(varName) → Achtung, nur 0 ergibt False! ← in eine solche umgewandelt wdn.
Gruß, Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige