Excel-VBA in Access-VBA konvertieren

  • Access

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel-VBA in Access-VBA konvertieren

    Hallo, ich habe folgendes Problem (Excel /Access 97):
    Es besteht eine Access-Datenbank mit mehreren Tabellen aus denen jeweils mehrere XSDs erzeugt werden sollen. Um das zu schaffen, hat man bisher die Tabellen händisch in eine Excel-Datei kopiert. Dort wurden dann bestimmt VBA-Makros ausgeführt, um daraus mehrere XSDs zu generieren.
    Die manuelle und umständliche Excel-Komponente soll nun aber möglichst eliminiert werden, so dass die XSDs direkt aus Access erzeugt werden können. Ein einfaches Exportieren funktioniert nicht, da aus EINER Tabelle MEHRERE XSDs erzeugt werden müssen, was eben über die erwähnten Makros erfolgt.
    Hier mal ein Code-Auszug:

    Visual Basic-Quellcode

    1. '------------------------
    2. '--Variablendeklaration--
    3. '------------------------
    4. Dim dateiname As String 'speichert Namen des Arbeitsblattes
    5. Dim verzeichnis As String 'speichert Verzeichnisangabe
    6. Dim ordner As String 'speichert Ordnerangabe innerhalb des Verzeichnisses
    7. Dim cf As Object
    8. Dim i As Integer 'innere Schleife
    9. Dim e As Integer 'äußere Schleife
    10. Dim anfang As Integer 'speichert Spaltennummer des ersten Service
    11. Dim ende As Integer 'speichert Spaltennummer des letzten Service
    12. Dim count As Integer 'speichert Anzahl der Arbeitsblätter
    13. Dim prgmAbbruch As Boolean
    14. Dim last_service As Boolean
    15. prgmAbbruch = False
    16. '---------------------
    17. '--Verzeichnisangabe--
    18. '---------------------
    19. verzeichnis = "U:\XSD-Dateien\"
    20. ordner = "U:\XSD-Dateien\DB2-Ladebestand\"
    21. Set cf = CreateObject("Scripting.FileSystemObject")
    22. If (cf.FolderExists(verzeichnis) = False) Then
    23. cf.CreateFolder (verzeichnis)
    24. End If
    25. If (cf.FolderExists(ordner) = False) Then
    26. cf.CreateFolder (ordner)
    27. End If
    28. '------------------------
    29. '--Programm-Anweisungen--
    30. '------------------------
    31. count = ActiveWorkbook.Worksheets.count 'Alle Arbeitsblätter des Workbooks zählen
    32. 'Alle Arbeitsblätter durchlaufen vom ersten bis zum vorher festgelegten letzten
    33. For e = 1 To count
    34. i = 1
    35. last_service = False
    36. 'Der Name des aktuellen Arbeitsblattes wird in Variable "Name" gespeichert
    37. Worksheets(e).Activate
    38. dateiname = ActiveSheet.name
    39. 'Ausgabeordner für die einzelnen Arbeitsblätter werden erstellt, wenn sie noch nicht existieren
    40. If (cf.FolderExists(ordner + dateiname) = False) Then
    41. cf.CreateFolder (ordner + dateiname)
    42. End If
    43. 'Schleife wird solange durchlaufen bis Booleanvariable "count" auf true gesetzt wird (letzter Service erreicht)
    44. Do
    45. If (Cells(2, i) = "BOS") Then
    46. anfang = i 'Spaltennummer des ersten Service wird in Variable "anfang" gespeichert
    47. ElseIf (Cells(2, i) = "BOS/EOS") Then
    48. anfang = i
    49. ende = i
    50. last_service = True
    51. ElseIf (Cells(2, i) = "EOS") Then
    52. ende = i 'Spaltennummer des letzten Service wird in Variable "ende" gespeichert
    53. last_service = True
    54. End If
    55. i = i + 1
    56. Loop While (last_service = False)
    57. 'Von "anfang" bis "ende" wird die aktuelle Spaltennummer und der Name des aktuellen Ordners an das Unterprogramm "Auslesen" übergeben
    58. For i = anfang To ende
    59. Call Auslesen(i, dateiname, ordner, anfang, prgmAbbruch)
    60. If prgmAbbruch = True Then
    61. Exit For
    62. End If
    63. Next i
    64. If prgmAbbruch = True Then
    65. Exit For
    66. End If
    67. Next e
    68. End Sub





    Nun zu meiner Frage: Weiß jemand wie man den Code in Access zum laufen bekommt bzw. ob das überhaupt geht? Wie gesagt Excel sollte dabei möglichst nicht mehr verwendet werden, sondern direkt alles aus Access heraus.
    Excel VBA und Access-VBA ist syntaktisch exakt gleich.
    Der Unterschied besteht im dahinterliegenden Objektmodell.

    In Access hast du keine Excel-Objekte wie Worksheet, Range und Cells
    Und da liegt dein Problem.

    Du sprichst in deinem Programm die Zellen eines Worksheets an.
    In Access gibt es keine Worksheet-Zellen.

    Eine Tabelle in Access hat weder Spaltennummern noch Zeilennummern, sondern Records und namentlich benannte Spalten.
    Die kannst du z.B. in ein Recordset lesen.

    Wenn du das Feld eindeutig beschreiben kannst, lässt sich auch recht einfach die Funktion DLookup verwenden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()