Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: dobby110 am August 02, 2016, 11:47:52

Titel: Hilfe bei VBA-Code in Access
Beitrag von: dobby110 am August 02, 2016, 11:47:52
Hallo zusammen,

kann mir jemand mit meinem Code weiterhelfen?


Declare Function apiCopyFile Lib "kernel32" Alias "CopyFileA" _
(ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long

Public Function FondsStammdatenKopie()
   
Dim Result As Long
Result = apiCopyFile("J:\CC\Stammdaten\Stammdaten.xlsx", "J:\CC27\Stammdaten_BackUp.xlsx", False)


Workbooks.Open FileName:= _
        "J:\CC27\Stammdaten_BackUp.xlsx" _
        , UpdateLinks:=0

  Sheets("Fondsstamm_incl_liq_Tranchen").Select
  Cells.Select
  Selection.NumberFormat = "@"
  ActiveWorkbook.Close


End Function



Was ich gerne hätte:
Nachdem die BackUp Datei erstellt wurde, soll das Excel geöffnet werden und die Inhalte von einem bestimmten Reiter als Text formatiert werden.
In der Original-Datei sind die einzelnen Spalten nämlich unterschiedlich formatiert.

Sollte doch möglich sein, oder?





Titel: Re: Hilfe bei VBA-Code in Access
Beitrag von: PhilS am August 02, 2016, 12:21:28
Das sollte in der Tat möglich sein. - Was ist dein Problem dabei?
Titel: Re: Hilfe bei VBA-Code in Access
Beitrag von: dobby110 am August 02, 2016, 12:22:50
Der Code hängt sich an dieser Stelle auf:


Sheets("Fondsstamm_incl_liq_Tranchen").Select
Titel: Re: Hilfe bei VBA-Code in Access
Beitrag von: MaggieMay am August 02, 2016, 12:41:33
Hi,

wenn du Excel aus Access heraus fernsteuern willst, so brauchst du ein Application-Objekt.
Du kannst die Excel-Objekte und Methoden etc. nicht unmittelbar ansprechen.

Beispiel:Public Function FondsStammdatenKopie()
    Dim xlApp As Object   
    Dim Result As Long
    Result = apiCopyFile("J:\CC\Stammdaten\Stammdaten.xlsx", "J:\CC27\Stammdaten_BackUp.xlsx", False)
    Set xlApp = CreateObject("Excel.Application")
    With xlApp.Workbooks.Open FileName:= "J:\CC27\Stammdaten_BackUp.xlsx", UpdateLinks:=0
        .Sheets("Fondsstamm_incl_liq_Tranchen").Cells.NumberFormat = "@"
        .ActiveWorkbook.Close
    End With
    Set xlApp = Nothing
End Function

Die "Cells" müssten evtl. noch näher bestimmt werden.
Titel: Re: Hilfe bei VBA-Code in Access
Beitrag von: dobby110 am August 02, 2016, 12:55:10
Vielen Dank.
Ich kann die Codes zwar ein wenig lesen, aber mit selbst schreiben ist leider nicht viel.

In dem genannten Code bekomme ich an dieser Stelle einen Fehler:


With xlApp.Workbooks.Open FileName:= "J:\CC_27.....


Die ganze Zeile wird im VBA Editor rot angezeigt?

Fehler beim Kompilieren: Erwartet: Anweisungsende

Er hat wohl ein Problem an der Stelle "FileName"
Titel: Re: Hilfe bei VBA-Code in Access
Beitrag von: MaggieMay am August 02, 2016, 13:09:01
Ok, ich hatte den Code auf die Schnelle zusammengeschustert, in der Hoffnung, dass du mit dem Ansatz weiterarbeiten könntest.
Machen wir es also noch einmal ausführlicher:
Public Function FondsStammdatenKopie()
    Dim xlApp As Object
    Dim xlWkb As Object   
    Dim Result As Long
    Result = apiCopyFile("J:\CC\Stammdaten\Stammdaten.xlsx", "J:\CC27\Stammdaten_BackUp.xlsx", False)
    Set xlApp = CreateObject("Excel.Application")
    Set xlWkb = xlApp.Workbooks.Open FileName:= "J:\CC27\Stammdaten_BackUp.xlsx", UpdateLinks:=0
    With xlWkb
        .Sheets("Fondsstamm_incl_liq_Tranchen").Cells.NumberFormat = "@"
        .Close
    End With
    Set xlApp = Nothing
End Function

(weiterhin ungetestet)

Und wenn du schon den Rückgabewert der API-Funktion empfängst, solltest du ihn auch auswerten:
Result = apiCopyFile("J:\CC\Stammdaten\Stammdaten.xlsx", "J:\CC27\Stammdaten_BackUp.xlsx", False)
If Result = 0 Then
    MsgBox "Kopieraktion fehlgeschlagen!"
    Exit Function
End If