Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
932to936
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
932to936
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zugriff auf Excel

Zugriff auf Excel
11.12.2007 16:56:00
Holger
Hallo zusammen,
ich habe ein Problem, auf dessen Lösung ich nicht alleine stoße. Auch das
Recherchieren im Internet hat mir nicht geholfen.
Ich habe ein UserForm mit zwei Listenfeldern. Eine Liste wird gefüllt mir
den vorhandenen Tabellen einer vordefinierten Accessdatenbank. Die andere
Liste wird mit den entsprechenden Merkmalen gefüllt. Nun markiert der Nutzer
die gewünschten Tabellen und Merkmale und importiert die entsprechenden
Datensätze. Das funktioniert soweit mit dem unten aufgeführten Code.
Nun möchte ich das jedoch noch in Abhängigkeit einer Datumsbeschränkung
durchführen (VON_DATUM; BIS_DATUM). Ein Merkmal der Tabellen ist das Feld
"herstelldatum" und in Anhängigkeit der Datumsgrenze im UserForm sollen nur
die Merkmale importiert werden, die zustzälich mit dem Eingabedatum gefiltert
wurden.
Kann mir dabei jmd. helfen? Ich bin dort ziemlich ratlos.
Herzlichen Dank für die Hilfe und
schöne Grüße
Holger
Hier der Code -------------------------------------------------------------------------------

Private Sub CommandButton1_Click()
'keine Tabelle ausgewählt ?
If ListBox1.ListIndex = -1 Then
MsgBox "Bitte wählen Sie eine Tabelle!", vbCritical
Exit Sub
End If
'Überschriften setzen (Feldnamen)
Anzahl_Felder = 0
With ListBox2
For i = 0 To .ListCount - 1
If .Selected(i) Then
Anzahl_Felder = Anzahl_Felder + 1
Cells(1, Anzahl_Felder) = .List(i)
With Cells(1, Anzahl_Felder)
.Interior.ColorIndex = 48
.Interior.Pattern = xlSolid
.Font.Bold = True
End With
End If
Next i
End With
If Anzahl_Felder = 0 Then
MsgBox "Bitte wählen Sie mindestens 1 Feld aus!", vbCritical
Exit Sub
End If
'Tabelle zum Einlesen öffnen
Set Datensatz = Datenbank.OpenRecordset(Tabellenname, dbOpenDynaset)
'Anzahl der Datensätze
Anzahl = Datenbank.TableDefs(Tabellenname).RecordCount
z = 2 'ab Zeile 2 Daten schreiben
'alle Datensätze einlesen
Do Until Datensatz.EOF
'Schleife über alle Felder
With ListBox2
'ab Spalte 1 wird geschrieben
s = 1
For X = 0 To .ListCount - 1
If .Selected(X) Then
'Wert ermitteln
n = Datensatz.Fields(X).Value
'Ausgabe in der Tabelle
Cells(z, s) = n
'Spaltennummer um 1 erhöhen
s = s + 1
End If
Next X
End With
'Ausgabezeile um 1 erhöhen
z = z + 1
'nächster Datensatz
Datensatz.MoveNext
Loop
'Datenbank schließen
Datenbank.Close
'Optimale Spaltenbreite
Range(Cells(1, 1), Cells(1, Anzahl_Felder)).EntireColumn.AutoFit
'Information (Anzahl der Datensätze)
MsgBox Anzahl & " Datensätze eingelesen", vbInformation, "Datenbank
importieren"
'Userform schließen
Unload Me
End Sub


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

Betreff
Datum
Anwender
Anzeige
AW: Zugriff auf Excel
11.12.2007 20:02:15
fcs
Hallo Holger,
durch einfügen von entsprechenden If-Bedingungen beim Einlesen jedes Datensatzes sollte es möglich sein, zusätzlich auf einen Datumsbereich zu filtern.
In meinem Beispiel (natürlich ungetestet mangels Testdaten) für die Anpassung des Teilcodes bin ich davon ausgegangen, dass die beiden Datumswerte (von und bis) in entsprechende Textboxen eingetragen werden. Da die Anzahl der eingelesenen Datensätze nicht gleich der Anzahl aller Datensätze der Tabelle ist wird der entsprechende Zähler in der Einlese-Schleife hochgezählt. Wird in eine der Textboxen kein Datum eingetragen, dann werden alle Datensätze eingelesen.
Das Herstelldatum sollte möglichst im Format TT.MM.JJ oder TT.MM.JJJJ aus der Datenbank ausgelesen werden, bzw. dem Format in der Systemeinstellung unter Windows entsprechen. Andernfalls könnte es bei einigen Datumswerten Probleme bei der Umrechnung ins Excel-interne Zeitformat geben, da Excel dann gelegentlich Deutsches/Englisches Datumsformat durcheinander bringt und der größer/kleienr Vergleich nicht merh funktioniert. Evtl. muss man sonst auch das Herstell-Datum durch entsprechende Textmanipulationen vor der Prüfung in die erforderliche Form umwandeln.
Gruß
Franz

'Anzahl der Datensätze
Anzahl = 0
z = 2 'ab Zeile 2 Daten schreiben
'alle Datensätze einlesen
Do Until Datensatz.EOF
einlesen = True
'Prüfen, ob in Textboxen VON_DATUM und BIS_DATUM ein Datumswert eingetragen ist.
If IsDate(VON_DATUM.Text) = True And IsDate(BIS_DATUM.Text) = True Then
'Falls ja dann prüfen, ob Datum des Datensatzes außerhalb des Datumsbereiches liegt
If CDate(VON_DATUM.Text)  CDate(Datensatz.Fields("herstelldatum")) Then
einlesen = False
End If
End If
If einlesen = True Then
Anzahl = Anzahl + 1
'Schleife über alle Felder
With ListBox2
'ab Spalte 1 wird geschrieben
s = 1
For X = 0 To .ListCount - 1
If .Selected(X) Then
'Wert ermitteln
n = Datensatz.Fields(X).Value
'Ausgabe in der Tabelle
Cells(z, s) = n
'Spaltennummer um 1 erhöhen
s = s + 1
End If
Next X
End With
'Ausgabezeile um 1 erhöhen
z = z + 1
End If
'nächster Datensatz
Datensatz.MoveNext
Loop


Anzeige
AW: Zugriff auf Access
11.12.2007 22:25:47
Holger
Hallo Franz,
danke für deine schnelle Hilfe und die viel versprechende Antwort. Ich bekomme nun immer die Meldung: Laufzeitfehler 94 : Unzulässige Verwendung von Null. Diese Meldung erscheint beim Debuggen bei folgender Zeile:
If CDate(VON_DATUM.Text) CDate(BIS_DATUM.Text) > CDate(Datensatz.Fields("zfp_walzdatum")) Then
Das kann ich mir nicht erklären, da der Code eigentlich schlüssig ist. Hat jmd. eine Idee, woran das liegen könnte?
Danke für die eine Antwort und
guten Abend,
Holger

AW: Zugriff auf Access
12.12.2007 18:39:14
fcs
Hallo Holger,
aus irgendwelchen Gründen geben die Formularfelder für VON_DATUM oder BIS_DATUM oder das Auslesen des Datensatzfeldes einen Null-Wert zurück.
Das müsstest du mal prüfen, indem du die 3 Werte im VBA-Editor in der Überwachung testest.
Im Moment tippe ich auf das Einlesen des Datensatzfeldes, denn
IsDate(Null) liefert als Wert False, so dass die Prüfung auf den Datumsbereich übersprungen wird und alle Werte eingelesen werden.
Gruß
Franz

Anzeige
AW: Zugriff auf Access
13.12.2007 10:37:23
Holger
Hallo Franz,
danke für deine Antwort. Du hast vollkommen recht, in de DB befinden sich auch Datensätze, die einen "leer"-Eintrag haben. Nun habe ich in Anlehnung an deine Empfehlung folgendes ergänzt:
If Datensatz.Fields("zfp_walzdatum").Value >= VON_DATUM And _
Datensatz.Fields("zfp_walzdatum").Value Datensatz.Fields("zfp_Walzdatum") IsNull(Date) Then _
Cells(z, s) = n
Leider schreibt das Programm mir jedoch immer noch keine Daten.
Woran kann das noch liegen?
DANKE für deine Hilfe,
Holger

AW: Zugriff auf Access
14.12.2007 10:28:12
fcs
Hallo Holger,
ändere die Prüfung, ob der Datensatz eingelesen werden soll wie folgt ab, dann sollte es funktionieren.
Gruß
Franz

'Prüfen, ob in Textboxen VON_DATUM und BIS_DATUM ein Datumswert eingetragen ist.
If IsDate(VON_DATUM.Text) = True And IsDate(BIS_DATUM.Text) = True Then
'Falls ja dann prüfen, 'ob Datum des Datensatzes Nullwert enthält
If IsNull(Datensatz.Fields("herstelldatum")) Then
einlesen = False
Else
'prüfen ob Datum des Datensatzes außerhalb des Datumsbereiches liegt
If CDate(VON_DATUM.Text)  CDate(Datensatz.Fields("herstelldatum")) Then
einlesen = False
End If
End If
End If


Anzeige
AW: Zugriff auf Access
14.12.2007 17:17:00
Holger
Hallo Franz,
ich danke dir für die Antwort! Das funktioniert so.
Schönes Wochenende und
schöne Grüße
Holger

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige