Hallo,
ich habe zwar nicht viel Ahnung von Access, aber natürlich kannst du
von Excel auf Access zugreifen:
1. Verweis auf die Access-Objektbibliothek setzen (in der VBA-IDE
Menü "Extras-Verweise..."). Dazu muss natürlich Access auf dem
Zielrechner installiert sein.
2. In einem allgemeinen Modul Objektvariable erstellen:
Public accApp As Access.Application
3. Die Objektvariable mit Access verbinden:
On Error Resume Next
' versuchen, existierende Access-Instanz zu finden
Set accApp = GetObject(, "Access.Application")
' Komma hinter der öffnenden Klammer nicht vergessen!
On Error GoTo 0
If accApp Is Nothing Then
' keine Access-Instanz aktiv - neue erstellen
Set accApp = CreateObject("Access.Application")
End If
Ggf. musst du die Instanz noch sichtbar machen, falls
Access so eine Eigenschaft hat:
accApp.Visible = True
Mit der Objektvariablen kannst du auf alle Objekte, Methoden
oder Eigenschaften von Access zugreifen nach dem Schema
accApp.(Name der Eigenschaft etc.)
(natürlich ohne Klammern)
Du kannst auch weitere untergeordnete Objekte erstellen:
Dim (Objektvariable) As Access.(Objektname)
Set (Objektvariable) = accApp.(Objektname)
Allerdings erkennt VBA laut M$ trotz Verweis nicht alle Access-
Objekte, so dass du sie ggf. einfach als Object deklarieren musst.
Was die Rechnungsnummer betrifft, natürlich kannst du die letzte
Nummer aus der gerade nicht benutzten Excel-Mappe auslesen, z. B.
etwa so:
Dim wkbA As Workbook, wkbB As Workbook
Dim strDateiname As String
Dim lngRechnungsnummer As Long
Dim lngTemp1 As Long, lngTemp2 As Long
Dim blnWkbOpen As Boolean
If ThisWorkbook.Name = "Datei1.xls" Then
strDateiname = "Datei2.xls"
Else
strDateiname = "Datei1.xls"
End If
' Prüfen, ob die andere Datei geöffnet ist
For Each wkbA In Application.Workbooks
If wkbA.Name = strDateiname Then
blnWkbOpen = True
Exit For
End If
Next wkbA
Application.ScreenUpdating = False
If blnWkbOpen = True Then
Set wkbB = wkbA
Else
' die andere Mappe sollte im gleichen Ordner stehen wie diese
Set wkbB = Workbooks.Open(ThisWorkbook.Path & _
Application.PathSeparator & strDateiname)
End If
' letzte Nummer in der aktuellen Mappe suchen
' es wird angenommen, dass sie in Tabelle 1 Spalte A steht
With ThisWorkbook.Worksheets("Tabelle1")
lngTemp1 = .Cells(.Cells(65536, 1).End(xlUp).Row, 1).Value
End With
' das Gleiche in der anderen Mappe
With wkbB.Worksheets("Tabelle1")
lngTemp2 = .Cells(.Cells(65536, 1).End(xlUp).Row, 1).Value
End With
If lngTemp1 > lngTemp2 Then
lngRechnungsnummer = lngTemp1 + 1
Else
lngRechnungsnummer = lngTemp2 + 1
End If
' ggf. andere Mappe wieder schließen
If blnWkbOpen = False Then
wkbB.Close False
End If
Application.ScreenUpdating = True
Set wkbA = Nothing
Set wkbB = Nothing
Ggf. könnte man die Nummer auch auslesen, ohne die andere Mappe
überhaupt zu öffnen (mit ADO oder DAO), aber das wäre noch mehr
Aufwand. Es wäre also auch zu prüfen, ob es einfacher ist, beide
Mappen zusammenzuführen.
Gruß
|