Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1068to1072
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
Inhaltsverzeichnis

Datenbank Access Macro!

Datenbank Access Macro!
20.04.2009 16:02:24
lisa
Hallo zusammen
Ich habe hier ein Macro mit welchem ich Daten aus einer Accesdatenbank lesen will.
Dieses Macro läuft sehr gut.
Nur habe ich beim Aufzeichnen ein Datum eingegeben welches aber aus meiner Zieltabelle aus A1 gelesen werden soll.
Kann mann hierzu den Code umschreiben und wenn ja wie?
Wer kann mir hierzu helfen?

Private Sub CommandButton1_Click()
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;DBQ=C:\S\Ab.mdb;DefaultDir=C:\S;DriverId=25;FIL=MS  _
Acce" _
), Array("ss;MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1"))
.CommandText = Array( _
"SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, T_Datenblatt.Maschine,  _
T_Datenblatt.Artikel, T_Datenblatt.Betriebsstunden, T_Datenblatt.Ausfallzeit_Maschine, T_Datenblatt.Anzahl_Schichtführer, T_" _
, _
"Datenblatt.Anzahl_Schichten, T_Datenblatt.Ausfallzeit_Personal, T_Datenblatt. _
Endbestand, T_Datenblatt.Anfangsbestand, T_Datenblatt.Anzahl_Personal, T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlers" _
, _
"chinken, T_Datenblatt.Abschnitt_Würfel, T_Datenblatt.Schwund, T_Datenblatt.Sonstiges,  _
T_Datenblatt.SchichtKZ" & Chr(13) & "" & Chr(10) & "FROM `P:\S\Ab`.T_Datenblatt T_Datenblatt" & Chr(13) & "" & Chr(10) & "WHERE (T_Datenblatt." _
, "Datum={ts '2009-04-17 00:00:00'})")
.Name = "Abfrage von Microsoft Access-Datenbank"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub


Danke für Eure Hilfe
Grüße Lisa

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbank Access Macro!
21.04.2009 12:05:42
fcs
Hallo Lisa,
speichere das Datum in A1 im erforderlichen Format in einer Variablen. Diese Variable baust du dan in den Textstring den Commandtext ein.
Gruß
Franz

Private Sub CommandButton1_Click()
Dim strDatum As String
strDatum = Format(ActiveSheet.Range("A1").Value, "YYYY-MM-DD")
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;" _
& "DBQ=C:\S\Ab.mdb;DefaultDir=C:\S;DriverId=25;FIL=MSAcce"), _
Array("ss;MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1"))
.CommandText = Array("SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, " _
& "T_Datenblatt.Maschine, T_Datenblatt.Artikel, " _
& "T_Datenblatt.Betriebsstunden, T_Datenblatt.Ausfallzeit_Maschine, " _
& "T_Datenblatt.Anzahl_Schichtführer, T_Datenblatt.Anzahl_Schichten, " _
& "T_Datenblatt.Ausfallzeit_Personal, T_Datenblatt.Endbestand, " _
& "T_Datenblatt.Anfangsbestand, T_Datenblatt.Anzahl_Personal, " _
& "T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlerschinken, " _
& "T_Datenblatt.Abschnitt_Würfel, " _
& "T_Datenblatt.Schwund, T_Datenblatt.Sonstiges, T_Datenblatt.SchichtKZ" _
& Chr(13) & "" & Chr(10) & "FROM `P:\S\Ab`.T_Datenblatt T_Datenblatt" & Chr(13) & ""  _
_
& Chr(10) & "WHERE (T_Datenblatt.Datum={ts '" & strDatum & " 00:00:00'})")
.Name = "Abfrage von Microsoft Access-Datenbank"


oder mit Auflösung der aufgezeichneten Array-Konstruktion in Textvariablen:


Private Sub CommandButton1_Click()
Dim strDatum As String, strConnection As String, strCommand As String
strDatum = Format(ActiveSheet.Range("A1").Value, "YYYY-MM-DD")
strConnection = "ODBC;DSN=Microsoft Access-Datenbank;" _
& "DBQ=C:\S\Ab.mdb;DefaultDir=C:\S;" _
& "DriverId=25;FIL=MSAccess;MaxBufferSize=2048;PageTimeout=5;"
strCommand = "SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, " _
& "T_Datenblatt.Maschine, T_Datenblatt.Artikel, " _
& "T_Datenblatt.Betriebsstunden, T_Datenblatt.Ausfallzeit_Maschine, " _
& "T_Datenblatt.Anzahl_Schichtführer, T_Datenblatt.Anzahl_Schichten, " _
& "T_Datenblatt.Ausfallzeit_Personal, T_Datenblatt.Endbestand, " _
& "T_Datenblatt.Anfangsbestand, T_Datenblatt.Anzahl_Personal, " _
& "T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlerschinken, " _
& "T_Datenblatt.Abschnitt_Würfel, " _
& "T_Datenblatt.Schwund, T_Datenblatt.Sonstiges, T_Datenblatt.SchichtKZ" _
& Chr(13) & "" & Chr(10) & "FROM `P:\S\Ab`.T_Datenblatt T_Datenblatt" & Chr(13) & ""  _
_
& Chr(10) & "WHERE (T_Datenblatt.Datum={ts '" & strDatum & " 00:00:00'})"
With ActiveSheet.QueryTables.Add(Connection:=strConnection, Destination:=Range("A1"))
.CommandText = strCommand
.Name = "Abfrage von Microsoft Access-Datenbank"


Anzeige
AW: Datenbank Access Macro!
21.04.2009 15:17:30
lisa
Hallo Franz
Danke für deine schnelle Hilfe
Ich bin am Ausprobieren und melde mich sofrt ich es hinbekommen habe!
Danke dir
AW: Datenbank Access Macro!
22.04.2009 08:38:21
lisa
Hallo
Nun habe ich versucht diese Lösungen umzusetzen, aber ohne Erfolg.
Im Code 1 bekomme ich einen Debugger: Laufzeitfehler'13': Typen unverträglich
Und im Code 2 passiert garnichts? Keine Activität und keinen Fehler!
So habe ich den Code 1 angepasst:

Private Sub CommandButton1_Click()
Dim strDatum As String
strDatum = Format(ActiveSheet.Range("A1").Value, "DD-MM-YYYY")
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;" _
& "DBQ=W:\Servierschnitt\servier_Abschnitt\Ab.mdb;DefaultDir=W:\Servierschnitt; _
DriverId=25;FIL=MSAcce"), _
Array("ss;MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1"))
.CommandText = Array("SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, " _
& "T_Datenblatt.Maschine, T_Datenblatt.Artikel, " _
& "T_Datenblatt.Betriebsstunden, T_Datenblatt.Ausfallzeit_Maschine, " _
& "T_Datenblatt.Anzahl_Schichtführer, T_Datenblatt.Anzahl_Schichten, " _
& "T_Datenblatt.Ausfallzeit_Personal, T_Datenblatt.Endbestand, " _
& "T_Datenblatt.Anfangsbestand, T_Datenblatt.Anzahl_Personal, " _
& "T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlerschinken, " _
& "T_Datenblatt.Abschnitt_Würfel, " _
& "T_Datenblatt.Schwund, T_Datenblatt.Sonstiges, T_Datenblatt.SchichtKZ" _
& Chr(13) & "" & Chr(10) & "FROM `W:\Servierschnitt\servier_Abschnitt`.T_Datenblatt  _
T_Datenblatt" & Chr(13) & "" _
_
& Chr(10) & "WHERE (T_Datenblatt.Datum={ts '" & strDatum & " 00:00:00'})")
.Name = "Abfrage von Microsoft Access-Datenbank"
End With
End Sub


Der Debugger hinterlegt die Zeilen ab. CommandText = ... - & Chr(10) gelb
Und so den Code 2


Private Sub CommandButton2_Click()
Dim strDatum As String, strConnection As String, strCommand As String
strDatum = Format(ActiveSheet.Range("A1").Value, "YYYY-MM-DD")
strConnection = "ODBC;DSN=Microsoft Access-Datenbank;" _
& "DBQ=W:\Servierschnitt\servier_Abschnitt.mdb;DefaultDir=W:\Servierschnitt;" _
& "DriverId=25;FIL=MSAccess;MaxBufferSize=2048;PageTimeout=5;"
strCommand = "SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, " _
& "T_Datenblatt.Maschine, T_Datenblatt.Artikel, " _
& "T_Datenblatt.Betriebsstunden, T_Datenblatt.Ausfallzeit_Maschine, " _
& "T_Datenblatt.Anzahl_Schichtführer, T_Datenblatt.Anzahl_Schichten, " _
& "T_Datenblatt.Ausfallzeit_Personal, T_Datenblatt.Endbestand, " _
& "T_Datenblatt.Anfangsbestand, T_Datenblatt.Anzahl_Personal, " _
& "T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlerschinken, " _
& "T_Datenblatt.Abschnitt_Würfel, " _
& "T_Datenblatt.Schwund, T_Datenblatt.Sonstiges, T_Datenblatt.SchichtKZ" _
& Chr(13) & "" & Chr(10) & "FROM `W:\Servierschnitt\servier_Abschnitt`.T_Datenblatt  _
T_Datenblatt" & Chr(13) & "" _
_
& Chr(10) & "WHERE (T_Datenblatt.Datum={ts '" & strDatum & " 00:00:00'})"
With ActiveSheet.QueryTables.Add(Connection:=strConnection, Destination:=Range("A1"))
.CommandText = strCommand
.Name = "Abfrage von Microsoft Access-Datenbank"
End With
End Sub


Was habe ich falsch gemacht?
Wenn du dir das noch einmal ansehen könntest wäre ich dir sehr dankbar:
Liebe Grüße Lisa

Anzeige
AW: Datenbank Access Macro!
22.04.2009 11:36:47
fcs
Hallo Lisa,
leider zerstückelt der VBA-Recorder beim Aufzeichnen den Code für den Connection-String und den Command-String durch die Zerlegung in Arrays so, dass es nicht ganz einfach ist ihn korrekt variabel anzupassen. Erschwerend kommt hier hinzu, dass beim Posten des Codes bei überlangen Zeilen zusätzliche Zeilenschaltungen eingefügt werden.
Deshalb bevorzuge ich die Varainte mit den Stringvariablen.
Meines Wissens ist "& Chr(13) & "" & Chr(10) &" im Command-Code auch nicht erforderlich und kann durch ein Leerzeichen ersetzt werden.
Nachfolgend meine neuer Vorschlag für beide Varianten inkl. der von deinem ursprünglichen Code unverändert zu übernehmenden Zeilen.
Gruß
Franz

Private Sub CommandButton1_Click()
Dim strDatum As String
strDatum = Format(ActiveSheet.Range("A1").Value, "DD-MM-YYYY")
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;DBQ=C:\S\Ab.mdb;" _
& "DefaultDir=C:\S;DriverId=25;FIL=MSAcce"), _
Array("ss;MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1"))
.CommandText = Array( _
"SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, T_Datenblatt.Maschine, " _
& "T_Datenblatt.Artikel, T_Datenblatt.Betriebsstunden, " _
& "T_Datenblatt.Ausfallzeit_Maschine, T_Datenblatt.Anzahl_Schichtführer, T_", _
"Datenblatt.Anzahl_Schichten, T_Datenblatt.Ausfallzeit_Personal, " _
& "T_Datenblatt.Endbestand, T_Datenblatt.Anfangsbestand, " _
& "T_Datenblatt.Anzahl_Personal, T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlers", _
"chinken, T_Datenblatt.Abschnitt_Würfel, T_Datenblatt.Schwund, " _
& "T_Datenblatt.Sonstiges, " _
& "T_Datenblatt.SchichtKZ" & Chr(13) & "" & Chr(10) _
& "FROM `P:\S\Ab`.T_Datenblatt T_Datenblatt" & Chr(13) & "" & Chr(10) _
& "WHERE (T_Datenblatt.", "Datum={ts '" & strDatum & " 00:00:00'})")
.Name = "Abfrage von Microsoft Access-Datenbank"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
'VARIANTE 2
Private Sub CommandButton2_Click()
Dim strDatum As String, strConnection As String, strCommand As String
strDatum = Format(ActiveSheet.Range("A1").Value, "YYYY-MM-DD")
strConnection = "ODBC;DSN=Microsoft Access-Datenbank;" _
& "DBQ=W:\Servierschnitt\servier_Abschnitt.mdb;DefaultDir=W:\Servierschnitt;" _
& "DriverId=25;FIL=MSAccess;MaxBufferSize=2048;PageTimeout=5;"
strCommand = "SELECT T_Datenblatt.Datum, T_Datenblatt.Schicht_Art, " _
& "T_Datenblatt.Maschine, T_Datenblatt.Artikel, " _
& "T_Datenblatt.Betriebsstunden, T_Datenblatt.Ausfallzeit_Maschine, " _
& "T_Datenblatt.Anzahl_Schichtführer, T_Datenblatt.Anzahl_Schichten, " _
& "T_Datenblatt.Ausfallzeit_Personal, T_Datenblatt.Endbestand, " _
& "T_Datenblatt.Anfangsbestand, T_Datenblatt.Anzahl_Personal, " _
& "T_Datenblatt.Schichtproduktion, T_Datenblatt.Fehlerschinken, " _
& "T_Datenblatt.Abschnitt_Würfel, " _
& "T_Datenblatt.Schwund, T_Datenblatt.Sonstiges, T_Datenblatt.SchichtKZ" _
& " FROM `W:\Servierschnitt\servier_Abschnitt`.T_Datenblatt T_Datenblatt" _
& " WHERE (T_Datenblatt.Datum={ts '" & strDatum & " 00:00:00'})"
With ActiveSheet.QueryTables.Add(Connection:=strConnection, Destination:=Range("A1"))
.CommandText = strCommand
.Name = "Abfrage von Microsoft Access-Datenbank"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub


Anzeige
AW: Datenbank Access Macro!
22.04.2009 11:50:15
lisa
Hallo Franz
Der zwiete Code macht genau das was er soll.
Ich bedanke mich herzlich.
Ich sehe mir das noch einmal genauer an um es zu verstehen.
lienbe Grüsse Lisa

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige