• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Jagged Array (array met array's) met 1 element in zo'n array van een array [VBA]

Status
Niet open voor verdere reacties.
Ik vermoed van wel.

Ik probeerde ook nog wat in het werkblad wel lukt:

Table1[product], Table1[soort], etc.

geen succes.

Evenmin met

[Table1[product]], [Table1[soort]],
 
Laatst bewerkt:
Dan nog een hulpvraag.

Zoals je kunt zien in de code van Alpha en mij worden er eerst gebieden ('velden') benoemd waarnaar in de SQL tekenreeks verwezen wordt.
Als we in Excel van de gegevens een Tabel (VBA: listobject) zouden maken, zou het in principe mogelijk moeten zijn direkt naar die 'velden' per kolom te verwijzen (net als in een formule in het werkblad). Hoe zouden die verwijzingen in de SQL-tekenreeks dan gefomuleerd moeten worden ? Dan zouden we nl. de tussenstap van benoemde gebieden kunnen overslaan.
Dan zou je SQL moeten gaan doe aan "partitioning", ik denk niet dat de code daardoor kort wordt, zie http://www.sqlshack.com/database-table-partitioning-sql-server/
 
deze is onafhanklijk van het aantal kolommen.

sub test() uitvoeren
 

Bijlagen

  • Jagged Array 2.xlsm
    18,2 KB · Weergaven: 30
Laatst bewerkt:
Dat kan ook, "old school" recursief.
 
Ginger, waarom staan niet alle afwerkingen in 1 kolom, ipv in afwerking en afwerking 2

dan heb je minder kans op rariteiten in de oplossingen.
 
Ginger, waarom staan...

Sylvester, dát is precies de vraag die ik de TS - die ik dus hielp op een ander forum - óók stelde. Maar dit was de opbouw die zij gebruikten, kreeg ik als reactie. En éérlijk gezegd was dát voor mij ook de reden dat ik het wel een interessante vraag vond en er mee aan het puzzelen ging om het opgelost te krijgen. Ik liep dus alleen vast in die jagged array op het moment dat zo'n kolom uit slechts 1 element bestond. Dan werd dat element ineens geen array meer, maar gewoon een string en liep ik verderop in de code vast. ;)
 
Hoe zouden die verwijzingen in de SQL-tekenreeks dan geformuleerd moeten worden ? Dan zouden we nl. de tussenstap van benoemde gebieden kunnen overslaan.

In de tekenreeks direct de bereiken benoemen, scheelt in ieder geval de tussenstap, maw mid(c00,2) zou dan moeten zijn:
Code:
"[huisstijl$a1:a2],[huisstijl$B1:B5],[huisstijl$C1:C3],[huisstijl$D1:D3],[huisstijl$E1:E4],[huisstijl$F1:F6],[huisstijl$G1:G4],[huisstijl$H1:H8]"

uiteraard deze string middels code genereren, (let op de dollar-tekens en de blokhaken)
 
op basis van het bestandje uit post#1 (dus met rij 2 leeg, zonder headers)

Code:
Sub zoiets()

    For Each it In Sheet1.Cells(3, 1).CurrentRegion.Columns
        c01 = IIf(it.SpecialCells(2).Count = 1, ":" & it.SpecialCells(2).Address(False, False), "")
        c00 = c00 & ",[" & it.Parent.Name & "$" & it.SpecialCells(2).Address(False, False) & c01 & "]"
    Next
    With CreateObject("ADODB.Recordset")
        .Open "SELECT * FROM  " & Mid(c00, 2) & "", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"""
         Sheet1.Cells(1, 10).CopyFromRecordset .DataSource
    End With
  
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan