2016-04-07 11 views
2

Ich muss ein aktualisiertes VBA-Skript erstellen, das das Ergebnis aus einer Access 2010-Anfrage in eine vorhandene Excel-Datei nach dem aktuellen Inhalt überträgt.Transfer Access 2010-Ergebnistabelle nach vorhandenem Inhalt in Excel-Datei

Hier wird das vorherige Skript ist, das 97.

Private Sub CmdTransfert_Click() 
On Error GoTo Err_CmdTransfert_Click 

    Dim Requete As QueryTable 

    Dim appXL As Excel.Application 
    Dim Classeur As Excel.Workbook 
    Dim Cellule As Excel.Range 
    Dim Plage As Excel.Range 
    ' Bills that needs to be transfered 
    DoCmd.OpenQuery "Liste_factures_numero" 

    ' Select answers 
    SendKeys "^a", True 
    ' Copy 
    SendKeys "^c", True 


    ' Opening Excel 
    Set appXL = CreateObject("Excel.Application") 
    appXL.Visible = True 
    'Only XL 97 supports UserControl Property 
    On Error Resume Next 
    appXL.UserControl = True 

    Set Classeur = appXL.Workbooks.Open("C:\Users\me\Desktop\copiedetravailvlvaccdb\reglements.xlsx") 

    Set Cellule = Classeur.Worksheets(1).Cells(Classeur.Worksheets(1).Range("a1").CurrentRegion.Rows.Count + 1, 1) 
    Cellule.Select 

    ' Paste 
    SendKeys "^v", True 
    ' Cellule.PasteSpecial xlPasteValues 
    ' Deleting titles 
    Cellule.EntireRow.Delete 

    'Fixing date format 
    Set Plage = Selection 
    For Each Cellule In Plage 
     If Cellule.Column = 2 Then 
      If Cellule.Value <> "" Then 
       Cellule.Value = CDate(Cellule.Value) 
      End If 
     End If 
    Next 

    ' Mise au format normal 
    Range("A3:D3").Copy 
    Plage.PasteSpecial Paste:=xlFormats 
    Excel.Application.CutCopyMode = False 

    ' Closing request 
    DoCmd.Close acQuery, "Liste_factures_numero", acSaveNo 

Exit_CmdTransfert_Click: 
    Exit Sub 

Err_CmdTransfert_Click: 
    MsgBox Err.Description 
    Resume Exit_CmdTransfert_Click 

End Sub 

Ich habe versucht, mit Access gearbeitet haben, das Hinzufügen Schlaf Befehle um die Sendkeys Anweisung, es hat nicht funktioniert. Das Ergebnis wurde nicht ausgewählt, also nicht kopiert oder eingefügt.

Als letzten Ausweg habe ich versucht, ein neues Skript mit DoCmd.TransferSpreadsheet zu erstellen, aber ich kann nicht herausfinden, wie der neue Inhalt nach dem vorhandenen hinzugefügt wird.

DoCmd.TransferSpreadsheet acExport, , "Liste_factures_numero", "C:\Users\me\Desktop\copiedetravailvlvaccdb\reglements.xlsx", True 

Wie auch immer es überschreibt den Inhalt. Dies ist mein erstes Mal mit VBA.

Antwort

1

können Sie dies ändern:

DoCmd.OpenQuery "Liste_factures_numero" 

' Select answers 
SendKeys "^a", True 
' Copy 
SendKeys "^c", True 

Um dies zu:

DoCmd.OpenQuery "Liste_factures_numero" 
DoCmd.RunCommand acCmdSelectAllRecords 
DoCmd.RunCommand acCmdCopy 

Und:

' Paste 
SendKeys "^v", True 

Um dies:

Cellule.PasteSpecial Paste:=xlPasteValues 

Auch ich muss hinzufügen, dass es eine andere Art und Weise ist diese Kopie-Einfügen von Access zu Excel über Makros zu erreichen:

  1. Stellen Verbindungsdatei zuzugreifen;
  2. Ruft Daten aus Abfrage in Re-Cord-Set ab;
  3. Daten auf Excel-Tabelle einfügen;
  4. Verwenden Sie Formatierung auf eingefügten Zellen (Schriftart, Größe usw.).
+0

Danke, es funktioniert super! Problem gelöst :) – Relkco

+0

@Relkco Mein Vergnügen! :) – gofr1

1

So etwas wie dies, wechselnde Arbeitsblätter/Spalte A nach Bedarf:

Dim r As Range 
Set r = ThisWorkbook.Worksheets(1).Range("A1").End(xlDown).Offset(1, 0) 

DoCmd.TransferSpreadsheet acExport, , "Liste_factures_numero" _ 
    , ThisWorkbook.FullName & Chr(35) & "Sheet1", True, r.Address 
+0

Danke, es funktioniert auch super! – Relkco