Mit ADODB-Zugriff auf geöffnete xls-Datei
Obwohl ich gearbeitet habe mit VBA für Excel für eine Recht lange Zeit, ich habe ein problem was ich nicht lösen kann, von mir selbst. Ich habe es beschrieben unten, hoffe etwas Hilfe zu bekommen oder Ratschläge.
Ich verwende Excel 2007 und Windows XP, alle aktualisiert mit den neuesten patches.
Ich bin sehr oft mit dem folgenden code, um Daten aus einer anderen Arbeitsmappe:
Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=g:\source.xls;Extended Properties=Excel 8.0;"
Sql = "SELECT Field1, Field2 FROM [Sheet1$]"
Set rst = New ADODB.Recordset
rst.Open Sql, conn, adOpenForwardOnly
Worksheets("Results").Range("A2").CopyFromRecordset rst
rst.Close
Set rst = Nothing
conn.Close
Set conn = Nothing
Als einfach, wie sein kann - nur mit der Datei verbinden und erhalten Sie einige Daten aus. Es funktioniert perfekt, solange die source-Datei, die sich auf einem gemeinsamen Netzwerk-Laufwerk (g:\source.xls) ist nicht auf einem anderen computer geöffnet.
Wenn einige Benutzer auf einem anderen computer die Datei geöffnet hat und ich versuche, führen Sie den folgenden code, ich merke, eine Sache, die ich möchte, um loszuwerden off: der Quell-Excel-Datei wird geöffnet (im nur-Lesen-Modus) auf meinem computer und es ist nicht geschlossen, wenn die Verbindung zu dieser Datei wurde geschlossen. Was ist schlimmer, auch wenn ich in der Nähe dieser Quelle-Datei manuell, verlässt es einige Müll in meiner Datei, wie es war nie geschlossen: siehe Bild nach paar code-Ausführung (die source-Dateien, die geschlossen wurde, bevor):
Begann ich zu glauben, dass es einen bug, der nicht behoben werden kann - hoffe, ich Irre mich 🙂
InformationsquelleAutor mj82 | 2012-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eigentlich ein bekannter bug, siehe: http://support.microsoft.com/default.aspx?scid=kb;en-us;319998&Product=xlw. Abfragen einer geöffneten Excel-Arbeitsmappe mit VBA verursacht einen Speicherverlust auftreten, wie der Verweis wird nicht freigegeben, auch nach dem schließen der Verbindung und löschen des Objekts.
Ja, es saugt, aber es ist immer noch eine ÄUßERST nützliche Möglichkeit, Daten aus einer Excel-Bücher. Sie müssen nur kleine änderungen hier und da zu bekommen, um potenzielle Probleme. Da die meisten Daten, die Sie würde den Zugriff mit dieser Methode ist Zeug, das ist besser geeignet, in einer Datenbank anyways ich in der Regel nur am Ende einer Aggregation aller der Sachen, die ich will, um zu ziehen in eine kleine Access-DB mit dieser Methode und dann veröffentlichen, was Excel-sheet, PDF, etc. aus.
Diese URL wurde verursacht redirect-Schleife. Versuchen Sie https://support.microsoft.com/en-us/kb/319998.
InformationsquelleAutor Kittoes0124
Ihre Excel-version 2007 oder höher?
wenn ist von Microsoft verwenden.Ass.OLEDB.12.0 bei provider und dein problem ist gelöst.
[]s
InformationsquelleAutor Bruno Leite
Ihnen wäre es viel besser, öffnen Sie Ihre Excel-Datenquelle mit Hilfe der eingebauten Excel-Referenz, sondern als ein ADO-connection e.g:
Und dann von hier aus gehen Sie stattdessen
Warum sollte dein store-Datenbank, style-Informationen, auf denen Sie ausgeführt werden können SQL; in eine Excel-Datei, warum nicht mit Access oder einem anderen Zweck gebaut Datenbank-Programm? Der einzige Grund, warum ich bevorzuge diese Methode, da können Sie Schritt für Schritt durch die verschiedenen Felder auf dem Bogen und letztlich erfassen alle möglichen schlechten Daten leichter.
Das ist, weil ich arbeite mit bereits vorhandenen Benutzers Excel-Dateien. Ist es nicht Zeit-wirtschaftlichen Wiederaufbau jede einzelne Datei, die Sie ohnehin schon benutzen, nur um die gleichen Daten in Access. Und - noch wichtiger - die meisten Nutzer wissen nicht, Access und VBA, so dass Sie lieber die Arbeit mit dem Werkzeug, die Sie kennen und die Sie nutzen können, zu ändern oder passen Sie auf Ihre eigenen - das ist einfach die Excel-Datei. Natürlich, wo ich kann und wenn ich eine Applikation von Grund bevorzuge ich die Verwendung von Datenbank-als gut, aber in den meisten Fällen, die ich versuche zu "integrieren" verschiedene Datenquellen, einschließlich .xls-Dateien, die verursachen das problem...
InformationsquelleAutor Matt Donnan