3.5k Aufrufe
Gefragt in Tabellenkalkulation von newbievba Einsteiger_in (23 Punkte)
Hallo Zusammen,

ich bin über diesen älteren Artikel zum Forum gekommen:

https://supportnet.de/t/2332332

Dort kann ich aber nicht mehr antworten, da der Thread zu alt ist.

Eigentlich steht da schon die Lösung meines Problems, mit dem Unterschied, dass
ich keine XLSX- sondern XLS-Dateien zusammenfügen möchte.

Ich hab ein wenig mit dem Code rumgespielt, aber als VBA-Anfänger bin ich da nicht
wirklich weiter gekommen.

Kann mir jemand weiterhelfen? Vielen Dank.

Gruß, Kristian

8 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Kristian,

ich hätte nur diese zeile
StTyp = "xlsx"
geändert auf
StTyp = "xls"
und diese
If UCase(Right(FI.Name, 4)) = "XLSX" Then
in
If UCase(Right(FI.Name, 3)) = "XLS" Then

Gruß Hajo
0 Punkte
Beantwortet von newbievba Einsteiger_in (23 Punkte)
Hallo Hajo,

dass hatte ich natürlich als erstes probiert, dabei aber vergessen, aus
der 4 eine 3 zu machen... Jetzt klappt es

Dankeschön :-)

Kann man die erste Spalte mit dem Dateinamen entfernen?

Außerdem würde ich gerne die erste Zeile jeder eingelesenen Datei
weglassen, da dass die (immer gleichen) Überschriften sind.

Gruß, Kristian
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Kristian,

ich hätte vermutet.
Range(Range("B2"), Cells(Loletzte, InSpalte)).Copy ThisWorkbook.Worksheets(1).Cells(LoJ, 2)

Gruß Hajo
0 Punkte
Beantwortet von newbievba Einsteiger_in (23 Punkte)
Ganz großes Danke Hajo !!!

Eine Frage zur Machbarkeit in VBA hätte ich noch (dann weiß ich
wenigstens vorher, ob sich das weiterexperimentieren lohnt, oder
ob ich es gleich sein lassen kann):

Die oben genannten XLS-Dateien muss ich zunächst alle einzeln
aus einer Web-Anwendung runterladen (ca. 50 Dateien á 50 Zeilen),
was recht aufwändig ist.

Kann VBA sowas auch für mich machen ?

Ein Downloadlink sieht so aus (nicht erschrecken):

https://localhost/canned_reports/outbound_stock_transfer?
column_choice=case_quantity&columns%5B0%5D=project_code&
columns%5B1%5D=item_code&columns%5B2%5D=each_quantity
&columns%5B3%5D=case_quantity&columns%5B4%5D=transferr
ed_at&filter_choice=created_at&generate_flag=true&order_by=outb
ound_stock_transfer_id&order_direction=desc&
page=8&query%5B0%5D%5Btransferred_at%5D%5Bfrom_thr
eshold%5D=2014-Apr-
24+6%3A00+AM
&query%5B0%5D%5Btransferred_at%5D%5Bo
perator%5D=between&query%5B0%5D%5Btransferred_at%5D%5
Bto_threshold%5D=2014-Apr-
24+6%3A05+PM
&query%5B1%5D%5Btransfer_status%5D%5B
operator%5D=%3D%3D&query%5B1%5D%5Btransfer_status%5D
%5Bthreshold%5D=1&utf8=%E2%9C%93&format=csv&format=xls

Dieser Link lädt, im Browser aufgerufen, direkt eine XLS-Datei in
meinen Download-Ordner runter.

In dem Link gibt es nur drei Variablen, die ich oben fett markiert
habe. Das erste ist die Seitenanzahl (hier Seite 8; es können immer
nur die aktuell auf der Webseite angezeigten 50 Zeilen exportiert
werden.

Die beiden anderen sind jeweils Datums- und Uhrzeitangaben, also
VON BIS-Filter.

Ich würde mir das im Idealfall so wünschen:

- Ich tippere in meiner Excel-Datei nur die Datums- und
Uhrzeitangaben VON und BIS ein.
- VBA erzeugt mir daraus die individuellen Links nach obigem
Muster
- VBA ruft danach diese Links (max. 80) nacheinander auf und
speichert die (max. 80) runtergeladenen Dateien im selben Ordner
meiner Exceldatei
- Danach werden diese Dateien mit dem schon vorhandenen Code
zu einer einzigen Datei zusammengefügt.

Ist sowas realisierbar, oder kann ich das gleich vergessen ? Und
wenn ja, warum?

Gruß, Kristian
0 Punkte
Beantwortet von newbievba Einsteiger_in (23 Punkte)
Ich habe mir meinen Beitrag grad nochmal durchgelesen und fand es
irgendwie schlecht formuliert. Also nochmal:

Eigentlich will ich für die automatische Link-Erstellung nur das VON-
und BIS-Datum einsetzen können. Die variable Seitenzahl ( &page=
)könnte von 1 bis 80 einfach hochgezählt werden, sodass am Ende 80
Links von page=1 bis page=80 vorhanden sind (und wenn es statt 80
mal nur 75 oder 70 Seiten wären, sollte das Programm nicht mit einer
Fehlermeldung abbrechen, sondern einfach die entsprechende Anzahl
an Dateien akzeptieren und fortfahren).

Gruß, Kristian

PS: Kannst Du eigentlich ein gutes Buch/Videotraining/sonstwas
empfehlen, mit dem ich praxisnah der VBA-Sprache näherkomme? Ich
habe lieber "Learning by Doing" als stumpfe Theorie.
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
zu Teil 2
Ein Buch von Monika Weber / Can
Microsoft Excel 2010-Programmierung
ISBN 978-3-86645-460-6

Gruß Hajo
0 Punkte
Beantwortet von newbievba Einsteiger_in (23 Punkte)
Danke, das Buch ist bestellt !

Und zur Machbarkeit? Bzw. Teil 1 meiner Frage? Geht das irgendwie,
oder eher nicht?
0 Punkte
Beantwortet von newbievba Einsteiger_in (23 Punkte)
Die Frage der Machbarkeit konnte ich mir heute selber beantworten:
Es geht ! (Und wie!)..

Ich habe mittlerweile auch eine UserForm erstellt, in der ich nur das
Startdatum und Enddatum eintippen muss, außerdem die Anzahl
der runterzuladenden Report-Seiten. Nach Klick auf den Start-Button
der Userform dauert es keine 20 Sekunden, bis z.B. 50 Download-
Links abgearbeitet sind und die Dateien im Download-Ordner sind.
Durch den Code öffnet er meinen Standardbrowser Chrome, und da
geht das dann echt fix.

Hier mal der Teil des Codes:

Set wshshell = CreateObject("WScript.Shell")
For variablezahl = 1 To seiten

wshshell.Run linkteil1 & variablezahl & linkteil2 & startdatum &
linkteil3 & enddatum & linkteil4
Next


Das habe ich recht schnell alleine (mit etwas Hilfe von Google) nun
hinbekommen... So stelle ich mir das vor.. Konkretes Ziel, kleine
Fortschritte und "Learning by Doing".. :-)

Aber jetzt will ich noch mehr :-) - Bitte keine fertigen Codes posten,
sondern nur Tipps, in welcher Richtung ich suchen muss...

- Fein wäre, wenn ich die 50 frisch gedownloadeten Dateien nach
dem Download nicht erst manuell vom "Downloads" in den Ordner
mit meiner Excel-Datei schieben müsste, damit die andere Excel-
Datei aus den 50 Dateien dann eine macht. Wie kann mir VBA hier
helfen?

- Kann ich außerdem meine jetzt 2 Dateien (Link-Generierungs-
Datei und Zusammenfügungs-Datei) in einer zusammenfassen?
Vielleicht sogar im selben Userform? Vielleicht sogar in derselben
Sub des "Start-Button"? Also quasi: Datum eingeben - "Ausführen"
anklicken - Fertig !? Am besten noch das fertige Ergebnis direkt in
einer separaten Datei mit anderem Namen gespeichert, damit die
"Original-Datei" immer unversehrt bleibt?

- Die 50 Einzeldateien könnten nach dem Erstellen der
Komplettdatei auch direkt wieder automatisch gelöscht werden -
geht das ?

- Als letztes: Die fertige Datei hat 7 Spalten mit Daten. Wie heißt der
Befehl in VBA, der vergleichbar mit "Duplikate löschen" in Excel ist?
Dann würde ich das zum Abschluss einfügen, dann würde sich die
Eingabe der Report-Anzahl-Seiten erübrigen. Die würde ich dann
auf 50 oder so fest einstellen, und wenn es statt 50 mal nur 45
Downloads sind, wären die doppelten gleich wieder weg.

Gruß, Kristian

PS: Ich hoffe, ich schreibe nicht zuviel wirres Zeug!

PPS: Ich bin nun erst mal froh, dass meine ersten VBA-Basteleien
(für mich) von Erfolg gekrönt sind, und dass alleine "das Bisschen"
heute mir zukünftig schon ca. 30 Minuten Arbeitszeit pro Tag erspart.

Die Formatierung meines Codes bzw. Bezeichnung der Variablen
ist wahrscheinlich im Moment noch "Chaos Pur", aber ich hoffe, in
dem empfohlenen und bestellten Buch finde ich Anleitungen, wie es
richtig auszusehen hat.
...