Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

2 Application.Match

Forumthread: 2 Application.Match

2 Application.Match
15.07.2024 16:00:57
Excelfan1
Hallo zusammen,

über den CommandButton CbÜbernehmen im UserForm wird der nachfolgende Code mit dem Match
lngZeile = Application.Match(cbWeg, Columns("B"), 0)
ausgeführt
   Dim lngZeile As Long

Dim intSpalte As Integer
Dim OptButtons As MSForms.Control
Dim AuswahlPunkte As String

lngZeile = Application.Match(cbWeg, Columns("B"), 0)

'untersucht die Optionsschalter im Frame Punkte
For Each OptButtons In fraPunkte.Controls
If OptButtons.Value = True Then
AuswahlPunkte = OptButtons.Caption
End If
Next OptButtons

If TbFr.Value = True Then
If Cells(lngZeile, intSpalte + 6) > "" Then
Cells(lngZeile, intSpalte + 8).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 9).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 4) > "" And Cells(lngZeile, intSpalte + 5) > "" Then
Cells(lngZeile, intSpalte + 6).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 7).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 4) = "" And Cells(lngZeile, intSpalte + 6).Value = "" Then
Cells(lngZeile, intSpalte + 4).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 5).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
optleer.Value = True
End If


Ich habe noch einen zweiten Match
lngZeile = Application.Match(cbMitglied, Columns("AM"), 0)
             lngZeile = Application.Match(cbMitglied, Columns("AM"), 0)

If TbFr.Value = True And TbSonder1 = True And cbWeg = "" Then
If Cells(lngZeile, intSpalte + 49) > "" Then
Cells(lngZeile, intSpalte + 50) = txtSo1.Text
End If
If Cells(lngZeile, intSpalte + 48) > "" Then
Cells(lngZeile, intSpalte + 49) = txtSo1.Text
End If
If Cells(lngZeile, intSpalte + 48) = "" Then
Cells(lngZeile, intSpalte + 48) = txtSo1.Text
End If
cbMitglied = ""
TbFr.Value = False
TbSonder1 = False
End If


Allerdings erzeugt der zweite Match beim ausführen in Zeile
lngZeile = Application.Match(cbWeg, Columns("B"), 0)
den Laufzeitfehler "13" "Typen unverträglich"

Ich habe den zweiten Match mit
Dim lngZeile As Long, finden As Long
finden = Application.Match(cbMitglied, Columns("AM"), 0)
ausprobiert, es kommt aber an gleicher Stelle der gleiche Fehler

Ich habe jetzt einen zweiten CommandButton CbÜbernehmen2 angelegt und die beiden Matches getrennt.
Das funktioniert zwar, lieber wäre mir allerdings, wenn ich nur einen CommandButton hätte.

Kann man das mit
If Not Application.Match(cbWeg, Columns("B"), 0) is Nothing Then ....
oder beide Matches miteinander kombiniert
lösen?
Ich habe keine Ahnung wie dann der Code lauten müßte.

Ich hoffe auf eure Hilfe
https://www.herber.de/bbs/user/170907.xlsm
Gruß von Excelfan1
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Application.Match
15.07.2024 16:20:42
ralf_b
match liefert entweder eine Zahl oder einen Text(beim Fehler). Deine Variable vor dem "=" ist aber schon auf long vordefiniert was wohl den Typ missmatch erklären könnte.
AW: 2 Application.Match
15.07.2024 16:49:51
Excelfan1
Hallo Ralf,

danke für eine so schnelle Antwort.

Da ich den Thread zweimal erstellen mußte ist mir durchgerutscht zu erwähnen, daß bei dem Fehler cbWeg = "" angezeigt wird.
cbWeg wird auch beim zweiten Match nicht ausgewählt.
Deshalb hatte ich in meinen Code bei Match 2
If TbFr.Value = True And TbSonder1 = True And cbWeg = "" Then
geschrieben.

Was müßte ich wo ändern?
Kannst du mir da bitte helfen

Lieben Dank
Gruß Excelfan1
Anzeige
AW: 2 Application.Match
16.07.2024 14:51:17
Excelfan1
Hallo Ralf,

erst einmal danke für deine Mühe.

Ich habe jetzt mal den Code von CbÜbernehmen2 in CbÜbernehmen1 gepackt da ich ja nur einen Cb haben möchte.
Leider wird der Code, der in CbÜbernehmen2 war, nicht abgearbeitet. D.h. es passiert überhaupt nichts.

Gruß Excelfan1
Anzeige
AW: 2 Application.Match
17.07.2024 07:02:04
ralf_b
ich erhalte keinen Fehler. Da ich nicht weis wie du die beiden Makros kombiniert hast, kann ich deine Fehlerursache ja nicht kennen.

Private Sub CbÜbernehmen_Click()

Dim lngZeile&, result
Dim intSpalte As Integer
Dim OptButtons As MSForms.Control
Dim AuswahlPunkte As String

If cbWeg = "" Then MsgBox ("Abbruch: cbWEG ist leer"): Exit Sub
If cbMitglied = "" Then MsgBox ("Abbruch: cbMitglied ist leer"): Exit Sub

result = Application.Match(cbMitglied, Columns("AM"), 0)
If Not IsError(result) Then
If TbFr.Value = True And TbSonder1 = True And cbWeg = "" Then
If Cells(result, intSpalte + 49) > "" Then
Cells(result, intSpalte + 50) = txtSo1.Text
End If
If Cells(result, intSpalte + 48) > "" Then
Cells(result, intSpalte + 49) = txtSo1.Text
End If
If Cells(result, intSpalte + 48) = "" Then
Cells(result, intSpalte + 48) = txtSo1.Text
End If
cbMitglied = ""
TbFr.Value = False
TbSonder1 = False
End If
Else
MsgBox ("Abbruch: cbMitglied: '" & cbMitglied & "' nicht gefunden.")
Exit Sub
End If

result = Application.Match(cbWeg, Columns("B"), 0)
If Not IsNumeric(result) Then
MsgBox ("Abbruch: cbWeg: '" & cbWeg & "' nicht gefunden.")
Exit Sub
End If

lngZeile = result

'untersucht die Optionsschalter im Frame Punkte
For Each OptButtons In fraPunkte.Controls
If OptButtons.Value = True Then
AuswahlPunkte = OptButtons.Caption
End If
Next OptButtons

If TbSo.Value = True Then
If Cells(lngZeile, intSpalte + 18) > "" Then
Cells(lngZeile, intSpalte + 20).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 21).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 16) > "" Then
Cells(lngZeile, intSpalte + 18).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 19).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 16) = "" Then
Cells(lngZeile, intSpalte + 16).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 17).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If

Else
If TbSa.Value = True Then
If Cells(lngZeile, intSpalte + 12) > "" Then
Cells(lngZeile, intSpalte + 14).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 15).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 10) > "" Then
Cells(lngZeile, intSpalte + 12).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 13).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 10) = "" Then
Cells(lngZeile, intSpalte + 10).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 11).Value = AuswahlPunkte
cbWeg.Value = ""
End If

Else
If TbFr.Value = True Then
If Cells(lngZeile, intSpalte + 6) > "" Then
Cells(lngZeile, intSpalte + 8).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 9).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 4) > "" And Cells(lngZeile, intSpalte + 5) > "" Then
Cells(lngZeile, intSpalte + 6).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 7).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
End If
If Cells(lngZeile, intSpalte + 4) = "" And Cells(lngZeile, intSpalte + 6).Value = "" Then
Cells(lngZeile, intSpalte + 4).Value = cbMitglied.Value
Cells(lngZeile, intSpalte + 5).Value = AuswahlPunkte
cbMitglied = ""
cbWeg.Value = ""
optleer.Value = True
End If
End If
End If
End If

End Sub
Anzeige
AW: 2 Application.Match
17.07.2024 14:17:47
Excelfan1
Hallo Ralf,

ich hatte einfach den Code von CbÜbernehmen2 vor die ganzen End If's, versuchsweise nach die ganzen End If's gepackt.

Mit deinem Code funktioniert es super bis ich weitere TbSonder... ins Spiel bringe.

Ich hab
If TbFr.Value = True And TbSonder1 = True And CbWeg = "" Then
gekürzt auf
If TbSonder1 = True Then
denn das andere muß keine Bedingung sein

Mit dem Code
    result = Application.Match(cbMitglied, Columns("AM"), 0)

If Not IsError(result) Then

If TbSonder1 = True Then
If Cells(result, intSpalte + 49) > "" Then
Cells(result, intSpalte + 50) = txtSo1.Text
End If
If Cells(result, intSpalte + 48) > "" Then
Cells(result, intSpalte + 49) = txtSo1.Text
End If
If Cells(result, intSpalte + 48) = "" Then
Cells(result, intSpalte + 48) = txtSo1.Text
End If
cbMitglied = ""
TbSonder1 = False
txtSo1 = ""
End If

funktioniert alles bestens.

Wenn ich um TbSonder2 erweitere
    result = Application.Match(cbMitglied, Columns("AM"), 0)

If Not IsError(result) Then

If TbSonder1 = True Then
If Cells(result, intSpalte + 49) > "" Then
Cells(result, intSpalte + 50) = txtSo1.Text
End If
If Cells(result, intSpalte + 48) > "" Then
Cells(result, intSpalte + 49) = txtSo1.Text
End If
If Cells(result, intSpalte + 48) = "" Then
Cells(result, intSpalte + 48) = txtSo1.Text
End If
cbMitglied = ""
TbSonder1 = False
txtSo1 = ""
End If

If TbSonder2 = True Then
If Cells(lngZeile, intSpalte + 53) > "" Then
Cells(lngZeile, intSpalte + 54) = txtSo2.Text
End If
If Cells(lngZeile, intSpalte + 52) > "" Then
Cells(lngZeile, intSpalte + 53) = txtSo2.Text
End If
If Cells(lngZeile, intSpalte + 52) = "" Then
Cells(lngZeile, intSpalte + 52) = txtSo2.Text
End If
cbMitglied = ""
TbSonder2 = False
txtSo2 = ""
End If

kommt in Zeile
If Cells(lngZeile, intSpalte + 53) > "" Then
der Fehler "Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler"

Setze ich vor "If TbSonder2 = True Then" ein "Else" passiert gar nicht, d.h. es wird kein Wert in das Sheet übertragen, es kommt aber auch kein Fehler.

Drehe ich den Code um, also TbSonder2 ... vor TbSonder1... (so mußte ich das bei TbFr bis TbSo machen, also zuerst TbSo, dann TbSa, dann TbFr) kommt der gleiche Fehler wieder an gleicher Stelle.
Bei TbFr bis TbSo mußte ich immer dazwischen ein Else einfügen damit der Code funktioniert.

Woran liegt es, daß das mit dem "Else" bei TbSonder1, TbSonder2, TbSonder3, TbSonder4, nicht klappt?
Die Abfrage bei TbSonder1 bis TbSonder4 ist doch vom Prinzip her die gleiche wie bei TbFr bis TbSo.

Datei anbei
https://www.herber.de/bbs/user/171057.xlsm

Gruß vom verzweifelten Excelfan1
Anzeige
AW: 2 Application.Match
17.07.2024 14:23:29
ralf_b
was sagt dir diese Zeile?
lngZeile = result

Spoiler: der Variable lngZeile wird das Suchergebnis(die Zeilennummer) übergeben.

ohne diese Zuweisung dürfte lngZeile= 0 sein und Zeile 0 gibt es nicht -- Ergo Fehler

AW: 2 Application.Match
17.07.2024 15:45:00
Excelfan1
Hallo Ralf,

oh man, wo sind heute meine Augen, wo mein Hirn? Wer lesen kann ist klar im Vorteil!

Ganz herzlichen Dank
Anzeige
Ergänzend
15.07.2024 16:36:46
RPP63
Ergänzend:
Match liefert entweder eine Ganzzahl oder einen Fehler.
Deshalb weise ich Match immer einer Variant-Variablen zu.
Diese kann nämlich auch einen Fehlerwert aufnehmen.
Dann wird Auf IsNumeric(Variable) oder IsError(Variable) geprüft und alles ist fein.

Gruß Ralf
Anzeige
AW: Ergänzend
15.07.2024 17:18:28
Excelfan1
Hallo Ralf,

ich habe das mit Variant ausprobiert.
Bei Auswahl/Klicken aller erfoderlichen ComboBoxen / TroggleButton für den erstern Match läuft der Code jetzt ohne Fehler,
aber bei Auswahl/Klicken/Ausfüllen aller erfoderlichen ComboBoxen / TroggleButton / Textfelder für den zweiten Match kommt jetzt in Zeile
If Cells(lngZeile, intSpalte + 6) > "" Then
der Fehler
Cells(lngZeile, intSpalte + 6) = und lngZeile = Fehler 2042

Match 1 betrifft die Spalten 4 bis 21:
In die Spalten 4, 6, 8, usw bis 20 wird der Name aus cbMitglied und
in die Spalten 5, 7, 9, usw bis 21 werden Zahlen je nach OptButton übernommen.

Match2 betrifft die Spalten 48 bis 62:
hier werden die in der TextBox einegetragenen Zahlen übernommen.

Gruß Excelfan1
Anzeige
AW: Ergänzend
15.07.2024 20:07:37
Excelfan1
ich hatte mal wieder vergessen das Häkchen bei "Frage noch offen" zu setzen
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige