2016-09-07 10 views
1

Ich habe einen VBA Code, der die gefilterten Abfragedaten nach Excel exportieren soll. Wenn ich den Code über eine OnClick-Schaltfläche aktiviere, erhalte ich den Fehler: Method pastespecial of worksheet class failed.Zugriff auf VBA: Methode pasespecial der Arbeitsblattklasse fehlgeschlagen

I Zugang 2013 auf einem Windows Server 2012 r2 Maschine am Laufen.

Der VBA-Code:

Private Sub cbExport_Click() 

    On Error GoTo Command13_Click_Err 

    DoCmd.RunCommand acCmdSelectAllRecords 
    DoCmd.RunCommand acCmdCopy 

    Dim xlapp As Excel.Application 
    Set xlapp = CreateObject("Excel.Application") 

    With xlapp 
     .Workbooks.Add 
     .ActiveSheet.PasteSpecial Format:="Text", _ 
            Link:=False, _ 
            DisplayAsIcon:= False 

     .Cells.Select 
     .Cells.EntireColumn.AutoFit 
     .Visible = True 
     .Range("A1").Select 

    End With 

    Command13_Click_Exit: 
    Exit Sub 

    Command13_Click_Err: 
    MsgBox Error$ 
    Resume Command13_Click_Exit 

End Sub 

Bild der Benutzeroberfläche:

Jemand eine Idee?

+0

Sorry, kann das Bild nicht sehen - " Diese Seite ist nicht erreichbar ". Ihre '.Cells.' und' .Range' verweisen auf die Excel-Anwendung und nicht auf ein Arbeitsblatt, sodass sie einen Fehler verursachen. Nicht sicher über die PasteSpecial - Ich bin es gewohnt, es in diesem Format zu sehen: 'Paste: = xlPasteValues, Operation: = xlNone, SkipBlanks: = False, Transpose: = False' –

+0

Ich denke, es ist das Format Bit, auch ein Bereich wo um es vielleicht auszudrücken, habe ich versucht mit 'ActiveSheet.Range (" a1 ") .PasteSpecial xlPasteValues' und gut, warum verwenden Sie nicht stattdessen CopyFromRecordset? –

Antwort

1

Paar Dinge falsch:

  • Sie scheinen zu haben, die frühe Bindung zu dimensionieren, die xlApp Variable verwendet, aber dann verwenden die späte Bindung diese Variable zu initialisieren.

  • Die Methode .PasteSpecial() sollte für ein Bereichsobjekt und kein Blattobjekt verwendet werden.

  • Sie scheinen die falschen Argumente für die Methode .PasteSpecial zu verwenden.

  • Die Paste-Methode sollte stattdessen


Versuchen Sie diesen Code ein numerischer Wert, ein Teil der xlPasteType Aufzählung sein:

DoCmd.RunCommand acCmdSelectAllRecords 
DoCmd.RunCommand acCmdCopy 

Dim xlApp As Excel.Application 
Set xlApp = New Excel.Application 

xlApp.Workbooks.Add 
xlApp.Visible = True 

With xlApp.ActiveWorkbook.ActiveSheet 
    .Cells.PasteSpecial XlPasteType.xlPasteValues 
    .Cells.EntireColumn.AutoFit 
End With 
+0

Danke das hat perfekt funktioniert, gibt es auch eine Möglichkeit, bestimmte Felder auszuschließen und ein Excel-Blatt zu öffnen? – user1797935

+0

Sie könnten dies anders herum tun, indem Sie ein Makro in Excel schreiben, das ADO verwendet, um Ihre Datenbank abzufragen, und dann die '.CopyFromRecordset()' Methode verwendet, aber es ist so weit fortgeschritten und unmöglich für mich ein Beispiel zu geben neben dir an deinem Computer! Ich würde vorschlagen, dies zu untersuchen, wenn Sie mit DBs viel arbeiten - es wird Ihr Leben eine Million Mal einfacher machen. –

Verwandte Themen