Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
928to932
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
928to932
928to932
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Webabfrage mit Excel wird sehr langsam

Webabfrage mit Excel wird sehr langsam
21.11.2007 08:12:00
saubermacher
Hi Leute,
nach mehereren Nächten Googlen wende ich mich nun an Euch, vielleicht könnt Ihr mir helfen.
Ich habe Performance Probleme bei einem Makro das Webabfragen aus dem Netz macht.
Erstes Problem, ich speicher nach jeder Webabfrage mein Workbook und manchmal ganz unmotiviert fragt mich Excel ein SpeichernUnter mit einer lustigen Nummer als Filenamen, wenn ich okay drücke läuft das Makro weiter, wenn ich den Namen ändere dann kommt ein Laufzeitfehler 1004.
Zur Zeit habe ich das Speichern auskommentiert.
Zweites Problem, steigt die Anzahl der Webabfragen über 400 dann wird mein Rechner wirklich sehr langsam, obwohl die Datenmengen eher bescheiden sind die ich in mein Worksheet kopiere. Mein Rechner ist eher eine flotte Motte als ein alter Opa, Hauptspeicher 2G und mein System läuft auf XP, Internetverbindung ist super schnell, der Server von dem ich die Daten hole ist eher langsam.
Kennt Ihr auch solche Probleme oder habe ich einfach irgendetwas vergessen oder eher nicht sauber programmiert.
Danke für Eure Hilfe und LG
saubermacher
Anbei ein Auszug aus meinem Makro:
===========================================================================
For zeilen = startzeile To letztezeile
sQuery = ""
wkn = 0
firma = Worksheets(Daten).Cells(zeilen, firma_spalte).Value
Worksheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = firma
sQuery = "http://member.corporateinformation.com/snapshot.asp?CUSIP="
cusip = Worksheets(Daten).Cells(zeilen, cusip_spalte)
sQuery = sQuery & cusip & "&Sentby=Home"
Worksheets.Add After:=Worksheets(Worksheets.Count)
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://member.corporateinformation.com/snapshot.asp?CUSIP=" & cusip & "&Sentby=Home", _
Destination:=Range("A1"))
.Name = "snapshot.asp?CUSIP=" & cusip & "&Sentby=Home"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Name = "profile"
profile = ActiveWorkbook.Sheets("profile").Name
stack1 = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
stack2 = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For delcountx = 1 To stack2
For delcounty = 1 To stack1
If Worksheets(profile).Cells(delcounty, delcountx).Value Like "*Market Capitalization:*" Then
Worksheets(firma).Cells(7, 2).Value = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, 24, Len(Worksheets(profile).Cells(delcounty, delcountx).Value) - 23)
Worksheets(Daten).Cells(zeilen, 7).Value = Worksheets(firma).Cells(7, 2).Value
End If
If Worksheets(profile).Cells(delcounty, delcountx).Value Like "*Currency:*" Then
Worksheets(firma).Cells(8, 2).Value = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, 11, Len(Worksheets(profile).Cells(delcounty, delcountx).Value) - 10)
Worksheets(Daten).Cells(zeilen, 8).Value = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, 11, Len(Worksheets(profile).Cells(delcounty, delcountx).Value) - 10)
End If
If Worksheets(profile).Cells(delcounty, delcountx).Value Like "*Fiscal Year Ends:*" Then
Worksheets(firma).Cells(9, 2).Value = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, 18, Len(Worksheets(profile).Cells(delcounty, delcountx).Value) - 17)
Worksheets(Daten).Cells(zeilen, 9).Value = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, 18, Len(Worksheets(profile).Cells(delcounty, delcountx).Value) - 17)
End If
If Worksheets(profile).Cells(delcounty, delcountx).Value Like "*):*" Then
datumc = Len(Worksheets(profile).Cells(delcounty, delcountx).Value)
For datumc1 = datumc - 1 To 1 Step -1
datumm = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, datumc1, 1)
If datumm = " " Then
datuml1 = datumc1
wkurs = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, datumc1 + 1, datumc - datumc1)
Worksheets(firma).Cells(5, 2).Value = wkurs
Worksheets(Daten).Cells(zeilen, 5).Value = Worksheets(firma).Cells(5, 2).Value
End If
If datumm = ")" Then
datuml2 = datumc1
End If
If datumm = "(" Then
kurs_datum = Mid(Worksheets(profile).Cells(delcounty, delcountx).Value, datumc1 + 1, datuml2 - datumc1 - 1)
Worksheets(firma).Cells(6, 2).Value = kurs_datum
Worksheets(Daten).Cells(zeilen, 6).Value = Worksheets(firma).Cells(6, 2).Value
datumc1 = 0
End If
Next datumc1
End If
Next delcounty
Next delcountx
del = ActiveWorkbook.Sheets.Count
Worksheets(del).Delete
Application.CutCopyMode = False
ActiveSheet.Name = firma
filename = Application.ActiveWorkbook.Name
spath = Application.ActiveWorkbook.Path
'ActiveWorkbook.Save
Next zeilen

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Webabfrage mit Excel wird sehr langsam
21.11.2007 09:34:00
Renee
Hi saubermacher,
Bei dem Namen müsste man mal den Code ....
Ich hab keine Lust, mich da durchzuwühlen (dazu müsste die Code-Darstellung etwas sauberer sein, benutze doch die Zitat-Tags in diesem Forum!), aber was mir auffällt:
Warum addierst Du immer ein neues Sheet, addierst eine Query, und löschst dann alles wieder? Viel effizienter wäre doch:
1. Ein einziges Sheet für die Query
2. Querystring modifizieren
3. Query ausführen mit Query.Refresh
4. Daten wenn möglich per Formeln ins Datensheet ziehen
5. Loop nach 2. bis fertig!
GreetZ Renee

Anzeige
AW: Webabfrage mit Excel wird sehr langsam
21.11.2007 22:40:00
saubermacher
Hi Renee,
danke für Deine Antwort, habe erst jetzt nach einem langen Arbeitstag gesehen, das Du mir eine Hilfestellung gegeben hast.
Erstmal Entschuldigung für den schlimmen Kode, habe ihn einfach rein kopiert. Habe in der Eile die Zitat-Tags übersehen. Eigentlich steht nicht viel drinn, ich lade mir die Webseite, fische mir ein paar Daten herraus und kopiere diese auf ein neues Worksheet.
Du hast vollkommen recht es macht nicht viel Sinn den Query andauernd zu löschen, vielleicht ist das auch der Grund warum meine Mühle nach vielen Abfragen dicht wird.
Hab gleich mal Deine Idee mehr schlecht als recht ausprobiert.

2. Querystring modifizieren
3. Query ausführen mit Query.Refresh


Beim Query.Refresh hab ich noch Probleme das elegant zu lösen. Ich habe wieder das ganze ActiveSheet.QueryTables.Add Statement verwendet, weil ActiveSheet.QueryTables("Name").Refresh haut nicht hin. Excel kommt immer mit dem Fehler ungültigen Bereich daher. Denke mal ich hab das falsch kodiert.
Vielleicht kannst Du mir ja mal auf die Sprünge helfen.
Hast Du eine Idee was das Speicherproblem betrifft oder kennst Du so ein Problem nicht?
Danke nochmals für Deine Hilfe.
LG
saubermacher

Anzeige
AW: Webabfrage mit Excel wird sehr langsam
22.11.2007 00:06:00
Renee
Hi Saubermacher,
Statt dem Namen nimmst Du ganz einfach den Index, denn ich nehme an, du hast dann wirklich nur ein Queryobjekt auf dem Sheet. Also:

ActiveSheet.QueryTables(1).Refresh BackgroundQuery:=False


GreetZ Renee

AW: Webabfrage mit Excel wird sehr langsam
22.11.2007 23:00:27
saubermacher
Hi Renee,
ich sehe ich bin nicht der einzige der lange arbeitet ;-)
Danke für Deinen Input, hat mir geholfen, den Query.Refresh wie Du Ihn beschrieben hast, habe ich gestern schon ausprobiert, hat aber nicht funktioniert. Ich denke der Grund war, dass ich bei jedem Webzugriff eine neue Seite mit neuen Daten laden möchte, ich habe aber nicht die neue Seite mit dem Query.Refresh geöffnet sondern nur die alte refreshed.
Jetzt habe ich folgenden Kode für das Updaten der Seite in mein Makro eingebaut.

With Selection.QueryTable
.Connection = _
sQuery
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With


Den sQuery baue ich mir jedesmal neu zusammen, muss das Makro noch an grossen Datenmengen testen, erste Tests zeigen mir, dass ich schon viel Performance gewonnen habe.
Also Danke nochmals für Deine Hilfe.
Selbst auf die Gefahr hin, dass ich lästig erscheine hast Du eine Idee zu meinem Speicherproblem?
Ich habe mir gerade Vista angelacht, hast Du Erfahrung damit?, wird die Performance meiner Makros beeinträchtigt oder sind in Vista einige Dinge besser als bei XP?
Danke und LG
saubermacher

Anzeige
AW: Webabfrage mit Excel wird sehr langsam
23.11.2007 08:41:27
Renee
Hi Saubermacher,
Zu deinem Speicherproblem: Es könnte sein, dass du immer noch alte Queryobjekte in der Datei rumschleppst, ohne dass du sie siehst. Das kannst Du überprüfen, indem du im Direktfenster des VBE für jedes Blatt diesen Befehl ?activesheet.querytables.count eingibst. Du solltest dann höchstens für das Blatt mit dem Query eine 1 erhalten und für alle anderen Null. Ein weiterer Tipp, wäre alle leeren Bereiche der Blätter mal zu selektieren und mit "Alles Löschen" zu bereinigen. Ebenfalls lohnt es sich die definierten Namen (Einfügen - Namen - Definieren) zu überprüfen und ggf. überflüssige zu löschen.
Office 2007 und v.a. Vista sind sicher speicherhungriger als die Vorgängerversionen. Ich verarbeite 40MB Exceldateien in Office & Win 2000 ohne grosse Performanceprobleme.
GreetZ Renee
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige