Fout 3251 ¿?

Status
Niet open voor verdere reacties.

Snabugje

Gebruiker
Lid geworden
7 nov 2008
Berichten
49
Hallo beste VBA experts,

M'n tweede vraag alweer vandaag, erg hoor :rolleyes:
Maar terzake.

Ik heb een vba code gemaakt binnen excel om gegevens te importeren vanuit access. Dit allemaal zou wel goed moeten gaan, maar omdat ik specefieke gegevens uit één tabel wil hebben moet ik een filter maken.
Nu geeft vba steeds een foutmelding weer:

Fout 3251 tijdens uitvoering:
de bewerking is niet geschikt voor dit type object.


dit is de code:

Code:
Sub Import_Access()
    Dim a As Integer
    Dim b As Integer
    Dim db As DAO.Database
    Dim einde As Date
    Dim filter As String
    Dim jaar As String
    Dim maand As String
    Dim maandnmr As Integer
    Dim rst As DAO.Recordset
    Dim rstf As DAO.Recordset
    Dim sht As Worksheet
    Dim start As Date
    Dim str As String

    b = 1

[COLOR="green"]'controleren of 'maand' en 'jaar' zijn ingevuld[/COLOR]
    If Range("F12") = Empty Or Range("F14") = Empty Then
        MsgBox "Vul eerst 'Jaar' en 'Maand' in s.v.p.", vbInformation, "Let Op!"
        Exit Sub
    End If
    
    jaar = Range("F12")
    maandnmr = Range("G9")
    maand = Range("F14")
    
[COLOR="green"]'controleren of er al een tabblad bestaat met deze datum[/COLOR]
    For Each sht In Excel.Sheets
        Debug.Print Excel.Sheets(b).Name
        If Excel.Sheets(b).Name = maand & " " & jaar Then
            MsgBox "U heeft al een rapport van " & maand & " " & jaar, vbInformation, "Let Op!"
            Exit Sub
        End If
        b = b + 1
    Next
        
[COLOR="green"]'nieuw tabblad aanmaken[/COLOR]
    b = Excel.Worksheets.Count
    Excel.Sheets.Add , Excel.Sheets(b)
    Excel.Sheets(b + 1).Name = maand & " " & jaar
[COLOR="green"]'naam voor dropdownmenu aanmaken[/COLOR]
    ThisWorkbook.Sheets("dropdown").Activate
    Range("A1").Select
    If Selection = Empty Then
        Selection.Value = maand & " " & jaar
    ElseIf Range("A2") = Empty Then
        Range("A2").Value = maand & " " & jaar
    Else
        Range("A1").Select
        b = Range(Selection, Selection.End(xlDown)).Count
        Range("A" & CStr(b + 1)).Value = maand & " " & jaar
    End If
    
    Set db = DBEngine.Workspaces(0).OpenDatabase("Z:\2008\project administratie\Gce Administratie V4_be.accdb")
    Set rstf = db.OpenRecordset("ExportTabel-Maandrapp")
[COLOR="green"]'filter maken voor recordset[/COLOR]
    start = DateSerial(jaar, maandnmr, 1)
    einde = DateSerial(jaar, maandnmr + 1, 0)
    filter = BuildCriteria("datum", dbDate, ">=" & start & " and <=" & einde)
    
    rstf.filter = filter       [COLOR="green"]'<---- hier krijg ik: Fout 3251 tijdens uitvoering[/COLOR]
    Set rst = rstf.OpenRecordset                  [COLOR="green"]  'De bewerking is niet geschikt voor dit type object[/COLOR]    
    b = 1

[COLOR="green"]'aantal records tellen voor export[/COLOR]
    With rst
        .MoveLast
        .MoveFirst
        a = .RecordCount
    End With
    
[COLOR="green"]'bij geen records procedure beëindigen[/COLOR]
    If a < 1 Then
        MsgBox "Geen gegevens gevonden van " & maand & " " & jaar, vbCritical, "Fail"
        Exit Sub
    End If

[COLOR="green"]'gegevens uit recordset plaatsen in laatst gemaakte tabblad[/COLOR]
    ThisWorkbook.Sheets(maand & " " & jaar).Activate
    With ActiveSheet
    For a = 1 To 10     'er worden maar 10 records geplaatst als test
        .Range("A" & CStr(b)) = rst!ordernummer
        .Range("B" & CStr(b)) = rst!uren
        .Range("C" & CStr(b)) = rst!minuten
        If Not IsNull(rst![uren bewerkt]) Then
            .Range("D" & CStr(b)) = rst![uren bewerkt]
        Else
            .Range("D" & CStr(b)) = 0
        End If
        If Not IsNull(rst![uren bewerkt]) Then
            .Range("E" & CStr(b)) = rst![minuten bewerkt]
        Else
            .Range("E" & CStr(b)) = 0
        End If
        rst.MoveNext
        b = b + 1
    Next a
    End With
        
End Sub

Kan iemand mij vertellen wat ik fout heb gedaan??
Waar het fout gaat heb ik een opmerking gegeven met een pijl.

Alvast bedankt!!
Snabugje
 
Ik gebruik trouwens de volgende verwijzingen in VBA:

- Visual Basics For Applications
- Microsoft Excel 12.0 Object Library
- OLE Automation
- Microsoft office 12.0 Object Library
- Microsoft Access 12.0 Object Library
- Microsoft office 12.0 Access database engine
- Microsoft scripting Runtime
- Microsoft Forms 2.0 Object Library
- Ref Edit Control
- Microsoft Data Access Components Installed Version
 
Wat jij maakt is al ingebakken in Excel: Menubalk/data/externe gegevens/databasequery
 
Hallo snb,

Bedankt voor je reactie :)
In excel heb ik de query wizard gevonden, alleen snap ik er niet echt veel van :(

Kan/wil je mij misschien uitleggen hoe dat werkt?
Ik ben zover gekomen tot het filteren. Nu wil ik de datum filteren op eerder ingevulde gegevens. En dat lukt mij niet.

Snabugje
 
Hallo beste vba experts,

Ik zit nog steeds met een vraag :(
Hoe werkt de query wizard van excel? of hoe kan ik mijn eerder toegevoegde code verbeteren?? (zie eerste bericht)

alvast bedankt

snabugje
 
Voer deze macro uit.

Code:
Sub invoeg()
  With Sheets(1).QueryTables.Add("ODBC;DSN=MS Access-database;DBQ=Z:\2008\project administratie\Gce Administratie V4_be.accdb;DefaultDir=Z:\2008;", Range("A1"))
    .CommandText = "SELECT *  FROM `Z:\2008\project administratie\Gce Administratie V4_be`.ExportTabel-Maandrapp"
    .Refresh False
  End With
End Sub
De macro legt een koppeling in cel A1 van werkblad 1 naar de tabel
ExportTabel-Maandrapp van het bestand Z:\2008\project administratie\Gce Administratie V4_be.accdb en leest de gegevens uit de tabel in in het werkblad.
 
Hallo snb,

Ik heb je code geprobeerd in excel maar krijg steeds een foutmelding;

Fout 1004 tijdens uitvoering:

Er is een algemene ODBC-fout opgetreden


Kan dat zijn omdat ik office 2007 gebruik? of ligt het gewoon aan mij:p
Zelf heb ik ook nog geprobeerd een ander map te kiezen voor dan de Z schijf. Maar dat werkt ook niet.

Als alternatief heb ik in m'n code een IF - functie gezet. Alleen worden dan 3000 records uit access nagekeken. Dat duurt véééééél langer dan een recordset filteren. (zoals ik met access gewend ben)


Snabugje
 
Hallo snb,

Ik heb het gevonden :D
Heb net beide codes nagekeken en zag bij mijn code (precies waar het fout gaat, hoe wonderbaarlijk:p) een fout zitten.

was vergeten van de recordset een opendynaset te maken :S

zo was het:
Code:
Set rstf = db.OpenRecordset("ExportTabel-Maandrapp)
en zo moet het zijn:
Code:
Set rstf = db.OpenRecordset("ExportTabel-Maandrapp", dbOpenDynaset)

Bedankt voor je hulp!!:thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan