online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Hans_83 vom 23.07.2022, 17:11 Options

Lösung

Einzelne Daten aus Excelsheet in ein Access-Formular übernehmen

Hallo zusammen,

mein Problem: Ich habe eine Datenbank um Kundendaten zu verwalten. In den jeweiligen Datensatz (Kunde) sollen jährich nur einzelne Werte aus der zum Kunden gehörenden Excel-Tabelle übernommen werden. Die Mappe ist standardisiert.

Ich hab eine Routine mit GetObject, die mir per Click die entsprechende Arbeitsmappe öffnet, aber nun komm ich nicht weiter. Wie komme ich in der geöffneten Mappe in das entsprechende Arbeitsblatt und die richtige Zelle, um den Wert auszulesen und an eine Variable zu übergeben?

By the way,warum meldet mein Access einen Fehler, wenn ich z.B. eine Objektvariable definieren will: Dim objExcel As excel.Application,auch bei excel.workbookund excel.worksheet (Access 2002 SP3)?

Hier bitte ich um euere Hilfe. Kennt jemand eine Fundstelle mit Beispielcode?
Grüße
Hans


Antwort schreiben

Antwort 1 von Paul1 vom 24.07.2022, 07:46 Options

Hallo!

Die von Dir angeführte Routine kenne ich leider nicht.
Aber als Alternative würde ich vorschlagen, öffne die Tabelle in Acces und die Excel-Arbeitsmappe und das dementsprechende Tabellenblatt, kopiere die einzufügende Zelle in Excel und füge den Inhalt in das betreffende Feld in der Tabelle ein.
Das einzige worauf zu achten ist, dass der Felddatentyp mit den Dateien übereinstimmt.

mfg.

Paul1

Antwort 2 von Hans_83 vom 24.07.2022, 18:11 Options

Hallo Paul,

daran werde nicht ich arbeiten, sondern Mitarbeiterinnen eines Schreibbüros. Die Tabelle wird gar nicht sichtbar sein, sondern nur ein Formular.

Wenn ich schon per Code die Excelmappe aufmachen kann, werd ich doch, so Bill Gates es will, fünf Daten auslesen und in Access wieder einlesen können, das muss doch machbar sein ...

Ich probiers mal weiter, trotzdem DANKE

Viele Grüße
Hans

Antwort 3 von Paul1 vom 25.07.2022, 20:08 Options

Hallo Hans!

In Excel und Acces arbeite ich derzeit noch mit den Standardfunktionen (die ich natürlich auch nicht alle kenne), jedoch logische Abläufe interessieren mich besonders, obwohl mich spezielle Bezeichnungen die ich noch nie gehört habe wie z.B.GetObjekt etc. etwas verunsichern.

Erst vor einiger Zeit habe ich begonnen mich für VBA zu interessieren und bin froh, dass es mir mittlerweile gelingt, ein Makro in Excel funktionsfähig einzufügen (erklärt von Karin hier im Forum).

Dass die von mir angeführte Alternative für Deine angestrebte Lösung unbrauchbar ist, kann ich verstehen.

Nicht zuletzt um auch selbst was dazu zu lernen, habe ich ein wenig im Internet recherchiert und 2 Links gefunden, die Dir eventuell weiterhelfen könnten:

Microsoft 1

Microsoft 2

Sollte es Dir nichts bringen, betrachte es als Fleißaufgabe von mir

mfg.

Paul1

Antwort 4 von Marie vom 26.07.2022, 03:35 OptionsLösung

Lösung
Zitat:
By the way,warum meldet mein Access einen Fehler, wenn ich z.B. eine Objektvariable definieren will: Dim objExcel As excel.Application,auch bei excel.workbookund excel.worksheet (Access 2002 SP3)?


Vermutlich hast Du keinen Verweis gesetzt. Der Verweis für Excel muss so lauten:

Microsoft Excel xx.0 Object Library

Das xx bezeichnet die Officeversion, wobei 9 für Office 2000 bis 12 für Office 2007 gilt.

@Hans: er will doch die Daten importieren, wenn ich das richtig verstanden habe?

Zitat:
Wie komme ich in der geöffneten Mappe in das entsprechende Arbeitsblatt und die richtige Zelle, um den Wert auszulesen und an eine Variable zu übergeben?
Das können wir Dir aber jetzt auch nicht beantworten, wenn Du nicht etwas genauer erklärst wo die Daten stehen und woran man sich orientieren kann. Musst Du ganze Spalten importieren? dann erstellst Du eine Importspezifikation, die importiert Dir exakt die Daten, die Du möchtest. Heißt die Mappe immer gleich? Also ein wenig genauer musst Du schon sagen woran man sich orientieren kann.

Gruß marie

Antwort 5 von Hans_83 vom 26.07.2022, 20:17 Options

Hallo Marie, hallo Paul,

@Paul: danke für deine Fleißaufgabe! Den in M2 angegebenen Code sub getexcel hab ich meiner db in etwas veränderter Form eingesetzt, um die zum Datensatz gehörende Excel-Mappe zu öffnen, funktioniert auch.

@Marie: pro Datensatz Kunde in der db existiert immer eine Excel-Arbeitsmappe mit entsprechendem Dateinamen (ca. 90 Arbeitsblätter). Jede Mappe ist exakt gleich und gestattet die buchhalterische Verwaltung des Kunden für 9 Jahre, wobei die 'Lebensdauer' der Mappe + db-datensatz für jeden Kunden individuell ist.
Jährlich müssen nun standardisierte Berichte verfasst werden, in denen u.a. einzelne Excel-Daten des Kunden an eine weitere Instanz berichtet werden. Diese Berichte erstelle ich über die db, da viele weitere Daten aus der db notwendig sind.
Mein Problem war, nach dem Öffnen der Excel-Datei mit getExcel (s.o.) in das richtige Jahresblatt zu kommen und aus einigen Zellen die Daten auszulesen und in ein db-Formular wieder einzutragen. Die in div. Foren, Büchern usw. angegebenen Beispiele waren meist in Richtung Ac --> Ex, oder haben bei mir Fehler angezeigt. Mein Access-VBA-Wissen ist eher oberflächlich, und für derartige Problemstellungen muss ich mich erst langsam herantasten und viel ausprobieren. Nach drei Tagen mit try and error hab ich's aber endlich geschafft - danke übrigens für den Verweis-Tipp!!! Das sind so Sachen, die mir halt nicht automatisch einfallen.
Mein Code lautet nun:


Option Compare Database

Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
                    ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                    ByVal wParam As Long, _
                    ByVal lParam As Long) As Long


Sub GetExcel()
   
    Dim XLApp As Object
    Dim ExcelLiefNicht As Boolean
    Dim Jahr_Blatt As String
    Dim Blatt1, Blatt2 As Integer
    
    Verz = Forms!ZV_Haupt1!ZV_Haupt_UF_Daten.Form!ZV_Speicherort
    Dat_Name = Forms!ZV_Haupt1!ZV_Haupt_UF_Daten.Form!ZV_Bez_Excel
    datei = Verz & Dat_Name
    Jahr_Blatt = InputBox("Dieser Bericht entspricht" & Chr$(13) & _
                        "in der Buchhaltung dem Jahr (Ziffer 1 - 7) oder" & Chr$(13) & _
                        "der 1. Schlussabrechnung (= S1)," & Chr$(13) & _
                        "der 2. Schlussabrechnung (= S2)?", "Datenübernahme aus der Buchhaltung")
    
    Select Case Jahr_Blatt 'hier lege ich das Arbeitsblatt nach Jahr fest
    Case 1
        Blatt1 = 12
        Blatt2 = 13
    Case 2
        Blatt1 = 19
        Blatt2 = 20
    Case 3
        Blatt1 = 26
        Blatt2 = 27
    Case 4
        Blatt1 = 33
        Blatt2 = 34
    Case 5
        Blatt1 = 40
        Blatt2 = 41
    Case 6
        Blatt1 = 47
        Blatt2 = 48
    Case 7
        Blatt1 = 54
        Blatt2 = 55
    Case "S1"
        Blatt1 = 65
        Blatt2 = 66
    Case "S2"
        Blatt1 = 70
        Blatt2 = 71
    
    Case Else
        msg = MsgBox("Es sind nur Werte von 1 bis 7 sowie S1, S2 zulässig!", vbCritical, "Fehler")
    End Select
    

On Error Resume Next
    Set XLApp = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelLiefNicht = True
    Err.Clear

    DetectExcel

    Set XLApp = GetObject(datei)

    XLApp.Application.Visible = True
    XLApp.Parent.Windows(1).Visible = True

' Dateiverarbeitung.
betrag_lfd_ausgaben = XLApp.sheets(Blatt1).Cells(10, 9).Value
       Forms!ZV_Haupt1!ZV_Abrechnungen_UF.Form!A_Lfd_Ausgaben = betrag_lfd_ausgaben
' der Länge wegen gekürzt        
    
    
    If ExcelLiefNicht = True Then
        XLApp.Application.Quit
        Else
        XLApp.Parent.Windows(1).Visible = False
        XLApp.Application.Visible = False
    End If

    Set XLApp = Nothing    ' Verweis auf Anwendung und Tabelle freigeben.
End Sub

Sub DetectExcel()
    Const WM_USER = 1024
    Dim hWnd As Long
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then
        Exit Sub
    Else
        SendMessage hWnd, WM_USER + 18, 0, 0
    End If
End Sub


Was ich lange nicht gefunden hab war das:
XLApp.sheets(Blatt1).Cells(10, 9).Value - hier hab ich anfangs zu kompliziert gedacht und ge-DIM-t und ge-SET-tet wie wahnsinnig.

Nun jetzt hab ich's! Danke für eure Mühe und eure Zeit!
Viele Grüße
Hans

Ähnliche Themen

mehrere daten aus tabelle in formular access
Meckenheimer  27.01.2009 - 202 Hits - 6 Antworten

Daten aus ComboBox übernehmen
Hexadecimal  05.04.2009 - 228 Hits - 4 Antworten

Einzelne Angaben aus Access in Excel einbetten
steeh  11.05.2009 - 601 Hits - 14 Antworten

Access: Formular in ein bestehendes Formular einbinden
ArthurAccess  30.09.2009 - 513 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026