Schnellste Art Daten via vba in Excel abzufüllen

Bild

Betrifft: Schnellste Art Daten via vba in Excel abzufüllen
von: Yves
Geschrieben am: 03.11.2003 16:38:56

Hallo

Sorry, meine Post ist ein bisschen lange geraten. Vorgeschichte kann sonst auch übersprungen werden...

Vorgeschichte
------------------------------------
Ich benutze Excel als Reporting Tool. Auf Excel greife ich via Visual Basic 6 mit Hilfe des Microsoft Excel 10 Object Library Objektes zu (Es können die Excel spezifischen vba Befehle benutzt werden). Ich lese also Daten aus einer Datenbank und fülle sie in vorbereitete ExcelSheets ab. Teilweise werden auf diese Arte mehrere 100 Zeilen mit mehreren Spalten geschreiben. Leider dauert dies sehr lange!

Nach einigem Grübeln habe ich rausgefunden, dass die folgenden Zeilen zu Beginn der Prozedur den Vorgang deutlich beschleunigen (Am Ende des Makros natürlich alles rückgangig machen...)

application.Visible = False
application.ScreenUpdating = False
application.Calculation = xlCalculationManual

Danach läuft das ganze schneller aber es dauert nir noch immer viel zu lange.
------------------------------------

Mein neuer Approach:
Ich hab dann rausgefunden, dass wenn ich einen String, worin die Spalten durch Tabulator und die Zeilen durch chr(13) & chr(10) getrennt sind, einfüge, das ganze viel schneller läuft. Ich habe in der Prozedur den String in die zwischenablage eingefügt und diesen dann via paste in die Tabelle geschrieben. Dieser wird dann ab der aktiven Zelle eingefügt. Falls ich den String mit cells(y,x).value einfüge, landet der ganze text, inkl Steuerzeichen in der Zelle y,x.

Als ich diese Methode an meinem vorbereiteten Sheet testete, erschienen die Texte teilweise in den falschen Zellen.
Ich habe dann festgestellt, dass es daran liegt, dass ich teilweise Zellen verbunden habe (Zellen markieren -> Zellen formatieren/Ausrichtung -> Zellen verbinden).

Ich habe dann einmal eine Zeile mit verbunden Zellen in einen Texteditor kopiert. Angenommen die Zellen A,B und C sind verbunden und den Wert "Test" ist gesetzt, erscheint im Editor "Test" gefolgt von 2 Tabulatoren. Falls ich dies vom Editor zurück in die verbunden Zellen kopiere, wird die Verbindung aufgelöst und der Text steht in Zelle A.

Nun also meine Fragen:
1. Ist es möglich aus einem Texeditor via Zwischenablage Text in verbundene Zellen zu kopieren, ohne die Verbindung aufzuheben. Falls ja, wie?
2. Hat jemand noch weitere tricks wie
application.Visible = False
application.ScreenUpdating = False
application.Calculation = xlCalculationManual
auf lager?
3. Falls jemand änliche Erfahrungen gemacht hat und eine gute Lösung gefunden hat, wäre ich natürlich für Infos dankbar.

Danke und Gruss
Yves

Bild


Betrifft: AW: Copyfromrecordset
von: Nike
Geschrieben am: 03.11.2003 17:01:06

Hi,

wenn du Access als DB Backend hast, dann such mal nach copyfromrecordset

Bye

Nike


Bild


Betrifft: AW: Copyfromrecordset
von: Yves
Geschrieben am: 04.11.2003 10:23:23

Danke für den Tip.
Leider kann ich den Recordset nicht 1:1 in die Tabelle schreiben, da ich eine Struktur aus der DB lese, welche ich zuerst in VB untersuchen muss um dann nur bestimmte Teile in die Tabelle zu schreiben.

Worauf ich gerne eine Antwort hätte:
Ist es möglich aus einem Texeditor Text via Zwischenablage in verbundene Zellen zu kopieren (1 Zeile, mehrere Spalten), ohne die Verbindung aufzuheben. Falls ja, wie?

Meine Erfahrungen:
Wenn ich auf einer Zeile die Zellen A,B,C verbinde, und ich anschliessend Text via Zwischenablage aus z.B. aus einem Editor einfügen, wird die Verbidung aufgehoben. Der Text befindet sich dann in Zelle A.


Bild


Betrifft: AW: Copyfromrecordset
von: Nike
Geschrieben am: 04.11.2003 10:51:21

Hi,

...da ich eine Struktur aus der DB lese...
Dann würde ich dir empfehlen eine Abfrage in deiner DB anzulegen
und diese dann von Excel aus auszuwerten.
Wird 1000Mal schneller sein, als die Auswerterei in Excel/VB ;-)

Das mit der Zweischenablage kann ich so nicht nachvollziehen
(bei mir bleibt die Zelle verbunden), vielleicht könntest du
ja mal den Code den du dafür verwendest posten...

Bye

Nike


Bild


Betrifft: AW: Copyfromrecordset
von: Yves
Geschrieben am: 04.11.2003 11:16:31

Danke für deine Hilfe, aber ich verstehe nicht ganz was 1000mal schneller sein soll.
Ich setzte in VB ein Statement ab, gehe durch die Struktur durch und fülle die entsprechnden Daten in einen Type Array. Diese schreibe ich dann in Excel.
Fast die ganze Zeit geht fürs Schreiben ins Excel drauf (cells(y,x).value=). Test haben gezeigt, dass es keine Rolle spielt, ob die Arbeit in einem Makro in Excel oder einer Prozedur in VB ausgeführt wird.

nun aber zurück zur Zwischenablage.
Zellen A,B,C jeweils auf den ersten 3 Zeilen verbinden (nur spalten verbinden, nicht zeilen)

wie kann ich nun aus einem texteditor
test1
test2
test3
einfügen.

wenn ich zelle1 anklicke und einfügen wählen verweigert excel das einfügen. wenn ich manuell etwas in A1 einfüge und in den Texteditor kopiere, erscheint dort der text gefolgt von 2 tabs (aufgrund der verbunden zellen). wenn ich diesen text wiederum in excel einfüge, landet der text in zelle A1 und die verbindung wird aufgelöst. wenn ich für dieses problem eine lösung finde, kann ich die daten x mal schneller als mit der cells(y,x).value methode in excel schreiben.


Bild


Betrifft: AW: Copyfromrecordset
von: Nike
Geschrieben am: 04.11.2003 14:47:50

Hi,

>aber ich verstehe nicht ganz was 1000mal schneller sein soll.
>Fast die ganze Zeit geht fürs Schreiben ins Excel drauf (cells(y,x).value=).

Tja und genau das wird durch ein copyfromrecordset xFach beschleunigt...

Ansonsten mal den Listentrenner über Start/Einstellungen/Systemsteuerung/Ländereinstellungen/Zahlen
verändern

Bye

Nike


Bild

Beiträge aus den Excel-Beispielen zum Thema " VBA Zelladressen und Variablen"