Hi WebMeister,
also wie ich das Ganze verstehe, geht es darum, eine Excel-Tabelle schnell nach einer bestimmten CD zu scannen.
Let's go:
Wir eröffnen ein neues Projekt.
Wir fügen folgende Verweise in das Projekt ein (Menü: Projekt/Verweise):
A) Einen Verweis auf die Microsoft DAO 3.n ObjektLibrary
B) Einen Verweis auf Microsoft Excel n.0 Objektlibrary
unter A, z.B. 3.51 oder 3.5 oder 3.6
unter B, z.B. 8.0 für Excel '97 oder 9.0 für Excel 2000
Das Projekt hat bereits beim eröffnen eine Form eingefügt, die verwenden wir. Wir drücken F7 um in den Codeteil der Form zu gelangen, zuvor fügen wir aber in die Form folgende Controls ein:
Combobox. Eigenschaft Name auf dftxtCDNr setzen
Combobox. Eigenschaft Name auf dftxtKategorie setzen
Combobox. Eigenschaft Name auf dftxtCDName setzen
Die drei Comboboxen hübsch nebeneinander plazieren
Textbox. Eigenschaft Name auf txtSearch setzen.
Die Textbox plazieren unterhalb der o.g. drei Textboxen.
Über den ersten drei Textboxen sollten noch Label's hinzugefügt werden,
die den Inhalt der Textboxen kennzeichen. Überhalb - oder neben der vierten Textbox ein Label: Caption: "Suchbegriff". Die Label's sind für den Programmablauf aber unkritisch.
Eine Schaltfläche einfügen. Button1 auf cmdSearchStart umbenennen.
Caption: Suchen
Drei weitere Schaltflächen: cmdNeu, cmdAend und cmdLoesch.
Captions: Neu, Ändern. Löschen
Alles schön sauber anorden - (fürs Auge!).
Jetzt drücken wir F7!!!
Im allgemeinen Teil des Codes deklarieren wir:
Private DB As Database
Private Rs As Recordset
Private Const WMAP As String = "Name_der_Arbeitsmappe"
Private Const WSHEET As String = "Name_der_Tabelle"<br>
<br>
??? - Richtig verstanden! Wir gehen mit Excel so um, als sei es eine Datenbank!
<pre><code>Private Sub ClearAll()
Dim Target As Control
Dim f As Integer
For Each Target In Form1.Controls
f = InStr(Target.Name,"txt")
If f > 0 Then Target.Text=""
Next
End Sub
Private Sub Form_Activate()
LadeAlles
End Sub Nun werden die Listboxen synchronisiert:
Private Sub dftxtcdname_Click()
Dim nr As Long
nr = dftxtcdname.ListIndex
dftxtCDnr.ListIndex = nr
dftxtKategorie.ListIndex = nr
End Sub
Private Sub dftxtCDnr_Click()
Dim nr As Long
nr = dftxtCDnr.ListIndex
dftxtcdname.ListIndex = nr
dftxtKategorie.ListIndex = nr
End Sub
Private Sub dftxtKategorie_Click()
Dim nr As Long
nr = dftxtKategorie.ListIndex
dftxtcdname.ListIndex = nr
dftxtCDnr.ListIndex = nr
End Sub Die Suchmaschine:
Private Sub cmdSearchStart_Click()
Dim SQL As String, a As String
Dim lkBool As Boolean
Dim nrs As Recordset
Dim i As Long
Dim janein As Variant
If txtsearch.Text = "" Then
MsgBox "Sie haben keinen Suchbegriff eingegeben.", vbInformation, "Suche" & _
"Stopp"
txtsearch.SetFocus
Exit Sub
End If
'Wurde eine Zahl angegeben,wird nach CD NR gesucht.
'Wurde Text eingegeben, so wird nach CD Name gesucht.
If IsNumeric(txtsearch.Text) Then
SQL = "[CD Nr] = " & txtsearch.Text
Else
lkBool = False
If InStr(txtsearch.Text, "*") <> 0 Then lkBool = True
If InStr(txtsearch.Text, "?") <> 0 Then lkBool = True
If lkBool Then
a = " Like "
Else
a = " = "
End If
SQL = "[CD Name]" + a + "'" + txtsearch.Text + "'"
End If
'Excel-Arbeitsmappe als ISAM-Datenquelle öffnen
Set db = DBEngine.OpenDatabase(WMap, False, False, "Excel 8.0;")
'Exceltabellen enthalten immer ein $-Zeichen
ExlTab = WSHEET + "$"
Set rs = db.OpenRecordset(ExlTab, dbOpenDynaset)
If Not rs.EOF Then
rs.Filter = SQL
Set nrs = rs.OpenRecordset(dbOpenDynaset)
If Not nrs.EOF Then
With nrs
.MoveLast
.MoveFirst
janein = MsgBox("Es wurden " + Trim(Str(.RecordCount)) + _
"Datensätze gefunden. Sollen die Datensätze geladen" & _
"werden?", _
vbQuestion + vbYesNo, "Suchergebnis:")
If janein = vbNo Then
db.Close
Exit Sub
End If
dftxtCDnr.Clear
dftxtcdname.Clear
dftxtKategorie.Clear
ClearAll
For i = 0 To .RecordCount - 1
dftxtCDnr.AddItem nrs.Fields(0).Value
dftxtcdname.AddItem nrs.Fields(1).Value
dftxtKategorie.AddItem nrs.Fields(2).Value
Next
End With
End If
End If
End Sub Private Sub Ladealles()
Dim ExlTab As String
Dim DS As Long, i As Long
'Excel-Arbeitsmappe als ISAM-Datenquelle öffnen
Set DB = DBEngine.OpenDatabase(WMap, False, False, "Excel 8.0;")
'Exceltabellen enthalten immer ein $-Zeichen
ExlTab = WSHEET + "$"
Set Rs = DB.OpenRecordSet(ExlTab, dbOpenDynaset)
'Inhalt der Tabelle in die ComboBoxen laden:<br>
If Not Rs.EOF Then
Rs.MoveLast
Ds = Rs.Recordcount
Rs.MoveFirst
End If
For i = 0 To Ds - 1
dftxtCDNr.AddItem Rs.Fields(0)
dftxtKategorie.AddItem Rs.Fields(1)
dftxtCDName.AddItem Rs.Fields(2)
Rs.MoveNext
Next
End Sub Kurze Erläuterung: Werden Feldnamen, wie z.B. CD Nr mit einem Leerzeichen oder anderem Zeichen: CD-Nr angegeben, so muß der Feldnamen
mit [ ] eingeschlossen sein.
Cu
Lordchen |