Thema Datum  Von Nutzer Rating
Antwort
27.02.2017 12:36:58 The_Materialist
NotSolved
Blau UserForm Suchfeld
28.02.2017 09:20:14 SJ
***
NotSolved
28.02.2017 11:13:46 The_Materialist
NotSolved
28.02.2017 12:18:51 SJ
Solved

Ansicht des Beitrags:
Von:
SJ
Datum:
28.02.2017 09:20:14
Views:
783
Rating: Antwort:
  Ja
Thema:
UserForm Suchfeld

Hallo,

soweit ich weiss, gibt es eine solche Funktion leider nicht in VBA.

Da mich das Thema ebenfalls interessiert, habe ich das folgende Programmiert:

Auf der UserForm gibt es 2 Steuerelemente:

  • TextBox1
  • ComboBox1

Code (Modul1):

1
2
3
4
5
6
7
Option Explicit
 
Public Type Parameters
    ColumnName As String
    Operator As String
    FilterValue As String
End Type

Code (UserForm1):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Option Explicit
 
Private Sub TextBox1_Change()
    If Me.TextBox1.Value = vbNullString Then
        Exit Sub
    End If
     
    Dim params As Parameters
    With params
        .ColumnName = "Material"
        .Operator = "LIKE"
        .FilterValue = Me.TextBox1.Value
    End With
     
    Call fill_combobox(params)
End Sub
 
Private Sub UserForm_Initialize()
    Dim params As Parameters
    With params
        .ColumnName = "Material"
    End With
     
    Call fill_combobox(params)
End Sub
 
Private Sub fill_combobox(ByRef params As Parameters)
    Dim rs As ADODB.Recordset
    Set rs = get_entries(params)
     
    If rs.RecordCount > 0 Then
        Me.ComboBox1.Clear
        Do While Not rs.EOF
            Me.ComboBox1.AddItem (rs.Fields(0))
            rs.MoveNext
        Loop
    End If
End Sub
 
Private Function get_entries(ByRef params As Parameters) As ADODB.Recordset
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strSQL As String
     
    params.FilterValue = Replace(params.FilterValue, ";", vbNullString)
     
    With con
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .Properties("Data Source").Value = ThisWorkbook.FullName
        .Properties("Extended Properties").Value = "Excel 12.0 Xml;HDR=YES"
        .Open
    End With
     
    If params.Operator = vbNullString Then
        strSQL = "SELECT " & params.ColumnName & " FROM [Tabelle1$];"
    Else
        strSQL = "SELECT " & params.ColumnName & " FROM [Tabelle1$] WHERE " & params.ColumnName & " " & params.Operator & " '" & params.FilterValue & "';"
    End If
     
    With rs
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .ActiveConnection = con
        .Source = strSQL
        .Open
    End With
     
    Set get_entries = rs
    Set rs = Nothing
    Set con = Nothing
End Function

Das gesamte Konstrukt basiert auf ADO, dadurch wird die Excel-Tabelle selbst zur Datenbank und Werte können mit SQL-Befehelen abgefragt werden.

Mein Beispiel als Arbeitsmappe: http://jansesoft.de/owncloud/index.php/s/F3EUgPNpQYzEpe9

Viele Grüße


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
27.02.2017 12:36:58 The_Materialist
NotSolved
Blau UserForm Suchfeld
28.02.2017 09:20:14 SJ
***
NotSolved
28.02.2017 11:13:46 The_Materialist
NotSolved
28.02.2017 12:18:51 SJ
Solved