Import Excel file

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.233
Ik wil van een Exceltabel bepaalde niet-aaneengesloten kolommen van een table importeren. Blijkbaar kan je vanuit Access VBA niet met een in Excel gegeven range name werken
Ook volgende geeft een fout bij het range argument:
Denk dat de oplossing eenvoudig is maar vind ze niet :(
Code:
DoCmd.TransferSpreadsheet tableName:="ImportExcel2", FileName:=File, hasfieldnames:=True, range:="A,C"
 
Ik wil van een Exceltabel bepaalde niet-aaneengesloten kolommen van een table importeren.
Daar ligt je probleem, en je 'oplossing'. Zoals een japanner zou zeggen: "dat wordt erg moeilijk". En dat antwoord krijg je dan omdat het heel onbeleefd schijnt te zijn om te zeggen dat het niet kan...
Je kunt prima een bereik importeren, maar dat moet een aaneengesloten blok cellen zijn. En dat heb jij niet. De enige oplossing is dan: twee keer importeren in twee verschillende recordsets bijvoorbeeld, en die in een loop wegschrijven naar je tabel.
 
Ik ben geen Japanner, dus mijn antwoord is : :evil:

Weg illusie dat je met VBA alles kunt :)
 
Je kunt het juist met VBA oplossen, door twee imports te doen, die aan elkaar te matchen en in een tabel te plempen. :D. Zelf zou ik zeggen: wat interesseren mij die lege kolommen? Niets namelijk. Dus ik zou het hele werkblad importeren en m.b.v. een toevoegquery de handel opschonen in de juiste tabel.
 
Dat zie ik nu ook niet meteen zitten. Zelf zou ik dan eerder vanuit Access die Excel file aanspreken, kopie van werkblad maken en daar onnodige kolommen verwijderen, en dat importeren.
 
Heb het nu zo gedaan. Heel weinig ervaring met Automation, dus weet niet of het de goede methode is.
Ik ga ervan uit dat kolom A en C moeten geïmporteerd worden.
Code:
Sub ImportExcel()
'Alleen kolom A en C importeren
Dim ws_orig As Worksheet, wb_kopie As Workbook, ws_kopie As Worksheet, Kolomweg As Range
On Error Resume Next
DoCmd.DeleteObject acTable, "Exceltabel"
On Error GoTo MyError
Set Objexcel = New excel.Application 'bovenaan gedeclareerd
Set ObjWB = Objexcel.Workbooks.Open(CurrentProject.Path & "\VoorImport.xlsx")
Set ws_orig = ObjWB.Sheets("Blad1")
ws_orig.Copy
ObjWB.Close
Set wb_kopie = ActiveWorkbook
Set ws_kopie = ActiveSheet

Set Kolomweg = ws_kopie.Columns(2) 'of columns("B:B")

Kolomweg.Delete
wb_kopie.SaveAs FileName:=CurrentProject.Path & "\Tijdelijk.xlsx"
wb_kopie.Close
Set Objexcel = Nothing
Set ObjWB = Nothing


DoCmd.TransferSpreadsheet TableName:="ExcelTabel", FileName:=CurrentProject.Path & "\Tijdelijk.xlsx", hasfieldnames:=True
Kill CurrentProject.Path & "\Tijdelijk.xlsx"
Exit Sub
MyError:
MsgBox Err.Description

End Sub
 
Dat zie ik nu ook niet meteen zitten. Zelf zou ik dan eerder vanuit Access die Excel file aanspreken, kopie van werkblad maken en daar onnodige kolommen verwijderen, en dat importeren.
Zóveel meer werk..... Maar ach, als je niks te doen hebt :).
 
Heel weinig ervaring met Automation, dus weet niet of het de goede methode is.
Beetje overkill als je het mij vraagt. Je kunt ook volstaan met het kopieren van dat werkblad, daar de rij verwijderen (ook hier overkill: de SET is overbodig) en vervolgens het blad importeren en na het importeren verwijderen. Maar een kopie bestand maken mag natuurlijk ook. Of je complete kolommen moet importeren? Mwahh...
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan