Dag allen, niet corona-gevelden,
Als ik in een ADODB-recordset een SQK filteropdracht formuleer om twee gebieden met gegevens in respektievelijk sheet1 en sheet2 samen te voegen, gebruik ik in de SQL-opdracht [Sheet1$] en [Sheet2$] om de afzonderlijke Excel-werkbladen aan te duiden.
Als ik gebruik maak van intelligente tabellen, krijgen die automatisch een gebiedsnaam: Tabel1 en Tabel2 (zie de 'names' manager bij formules).
Hoe kan ik in de SQL-opdracht aangeven dat de samen te voegen gegevens zich bevinden in Tabel1 en Tabel2 ?
De formulering [Tabel1$] of [Tabel2$] werkt hier in ieder geval niet.
Mijn dank bij voorbaat.
VBA voor smarties
VBA is een taal die je moet leren met een grammatica- en een woordenboek.
http://www.helpmij.nl/forum/announcement.php?f=5
Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
Ik kom deze tegen. Misschien is dat wat je zoekt.
Querying the ListObject's range using a table alias
https://stackoverflow.com/questions/...y-in-vba-excel
Gr,
JV
Ben benieuwd of bovenstaande suggestie van JVeer werkt, liep zelf in het verleden (met dynamische bereiken ipv intelligente tabellen) tegen het 65K rijen probleem aan, dit in tegenstelling tot het benoemen van een heel werkblad.
Gr. Eric
Zullen we eens, net als bij een gewone gebruiker, om een bestandje vragen? Lijkt me wel zo netjes.
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.
Ik mag natuurlijk helemaal geen bestand plaatsen, omdat daarin allerlei zeer vertrouwelijke gegevens zitten.
En dan nog is het te groot om te plaatsen.
Dus heb ik er maar zoveel uitgesloopt dat er een nauwelijks representatief bestand overbleef.
Dat tref je aan als bijlage.
In de makro is de wél werkende code 'uitgecommentarieerd'.
2 code-vormen met verwijzingen naar beide tabellen staan eronder.
Geen van beide biedt een succesvol resultaat.
Ik ben benieuwd naar jullie suggesties !
VBA voor smarties
VBA is een taal die je moet leren met een grammatica- en een woordenboek.
http://www.helpmij.nl/forum/announcement.php?f=5
Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
Zorg er voor dat de string er zo uit komt zien:
Code:.Open "select * from [Sheet1$A1:D14] left join [Sheet2$A1:D14] on ([Sheet1$A1:D14].aa1 = [Sheet2$A1:D14].zz1)", c00
Gr. Eric
@ E v R
Bedankt !
Blijkbaar evalueert de SQL-string geen benoemde gebieden en beperkt zich tot de evaluatie van werkbladen en A1-gebieden.
Ik heb het zo vormgegeven:
Code:Sub M_snb_leftjoin() Sheet3.UsedRange.ClearContents c00 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;;HDR=Yes;IMEX=1""" st = Array("[" & Replace(Split([Table1[#All]].Address(0, 0, , 1), "]")(1), "!", "$") & "]", "[" & Replace(Split([Table2[#All]].Address(0, 0, , 1), "]")(1), "!", "$") & "]") With CreateObject("ADODB.recordset") ' .Open "select * from `sheet1$` left join `sheet2$` on `sheet1$`.aa1 = `sheet2$`.zz1 ", c00 .Open "select * from " & st(0) & " left join " & st(1) & " on " & st(0) & ".aa1 = " & st(1) & ".zz1", c00 Sheet3.Cells(1).CopyFromRecordset .DataSource End With End Sub
VBA voor smarties
VBA is een taal die je moet leren met een grammatica- en een woordenboek.
http://www.helpmij.nl/forum/announcement.php?f=5
Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
ipv "!" zou ik "'!" gebruiken, die ' moet er ook nog uit
++
Zoals reeds gemeld in een voorgaande post; bereiken met meer dan de 65K regels lukt (mij) niet (itt een hele sheet)
++
Een bereiknaam niet zijnde een Tabel werkt ook (waarschijnlijk lukken die tabellen niet omdat deze (ook) blokhaken hebben
Laatst aangepast door E v R : 25 februari 2021 om 13:10
Gr. Eric
Geen oplossing voor de vraag maar een aantal wedervragen:
Waarom wil je dit soort constructies via VBA oplossen en niet via de ingebakken mogelijkheden zoals PQ?
Het hele Officepakket is opgebouwd uit een aantal logische onderdelen Word voor tekstverwerken, Excel voor rekenen en presenteren, Access voor databases, en nog wel wat meer. Waarom dan gaan 'rommelen' in Excel?
- Snelheid?
- Licentiekosten?
- Backward compatibility?
Je kan een paard naar het water leiden, maar je kan het niet dwingen te drinken.
@ VenA
- SQL-opdrachten zitten al decennia ingebakken in Excel: Querytables.
- PQ heeft beperkingen die Querytables en SQL-opdrachten niet hebben
- PQ maakt gebruik van dezelfde SQL-opdrachten; ze worden alleen aan de gebruiker anders gepresenteerd
- als je onbekend bent met alle SQL-mogelijkheden van Excel ben je niet de enige
- ik ben het met je eens dat MS de documentatie van de SQL-mogelijkheden van Excel heeft verwaarloosd
VBA voor smarties
VBA is een taal die je moet leren met een grammatica- en een woordenboek.
http://www.helpmij.nl/forum/announcement.php?f=5
Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
Excel-SQL heeft nooit een update gehad om listobjects te herkennen. Het advies is: zet op een werkblad één gegevenstabel (al dan niet listobject) en hou het gebied er omheen leeg. In de query gebruik je gewoon Sheet1$. (Als je meerdere tabellen op een sheet hebt kan het trouwens wel, dan wordt het iets als Sheet1$Data voor de eerste en Sheet1$Data_1 voor de tweede. Je kunt MS-Query gebruiken om dit te achterhalen.)
Enige informatie over Excel-Sql vind je in de help van MS-Query. Gebruik de tool MS-Query als inspiratiebron, als een macrorecorder/IDE/Studio voor Excel-SQL. Bijvoorbeeld om te achterhalen of je expressies met Iif() kunt toepassen (en of je dan een , of een ; moet gebruiken). En of je Like kunt gebruiken in criteria.
Ik zie uit naar De Snb PQ Challenge nummer 1PQ heeft beperkingen die Querytables en SQL-opdrachten niet hebben![]()
Uitzicht is van korte duur: hij stond al hier:
http://www.eileenslounge.com/viewtop...268690#p268690
VBA voor smarties
VBA is een taal die je moet leren met een grammatica- en een woordenboek.
http://www.helpmij.nl/forum/announcement.php?f=5
Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
Oei, mooi voorbeeld.
Volgens de verkoopcijfers zijn er 144 producten verkocht. De pivots komen niet verder dan 139. Waar zijn de overige 5 gebleven?
Andere insteek:
Feit: Product 1 is 12 keer verkocht;
Feit: Klant 1 en Klant 2 hebben beide alléén product 1 gekocht, en alleen zij hebben product 1 gekocht;
Hieruit volgt: Klant 1 en Klant 2 hebben SAMEN 12 producten 1 gekocht.
Dit is in tegenspraak met de pivots, waar staat dat Klant 1 en 2 samen 24 producten gekocht hebben.
Oeps.
Gegeven de dataset is alleen van klanten 8 en 9 te zeggen welke (8 en 9) en hoeveel (19 en 20) producten ze gekocht hebben.
De producten 2, 4, 5 en 7 zijn wel verkocht maar niet aan klanten
Op naar challenge 2.
Bij de 'ouderwetse' methoden wordt nog gewoon 'onder de toonbank' verkocht.![]()
VBA voor smarties
VBA is een taal die je moet leren met een grammatica- en een woordenboek.
http://www.helpmij.nl/forum/announcement.php?f=5
Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.