Anzeige
Archiv - Navigation
1888to1892
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

Macro oder VBA für webimport

Macro oder VBA für webimport
27.06.2022 11:05:04
Johannes
Hallo nochmal,
mein Makro hat auf den ersten Blick funktioniert, aber jetzt stellte ich fest, dass immer dieselben daten eingefügt werden und nicht die aus dem Zwischenspeicher
So mache ich es bis jetzt manuell.
1.)ich kopiere einen HTML File im Chrome Browser mit ctrA und ctrC.
2.) in neuem Arbeitsblatt füge ich in A1 mit ctrV ein.
3.) klicke ich in der kleine Box einfüge Optionen die erscheint auf "aktualisierbare Webabfrage"
4.) im nun erscheinenden Fenster"neue Webabfrage" klicke ich auf importieren.
5.) jetzt erscheint der Seiteninhalt wunderbar formatiert in spalte A:N.
Alles gut.
Jetzt möchte ich das Gleiche mit einem Makro machen, was auch funktioniert,
aber leider immer mit den gleichen daten die beim Makro aufnehmen verwendet wurden.
Kann ich das Makro ändern, dass immer die daten aus der Zwischenablage verwendet werden
oder gibts eine andere Lösung?
Anbei der code den ich gerade verwende, der zweite teil mit dem Einfügen der Maske funktioniert prima
Lg
Johannes

Sub Imp_and_Mask()
' Imp_and_Mask Makro
' Tastenkombination: Strg+q
Range("A1").Select
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;file:///file:///G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI/statement.htm", _
Destination:=Range("$A$1"))
.Name = "statement"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
' betimmen des Blattes von dem kopiert wird
Dim mask As Worksheet
Set mask = Sheets("Maske")
' abspeichern des aktiven ArbeitsBlattes
Dim ws1 As Worksheet
Set ws1 = ActiveSheet
Columns("O:O").Select
Sheets("Maske").Select
ActiveWindow.Zoom = 85
ActiveWindow.Zoom = 55
ActiveWindow.Zoom = 40
ActiveWindow.Zoom = 25
Columns("O:DL").Select
Selection.Copy
ws1.Select
Columns("O:O").Select
ActiveSheet.Paste
End Sub

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro oder VBA für webimport
27.06.2022 12:27:14
Oberschlumpf
Hi Johannes,
zuerst mal:
Macro oder VBA?
ein Macro besteht nur aus VBA, oder anders: ein Makro ist VBA.
Das nur erst mal, um Begrifflichkeiten zu klären.
So...
Dieser Teil des Connection-Befehls...

"URL;file:///file:///G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI/statement.htm"
...importiert eine auf deinem Computer lokal gespeicherte Datei in Excel.
Der Speicherort der Datei ist "G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI/" und der Dateiname lautet "statement.htm".
Da ist es kein Wunder, dass in Excel immer wieder der gleiche Inhalt angezeigt wird.
Das ist das Gleiche, als ob du eine auf deinem Computer gespeicherte PDF-Datei öffnest. Was erwartest du zu sehen, wenn du diese PDF-Datei ein 2. Mal öffnest? Du erwartest, das Gleiche zu sehen, wie nach dem 1. Öffnen der PDF-Datei - weil - es ist ja die selbe PDF-Datei.
Und so ist das mit dem Connection-Befehl, wie du ihn anwendest, nix anderes.
Du musst den oben gezeigten Teil ungefähr so ändern:

"URL;http://deineseite.htm"
Natürlich genau so, wie du deine Seite auch im Internet aufrufen würdest.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Macro oder VBA für webimport
27.06.2022 12:41:49
Johannes
Hallo Thorsten,
War wohl doof ausgedrückt, das mit den Makros und VBA ist mir klar.
Die Seiten liegen auf meinem FTP Server, also auf meiner Festplatte. Beim Aufnehmen des Makros hatte ich eigentlich mit "ctrl V" angefangen und wollte so den Inhalt der Zwischenablage verwenden.
Hat nicht so geklappt, wie es scheint.
Vielleicht könnte man ein Fenster öffnen und den File-Pfad eingeben oder den File auswählen. Das übersteigt aber mein jetziges Wissen leicht.
Könntet ihr mich irgendwie in die Richtung bringen, wie das geht?
LG
Johannes
AW: Macro oder VBA für webimport
27.06.2022 12:56:35
Oberschlumpf
Hi Johannes,
und wo, denkst du, wäre mit Dateiauswahl zu deinem jetzigen der Unterschied?
Ob du nun den Pfad mit Datei "G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI/statement.htm" fest im Code "verankerst", oder ob du über Dateiauswahl-Fenster zum Verzeichnis "G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI" wechselst, um dann die Datei "statement.htm" zu öffnen, wäre doch das Gleiche.
Wenn du aber eine Datei aus immer wieder unterschiedlichen Verzeichnissen öffnen willst, dann mach dich mal schlau über diesen Befehl:
Application.GetOpenFilename
hier eine Hilfsseite
https://docs.microsoft.com/de-de/office/vba/api/excel.application.getopenfilename
Ciao
Thorsten
Anzeige
AW: Macro oder VBA für webimport
27.06.2022 13:06:52
Johannes
Merci, werde mich da gleich mal reinlesen.
Es handelt sich dabei immer um verschiedene HTML Dateien, die in verschiedenen Ordnern liegen.
Danke
LG
Johannes
AW: Macro oder VBA für webimport
27.06.2022 14:08:54
Johannes
So, auch auf die Gefahr das ich lästig bin
hab den Artikel aufmerksam 20-mal gelesen und dann in meinen code direkt nach "Range("A1").Select" eingefügt.
Jetzt macht er genau das, was er soll nämlich ein Fenster auf mit dem File Namen., mangels wissen was HTML für File Typ ist hab ich alle Files genommen.
wie kann ich den jetzt abspeichern ( Dim = FileSring as String ) und oder direkt in die
"ActiveSheet.QueryTables.Add(Connection:= " einfügen.
Zu meiner Entschuldigung google, hat es auch nicht gewusst. Oder ich hab falsch gefragt.
LG
Johannes
Anzeige
AW: hier mein code, hatte ich vergessen
27.06.2022 14:15:05
Johannes
sorry vergessen

Sub Import_und_Maske_1()
' Report Makro
' Tastenkombination: Strg+w
Dim FileSring As String
Range("A1").Select
fileToOpen = Application _
.GetOpenFilename() '"Text Files (*.txt), *.html")
If fileToOpen  False Then
MsgBox "Open fileString"
' Set  fileString
' MsgBox "Open " & fileToOpen
End If
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;file:///G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_Def/statement.htm", _
Destination:=Range("$A$1"))
.Name = "statement"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
' betimmen des Blattes von dem kopiert wird
Dim mask As Worksheet
Set mask = Sheets("Maske")
' abspeichern des aktiven ArbeitsBlattes
Dim ws1 As Worksheet
Set ws1 = ActiveSheet
Columns("O:O").Select
Sheets("Maske").Select
ActiveWindow.Zoom = 85
ActiveWindow.Zoom = 55
ActiveWindow.Zoom = 40
ActiveWindow.Zoom = 25
Columns("O:DL").Select
Selection.Copy
ws1.Select
Columns("O:O").Select
ActiveSheet.Paste
End Sub

Anzeige
AW: hier mein code, hatte ich vergessen
27.06.2022 16:20:05
Oberschlumpf
Hi Johannes,
änder mal diesen Code...

Sub Imp_and_Mask()
' Imp_and_Mask Makro
' Tastenkombination: Strg+q
Range("A1").Select
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;file:///file:///G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI/statement.htm", _
Destination:=Range("$A$1"))
...um in...

Sub Imp_and_Mask()
' Imp_and_Mask Makro
' Tastenkombination: Strg+q
Dim fileToOpen As Variant
Range("A1").Select
fileToOpen = Application.GetOpenFilename("HTML Files (*.html), *.html")
If fileToOpen = False Then Exit Sub
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;fileToOpen, _
Destination:=Range("$A$1"))
Den restlichen Code kannst du so lassen.
Hilfts?
Ciao
Thorsten
Anzeige
Vielen lieben DANK Soweit,
29.06.2022 13:34:49
Johannes
Hi Thorsten,
Super danke jetzt gehts,
hab 3 stunden den Fehler gesucht, der noch drin war, aber hab ihn gefunden ;-)
With ActiveSheet.QueryTables.Add(Connection:="URL;" & fileToOpen, Destination:=Range("$A$1"))
nach URL hat das Leerzeichen gefehlt, anscheinend laut internet...was weiß ich denn schon. So gehts jedenfalls.
Hab dann noch"ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))"
Und ein bisschen aufgeräumt.
aber
jetzt hätte ich noch gerne aus den
"Dim fileToOpen As Variant"
der so aussieht:
G:\FTP_Main_Folder\ANT\KW26_Demo_Stars\PSS_FX_OPTI\statement.htm
Noch das neue Arbeitsblatt benannt, und zwar nach dem letzten Ordnernamen Namen,
weil die Reports immer mit dem Namen statement.htm automatisch gespeichert werden.
Ich hab jetzt den Befehl "ActiveSheet.Name = "NewName" mal probehalber verwendet.
Das Ausfiltern von dem ordnernamen zwischen den letzten 2 \\ backslahes macht mir noch Kummer.
Vielen lieben DANK Soweit,
Johannes
hier das ganze Werk
Sub Imp_and_Mask_test()
Dim fileToOpen As Variant
Range("A1").Select
fileToOpen = Application.GetOpenFilename("HTML Files (*.htm), *.htm")
If fileToOpen = False Then Exit Sub

Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
With ActiveSheet.QueryTables.Add(Connection:="URL;" & fileToOpen, Destination:=Range("$A$1"))
.Name = "statement"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
' betimmen des Blattes von dem kopiert wird
Dim mask As Worksheet
Set mask = Sheets("Maske")
' abspeichern des aktiven ArbeitsBlattes
Dim ws1 As Worksheet
Set ws1 = ActiveSheet
Sheets("Maske").Select
Columns("O:DL").Select
Selection.Copy
ws1.Select
Columns("O:O").Select
ActiveSheet.Paste

' message Box mit dateinahmen anzeigen
MsgBox fileToOpen & " Fertig Imported ;-) danke Oberschlumpf "
ActiveSheet.Name = "New_Import"
Anzeige
AW: Vielen lieben DANK Soweit,
29.06.2022 14:26:00
Oberschlumpf
Hi,
änder diesen Code...

ActiveSheet.Name = "New_Import"
...um in...

ActiveSheet.Name = Split(fileToOpen, "\")(UBound(Split(fileToOpen, "\") - 1)
Hilfts?
Wenn nein, zeig doch bitte, anstelle von nur Code, einfach mal ne Bsp-Datei per Upload.
Ach ja, und wenn du Code zeigst, dann nutz doch bitte den Button mit "Code pre code" in gelber Schrift - das macht das Ganze viel leserlicher.
Ciao
Thorsten
Dein String gibt mir einen Syntax Fehler
29.06.2022 14:59:57
Johannes
Hi Thorsten,
OK ich versuche es mal das mit dem code Is alles etwas neu für mich,
Dein String gibt mir einen Syntax-Fehler, habs mit ein paar Kommas versucht, aber leider nichts geholfen. Also
Beispiel HTM File : https://www.herber.de/bbs/user/153856.htm
Beispiel Maske, genannt muster: https://www.herber.de/bbs/user/153858.xlsx




Irgendwie hat es glaube ich geklappt
danke einstweilen
Johannes
Anzeige
wer anders bitte
29.06.2022 15:29:45
Oberschlumpf
Hi Johannes,
sorry..ähh?...ja, jetzt hast du Dateien per Upload gezeigt - so weit, so gut.
Aber wieso zeigst du die Excel-Datei ohne dein(e) Makro(s)?
Und wo/was muss man klicken, damit dein Makro gestartet wird?
Ja, ich weiß, is alles neu...aber bei Excel = gut erwarte ich...natürlich nicht VBA-Kenntnisse (da hast du ja "bescheiden" angegeben)...aber ich erwarte durchaus, dass du weißt, dass Makros nicht in xlsx-Dateien gespeichert werden können - außerdem wirst du beim Speicher-Versuch MIT Makros im XLSX-Format sogar darauf hingewiesen, dass Makros beim Speichern verloren gehen.
Ich mag dieses Frage/Antwort-PingPong nicht - deswegen bin ich raus.
Weiter viel Erfolg!
Ciao
Thorsten
Anzeige
Sorry, war zu gross für upload, trotzdem DANKE
29.06.2022 16:15:43
Johannes
Hab nur schnell was gemacht, weil die Seite meinen Upload nicht akzeptiert hat, war nicht so gut.
Ich habe das immer aus dem VBA raus gestartet, aber jetzt eine Taste auf die Maskenseite gelegt. Und der Code ist in Modul 9
Ich lade es nochmal hoch, just in Case, du schaust doch nochmal rein,
https://www.herber.de/bbs/user/153860.xlsm
Es geht nur noch um den Namen zwischen den Backslash von rechts.
Wenn nicht, trotzdem Danke, du warst eine sehr große Hilfe.
Wenn jemand anderes den Fehler findet, wäre ich dankbar Zeigt einen Syntaxfehler an

Dim SheetName As String
ActiveSheet.Name = Split(fileToOpen, "\")(UBound(Split(fileToOpen, "\") - 1)
Grüße
Johannes
Anzeige
AW: Sorry, war zu gross für upload, trotzdem DANKE
29.06.2022 16:40:17
ralf_b
mach vor das -1 noch eine schliessende Klammer.
.......................................
29.06.2022 16:43:50
Oberschlumpf
ich lade deine neue Datei
"Schön, der Import-Button ist zu sehen!", hab ich gedacht.
Also nach aktivieren der Makros 1x draufgeklickt....zu sehen bekomm ich DAS!
Userbild
Excel "vermisst" eine Datei aus deinem Verzeichnis "G:\FTP_Main_Folder\Hannes...usw"
Denn dein Code in Modul9 ist - in der anderen Datei gespeichert!!!
Ein Modul9 gibt es nicht in der Datei, die du uns mit Makros gezeigt hast - da gibt es nur Modul1 !!!
ich mach jetzt was anderes....
Nochmal modul 1 bei mir klapts jetzt
29.06.2022 20:21:37
Johannes
Hallo und danke
Habe jetzt alles in Modul 1 kopiert, Button link geändert und probiert.
Ich hatte vorher anscheinend noch eine andere Arbeitsmappe auf. Alles echt kompliziert.
https://www.herber.de/bbs/user/153865.xlsm
Jetzt sollte es funktionieren, sonst fällt mir nix mehr ein
Gruß
Johannes
AW: Macro oder VBA für webimport
27.06.2022 12:35:04
Yal
Hallo Johannes,
Makro, die mit dem Makrorekorder aufgenommen wurden, wiederholen immer, was aufgenommen wurde. Gedanken werden dabei nicht gelesen.
Bei der Aufnahme hat es die Wert der Zelle A1 fest aufgenommen:
Connection:= "URL;file:///file:///G:/FTP_Main_Folder/ANT/KW26_Demo_Stars/PSS_FX_OPTI/statement.htm"
Wenn Du es dynamisch gestalten möchtest, musst Du davor den Inhalt von A1 lesen (spricht den Pfad einer html-Datei auf dem Netzlaufwerk G) und die Wert dem PQ-Abfrage übergeben.
Achte dabei, dass immer eine neue PowerQuery-Abfrage erzeugt wird und diese -gemäss der Aufnahme- immer dieselbe Name haben sollte:
.Name = "statement"
Diese Wiederverwendung dieselber Namen ist nicht erlaubt und wird zu einer Fehler führen. Die bisherige Abfrage müsste vorher gelöscht werden.
Alternativ wäre eine aktive Tabelle, in der nur den Pfad der Datei vorliegt, dann diese in einer PQ-Abfrage lesen und dem anderen Query übergeben. Dann bräuchtest Du keine PQ-Erzeugung über VBA, sondern nur die Aktualisierung:
ActiveSheet.QueryTables("statement").Refresh BackgroundQuery:=False
VG
Yal
da muss ich mich langsam hinarbeiten
27.06.2022 13:10:08
Johannes
Danke Yal
das übersteigt mein derzeitiges Wissen, da muss ich mich langsam hinarbeiten.
Ich versuche es jetzt mal mit dem Dateipfad wechseln und arbeite mich dann weiter vor.
Vg
Johannes

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige