Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
296to300
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Access-Daten in Excel-Listenfeld

Access-Daten in Excel-Listenfeld
20.08.2003 16:22:58
Todo
Hallo Zusammen!
Ich bin neu in Sachen VBA und habe deshalb eine Frage:
Innerhalb einer Excel Arbeitsmappe wird ein UserForm aufgerufen. In diesem UserForm sollen die Access-Daten in einem Listenfeld angezeigt und über Textfelder verwaltet werden können.
Bisher werden die Daten aus Access abgerufen und in einem Excel-Sheet zwischengespeichert. Die Daten aus diesem Excel-Sheet werden dann in der UserForm angezeigt.
Die Connection mittels ADO funktioniert hiefür und die Daten werden auch in der UserForm angezeigt. Allerdings soll jetzt nicht mehr ein Excel-Sheet zwischen drin hängen, sondern die Daten sollen direkt aus der Datenbank in die UserForm (Listenfeld) laufen.
Wäre super wenn mir jemand weiterhelfen könnte, weiß im Moment nämlich nicht weiter...!
Gruß
Todo

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Access-Daten in Excel-Listenfeld
20.08.2003 16:30:05
Ramses
Hallo,
zeig mal den Code mit dem du die Daten aus ACCESS abrufst,... dann brauchen wir das Rad nicht neu zu erfinden :-)
Gruss Rainer

AW: Access-Daten in Excel-Listenfeld
20.08.2003 17:14:29
Todo
Daten von Access in Excel-Sheet:
Sub DBVerbMA()
' Anbindung an eine Access Datenbank für Mitarbeiteranzeige
Dim dbverbindung As New Connection
Dim rs As New Recordset
Dim mitarb As Worksheet
Dim sql As String
Dim i As Integer
Dim dbname As String
Dim path As String

path = Application.ActiveWorkbook.path
dbname = "APPlan.mdb"
Set mitarb = ThisWorkbook.Worksheets(RegMitarb)

dbverbindung.Open _
"provider = microsoft.jet.oledb.4.0;" _
& "Data Source = " & path & "\" & dbname

sql = "SELECT Mitarbeiter, Kurzzeichen, Name FROM Mitarbeiter ORDER BY Mitarbeiter"

rs.Open sql, dbverbindung

While Not rs.EOF
i = i + 1
mitarb.[A2].Offset(i - 1, 0) = rs!Mitarbeiter
mitarb.[A2].Offset(i - 1, 1) = rs!Kurzzeichen
mitarb.[A2].Offset(i - 1, 2) = rs!Name
rs.MoveNext
Wend
rs.Close
dbverbindung.Close
End Sub

Daten von Excel-Sheet in ListBox der UserForm:

Private Sub UserForm_Initialize()
'Füllen des List-Feldes für Mitarbeiterauswahl
Dim anzMA As Integer
Dim i As Integer
Dim mtext As String
DBVerbMA
Sheets("Mitarbeiter").Activate
Sheets("Auswahl").Select
i = ActiveSheet.UsedRange.Rows.Count
With frmMitarbeiterVerwalten.lstExistMitarbeiter
.ColumnCount = 3
.ColumnHeads = True
.RowSource = "Mitarbeiter!A2:C" & i
.ColumnWidths = "1cm;2cm;3cm"
End With
End Sub

Und speichern der verwalteten Daten von UserForm direkt in Access-Tabelle:

Private Sub cmdSpeichern_Click()
'Felder in Datenbank schreiben
Dim ADOC As New ADODB.Connection
Dim DBS As New ADODB.Recordset
Dim Dia As UserForm
Dim s As String
Dim path As String
Dim dbname As String
path = Application.ActiveWorkbook.path
dbname = "APPlan.mdb"
ADOC.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & "\" & dbname
DBS.Open "Mitarbeiter", ADOC, adOpenKeyset, adLockOptimistic
Set Dia = frmMitarbeiterVerwalten
s = Dia.txtMitarbeiter.Value
s = "Mitarbeiter = '" & s & "'"
On Error GoTo Fehler
DBS.Find s
With Dia
DBS!Mitarbeiter = txtMitarbeiter.Value
DBS!Kurzzeichen = txtKurzzeichen.Value
DBS!Name = txtName.Value
DBS.Update
End With
DBS.Close
ADOC.Close
Unload Me
MsgBox "Datensatz geändert!"
Sheets("Auswahl").Select
Exit Sub
Fehler:
DBS.AddNew
With Dia
DBS!Mitarbeiter = txtMitarbeiter.Value
DBS!Kurzzeichen = txtKurzzeichen.Value
DBS!Name = txtName.Value
DBS.Update
End With
DBS.Close
ADOC.Close
Unload Me
MsgBox "Datensatz neu eingefügt!"
Sheets("Auswahl").Select
Exit Sub
End Sub

In dem Zusammenhang noch die Frage:
Wie schaffe ich es, einen in der UserForm gewählten Datensatz direkt in der Access-Tabelle zu löschen?
Danke schon mal für die Hilfe!!
Gruß
Torsten

Anzeige
AW: Access-Daten in Excel-Listenfeld
20.08.2003 20:27:28
Ramses
Hallo,
damit umgehst du das einlesen über ein Sheet indem die Daten beim öffnen der UF abgefragt werden:

Option Explicit
Private Sub UserForm_Initialize()
' Anbindung an eine Access Datenbank für Mitarbeiteranzeige
Dim dbverbindung As New Connection
Dim rs As New Recordset
Dim mitarb As Worksheet
Dim sql As String
Dim i As Integer
Dim dbname As String
Dim path As String
'Variablen füllen
path = Application.ActiveWorkbook.path
dbname = "APPlan.mdb"
Set mitarb = ThisWorkbook.Worksheets(RegMitarb)
'Initialisieren der Verbindung
dbverbindung.Open "provider = microsoft.jet.oledb.4.0;" _
& "Data Source = " & path & "\" & dbname
'SQL String definieren
sql = "SELECT Mitarbeiter, Kurzzeichen, Name FROM Mitarbeiter ORDER BY Mitarbeiter"
'Abfrage öffnen
rs.Open sql, dbverbindung
'Listbox definieren
With Me.lstExistMitarbeiter
    .ColumnCount = 3
    .ColumnHeads = True
    .ColumnWidths = "1cm;2cm;3cm"
End With
i = 0
While Not rs.EOF
    Me.lstExistMitarbeiter.AddItem
    Me.lstExistMitarbeiter.List(i, 0) = rs!Mitarbeiter
    Me.lstExistMitarbeiter.List(i, 1) = rs!Kurzzeichen
    Me.lstExistMitarbeiter.List(i, 2) = rs!Name
    rs.MoveNext
    i = i + 1
Wend
rs.Close
dbverbindung.Close
End Sub 
     Code eingefügt mit Syntaxhighlighter 1.16


Das löschen in der DB kann ich dir nicht so ohne weiteres sagen.
Ist die Tabelle verknüpft oder werden Daten in der Listbox hinzugefügt und dann zum Datenbestand hinzugefügt ?
Du fügst die Daten nicht in der gleichen Form ein wie sie in der Tabelle stehen "... order By Mitarbeiter..".
Das heist, auch der Listindex kann nicht zur Identifikation des Datensatzes herangezogen werden.
Du brauchst entweder den Schlüsselwert aus der Tabelle oder das ganze wird in Vabanque-Spiel beim löschen.
Gruss Rainer

Anzeige
AW: Access-Daten in Excel-Listenfeld
20.08.2003 21:39:55
Todo
Hallo,
danke vorab für die schnelle Hilfe!
Habe es ausprobiert und es funktioniert.
Was das löschen angeht:
Wenn die UF aufgerufen wird, wird automatisch der bisherige Inhalt im Excel-Sheet gelöscht und durch die aktuellen Access-Daten ersetzt.
Ändere oder erfasse ich Daten in der UF, werden diese direkt in die Access-DB geschrieben und umgehen das Excel-Sheet. Die UF wird dabei geschlossen. Erst bei einem Neuaufruf der UF werden dann die Access-Daten wieder neu in das Excel-Sheet übernommen.
Zum Auswählen/Suchen der Daten bzw. Füllen der Felder in der UF hatte ich bisher nach der Mitarbeiternummer selektiert:
...
Set Dia = frmMitarbeiterVerwalten
s = Dia.txtMitarbeiter.Value
s = "Mitarbeiter = '" & s & "'"
On Error GoTo Fehler
DBS.Find s
With Dia
DBS!Mitarbeiter = txtMitarbeiter.Value
DBS!Kurzzeichen = txtKurzzeichen.Value
DBS!Name = txtName.Value
DBS.Update
End With
...
Das Spielchen habe ich nämlich gerade. Er löscht irgendeinen Datensatz in der Access-Tabelle, nur nie den Richtigen. Mit einem Index hatte ich schon erfolglose Versuche gestartet...
Würde es denn funktionieren wenn ich die Daten in der UF erfasse/abändere und zunächst im Excel-Sheet ablege? Sprich, von Access in Excel-Sheet in UF holen und umgekehrt von UF in Excel-Sheet in Access.
Gruß Torsten

Anzeige
AW: Access-Daten in Excel-Listenfeld
20.08.2003 23:28:57
Ramses
Hallo,
warum nimmst du nicht die "Find" Methode, suchst den Datensatz mit der Nummer und löscht ihn dann
rs.delete
Gruss Rainer

AW: Access-Daten in Excel-Listenfeld
20.08.2003 23:39:08
Todo
Danke! Werde es gleich ausprobieren.
Gruss Torsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige