• 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.

Acces Query vanuit Excel VBA

Status
Niet open voor verdere reacties.

NogGeenGuru

Gebruiker
Lid geworden
5 aug 2015
Berichten
130
Beste forumleden,

Via Excel wil ik graag data toevoegen aan een Access DB.
Excel wordt hierbij gebruikt als invoerveld.

om dit te proberen heb ik een testtabel aangemaakt (A, genaamd).
Tabel A bestaat uit twee velden X (autoincrement) en Y (varchar(255)).

in Excel heb ik de volgende macro:

Code:
Sub ExportDataToAccess()

    Dim cn As Object
    Dim strQuery As String
    Dim Y As String
    Dim myDB As String

    'Initialize Variables
    Name = ActiveSheet.Range("A1")
    
    myDB = "<Locatie van mijn DB>.accdb"

    Set cn = CreateObject("ADODB.Connection")

    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = myDB
        .Open
    End With

    strQuery = "INSERT INTO A ([Y]) " & _
               "VALUES (" & Y & "); "

    cn.Execute strQuery
    cn.Close
    Set cn = Nothing
    
End Sub

Wanneer ik deze query vanuit Acces uitvoer gaat alles goed!
Excel verteld mij dat een parameter mist, waarschijnlijk doelt Excel op kolom X.

Ik heb natuurlijk even gezocht maar ik kan nergens vinden hoe ik via Excel VBA een autoincrement veld kan vullen.
Heeft iemand hier een antwoord op?


EDIT: oplossing gevonden!

Query moet worden:
Code:
"INSERT INTO A ([Y]) VALUES ('" & Name & "'); "
 
Laatst bewerkt:
Ik heb natuurlijk even gezocht maar ik kan nergens vinden hoe ik via Excel VBA een autoincrement veld kan vullen.
Mooi dat je de oplossing zelf gevonden heb (zelf zou ik het anders doen, maar goed) maar dat je een AutoIncrement veld kan vullen is natuurlijk onzin, dat veld vult zichzelf :). Anders was het geen Autonummer veld.
 
Tja ik vond het ook een beetje raar... ik ging er ook vanuit dat deze zichzelf zou vullen.

Wat was jouw oplossing hiervoor?
Als er een gemakkelijker alternatief bestaat is dat natuurlijk altijd welkom!
 
Nou, de makkelijkste oplossing is natuurlijk om Excel terug te geven aan de kleuterklas en alles in Access te doen :). Ik heb nog nooit iets hoeven te maken in Exel als portal voor Access. Maar op zich werkt jouw methode natuurlijk wel goed verder, al zou ik geen quootjes gebruiken, veel te riskant. Krijg je zoiets:
Code:
Sub ExportDataToAccess()
Dim cn As Object
Dim strQuery As String
Dim myDB As String
Dim i As Integer
Const sVelden As String = "State, City, Representative, Sales, [State Total], [E-mail]"

    myDB = "E:\OneDrive\HelpMij\tderksen\Magazijn Voorbeeld\Magazijn Voorbeeld.accdb"
    Set cn = CreateObject("ADODB.Connection")
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = myDB
        .Open
    End With
    For i = 2 To 37
On Error GoTo Hell
        strQuery = "INSERT INTO A (" & sVelden & ") " _
            & "VALUES (" _
            & """" & Cells(i, 1) & """, " _
            & """" & Cells(i, 2) & """, " _
            & """" & Cells(i, 3) & """, " _
            & IIf(Cells(i, 4) = "", 0, Cells(i, 4)) & ", " _
            & IIf(Cells(i, 5) = "", 0, Cells(i, 5)) & ", " _
            & """" & Cells(i, 6) & """)"
        cn.Execute strQuery, dbFailOnError
    Next i
    
Hell:
    cn.Close
    Set cn = Nothing
End Sub
 
Is ook een mooie uitwerking idd.
Ik hou het voor nu op de door mij gevonden uitwerking (Ik heb het al uitgewerkt en zeker geen zin om alles aan te passen naar een ander werkend alternatief :p)

Maar jouw error handler is zeker leuk gevonden :D

en betreft het Excel portal naar access... Ik heb al eerder allerlei handigheidjes gemaakt in Excel om mijn leven (en dat van collega's) gemakkelijker te maken. Deze database is een toevoeging daarop. Ik had gewoon niet zo veel in om al die 'handigheidjes' opnieuw te maken. en weer een uitleg te geven aan collega's :p

(en daarbij vind ik het rommelen met Excel, Access en macro's stiekem wel leuk :eek: )
 
Laatst bewerkt:
Zou zoiets dan niet ook kunnen ?

Code:
Sub M_snb()
    sn = Sheet1.Cells(1).CurrentRegion.Resize(, 6)
    c00 = "INSERT INTO tabel1 (lidnummer, naam, adres, postcode, plaats, email) Values ("""

    With CreateObject("ADODB.Connection")
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "G:\access\fiets.accdb"
        .Open
         For j = 2 To 37
            .Execute Replace(c00 & Join(Application.Index(sn, j), """,""") & """)", """""", 0)
        Next
    End With
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan