Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
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

Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL

Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
26.11.2014 20:28:56
Alex
Hallo zusammen,
ich stehe gerade vor einem Rätsel. In Excel 2010 habe ich eine Liste, die definitv mehr als 65.536 Einträge hat. Diese versuche ich per VBA über ein SQL-Statement zu aggregieren. Das Resultat hat dann maximal 1.000 Einträge.
Das Mysterium: Die u.a. Funktion unterdrückt IMMER sämtliche Zeilen, die nach der berühmten 65.536 sind. Die Datei ist natürlich eine xlsm. Alternativen, die ebenfalls nicht funktionieren: eine xlsx, eine "ganz frische" Datei (falls noch irgendwelche "2003-Reste" versteckt wären), Zugriff nicht in einer Datei sondern zwischen zweien, ... Wie man es dreht und wendet, die 65.536 fällt nicht.
Vielleicht habt Ihr ja ne kluge Idee, ich habe nur noch graue Haare :-)
Die Quelltabelle ist wie folgt aufgebaut:

key num
------------------
AA.BAA.001.1 5555
AA.AAA.000.0 5
AA.BAA.001.1 100
XX.ZYX.222.2 9
RR.QQR.124.4 700
....

Der Funktion selbst:

Function SQLAA()
Dim SQLAA_CONNE As New ADODB.Connection
Dim SQLAA_RCSET As New ADODB.Recordset
Dim SQLAA_STMNT As String
SQLAA_STMNT = "SELECT tAA.key,SUM(tAA.num) FROM ([TABELLE_AA] AS tAA) WHERE (tAA.key'') GROUP BY tAA.key ORDER BY tAA.key"
Set SQLAA_CONNE = CreateObject("ADODB.Connection")
Set SQLAA_RCSET = CreateObject("ADODB.RecordSet")
SQLAA_CONNE.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;FMT=Delimited"";"
SQLAA_RCSET.Open SQLAA_STMNT & ";", SQLAA_CONNE, 1, 3
Call SQLEX(SQLAA_RCSET) 'Output-Funktion in ein Tabellenblatt, nicht weiter wichtig
SQLAA_RCSET.Close
SQLAA_CONNE.Close
Set SQLAA_RCSET = Nothing
Set SQLAA_CONNE = Nothing
End Function

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
26.11.2014 21:25:30
Luschi
Hallo Alex,
- entferne mal im Vba-Verweis das Häckchen bei: Microsoft ActiveX Data Objects x.y Library
- ersetze diese 2Zeilen
Dim SQLAA_CONNE As New ADODB.Connection
Dim SQLAA_RCSET As New ADODB.Recordset
gegen
Dim SQLAA_CONNE As Object
Dim SQLAA_RCSET As Object
denn die folgenden 2 Zuweisungen benötigen kein 'Early Binding'
Set SQLAA_CONNE = CreateObject("ADODB.Connection")
Set SQLAA_RCSET = CreateObject("ADODB.RecordSet")
Dadurch wird ja immer die neueste Version von ADODB gezogen. Wie man diese ermittelt findest Du hier:
http://www.vbarchiv.net/tipps/tipp_1541-installierte-ado-version-ermitteln.html
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
27.11.2014 09:17:59
Alex
Hallo Luschi,
das war's leider nicht. Nach 65.536 ist weiterhin Schluss.
Verwiesen war übrigens auf die ADO 6.1 Library, die hier m.W. keine Probleme machen sollte. Nun bin ich ja kein Freund von Late Binding (wo kommen wir denn da hin, wenn Variablen selbst entscheiden dürfen, was sie sind? :-)), aber auch die zusätzliche Freiheit nutzt nix...
Aber weil wir gerade bei Verweisen sind: Kann es sein, dass ich ZU WENIGE Verweise gesetzt habe? Dass irgendeiner fehlt, der die 1 Mio Zeilen erlaubt? (Google spricht hierzu nichts.)
Aktive Verweise:
- Visual Basic For Applications
- Microsoft Excel 14.0 Object Library
- Microsoft Office 14.0 Object Library
- Microsoft Visual Basic for Applications Extensibility 5.3
Grüße
Alex

Anzeige
AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
27.11.2014 09:19:19
Alex
(Dummy-Antwort, da "Frage offen"-Haken vergessen.)

AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
27.11.2014 18:15:10
Luschi
Hallo Alex,
ich habe das jetzt mal getestet und es gibt bei mir keine Probleme 100.000 Datensätze aus einer anderen Excel-Datei per ADODB zu übernehmen. Ich schicke Dir jetzt eine zip-Datei mit 2 Excel-Dateien. Mache bitte Folgendes:
- enpacke die zip-Datei in einen leeren Ordner.
- starte die xlsm-Datei
- klicke auf den Button 'Daten in externer Datei erstellen'
- jetzt werden in der xlsx-Datei 100.000 Daternsätze erzeugt (nur 2 Felder!) und geht ratz-fatz
- diese xlsx-Datei wird automatisch per Vba gespeichert und wieder geschlossen
- klicke jetzt auf den Button 'Daten aus externer Datei einlesen (ADODB)'
- und staune was passiert!
Ich benutze ja zu Einlesen 'CopyFromRecordset'. Vielleicht ist ja Deine Einlese-Routine an Allem Schuld!?!
https://www.herber.de/bbs/user/94078.zip
Gruß von Luschi
aus klein-Paris
PS: noch ein Wort zu 'late-binding'
Wenn man selbst z.B. mit Access/Word/Outtlook/Poperpoint/Excel-Vba 2010 programmiert, der Anwender der Makros besitzt aber schon Version 2013, dann kann es bei gesetzten Verweisen schon mal zu Problemen kommen, weil das automatische Umswitchen der Verweise durch Office nicht immer reibungslos verläuft.
Meist tritt das aber im umgekehrten Fall auf.
Hier ist 'LATE-BINDING' ein wahrer Segen.

Anzeige
AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
28.11.2014 00:22:57
Alex
Hallo Luschi,
... ich staune in der Tat. Weniger (aber auch) über
a) Deine beiden wunderbar funktionierenden M_100000-Dateien (nicht anderes habe ich erwartet :-))
sondern darüber, dass
b) Dein 1:1 kopierter Code in meiner Datei wieder bei 65.536 abreisst, aber
c) die Originaldaten kopiert in Deine M_100000.xlsx bis zum Ende durchlaufen.
Es muss also irgendwie doch an meiner Datei liegen.
Das doppelte Umkopieren ist zwar nicht hübsch, erfüllt aber -- bis zur endgültigen Problemlösung durch mich -- vorerst seinen Zweck. Von daher werde ich Deine beiden Dateien jetzt in Ehren halten. Vielen Dank dafür!
Grüße
Alex
PS: Für den geschilderten Fall ist Late Binding natürlich richtig. Mein einziger Anwender bin in dem Fall allerdings nur ich selbst, nach mir gibt es nur noch eine statische Excel-Datei mit gerade mal ein paar WENN(...)-Formeln.

Anzeige
AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
28.11.2014 00:30:08
Alex
Nachtrag: Ich hab es!!
Ich hatte einen benannten Bereich TABELLE_AA = Tabellenblatt!$A:$X.
Führe ich "SELECT ... FROM [TABELLE_AA]" aus, wird ignoriert (warum auch immer), dass $A:$X mehr als 65.536 Zeilen hat.
Schreibe ich hingegen "SELECT ... FROM [Tabellenblatt$]" wie Du, dann klappt es.

AW: Excel2010: Abbruch nach 65.536 Zeilen in ADODB-SQL
28.11.2014 04:44:58
Luschi
Hallo Alex,
na, da freue ich mich doch gleich mit Dir. Die Wege von Vba/AdoDB sind unergründdlich...
Gruß von Luschi
aus klein-Paris
PS: Man trift sich beim nächsten Fallstrick im o.g. Bereich

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige