Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Application.Match gibt Fehler aus - egal was ich mache

194 views
Skip to first unread message

erdmann....@gmail.com

unread,
Jun 22, 2016, 10:42:09 AM6/22/16
to
Hi,

ich möchte die o.g. Funktion wie folgt verwenden:

Zeile = Application.Match(Suchwert, Range(Cells(1, 4), Cells(200, 4)), 0)

Vorher habe ich durch eine Schleife sichergestellt, dass nur Werte überhaupt gesucht werden, die definitiv enthalten sind. Zeile ist ein String, da eigentlich keine Fehler ausgegeben werden sollten ist das ja auch kein Problem. Jedoch kommt ständig der "Typen unverträglich"-Fehler. Beim Debug sehe ich den Suchwert und kann bestätigen, dass der in der gesuchten Range vorliegend ist und trotzdem wird der Fehler zurückgegeben.

Auch Umschreiben mit "D1:D200" hat nichts gebracht, die Lösung mit Cells ist aber wichtig, weil es später noch einmal eine Suche mit Variable in der Zeilennummer geben soll.

Im Endeffekt sollen die Hintergrundfarben ausgelesen und entsprechend wiedergegeben/zusammengefasst werden. Daher geht es nur über VBA aber durch den Fehler komme ich nicht weiter.

Kann mir jemand helfen?

Wie gesagt: Der Suchwert, der den Fehler zurückgibt ist definitiv in der gesuchten Range enthalten, trotzdem kommt immer dieser Fehler.

Vielen Dank für die Hilfe!

Claus Busch

unread,
Jun 22, 2016, 10:49:32 AM6/22/16
to
Hallo Philipp,

Am Wed, 22 Jun 2016 07:42:07 -0700 (PDT) schrieb
erdmann....@gmail.com:

> Zeile = Application.Match(Suchwert, Range(Cells(1, 4), Cells(200, 4)), 0)
>
> Vorher habe ich durch eine Schleife sichergestellt, dass nur Werte überhaupt gesucht werden, die definitiv enthalten sind. Zeile ist ein String, da eigentlich keine Fehler ausgegeben werden sollten ist das ja auch kein Problem. Jedoch kommt ständig der "Typen unverträglich"-Fehler. Beim Debug sehe ich den Suchwert und kann bestätigen, dass der in der gesuchten Range vorliegend ist und trotzdem wird der Fehler zurückgegeben.
>
> Auch Umschreiben mit "D1:D200" hat nichts gebracht, die Lösung mit Cells ist aber wichtig, weil es später noch einmal eine Suche mit Variable in der Zeilennummer geben soll.
>
> Im Endeffekt sollen die Hintergrundfarben ausgelesen und entsprechend wiedergegeben/zusammengefasst werden. Daher geht es nur über VBA aber durch den Fehler komme ich nicht weiter.

stell mal bitte deinen Code zur Verfügung. So kann man nur raten.
TypeMismatch kommt aber normalerweise von einer falschen Deklaration der
Variablen.


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016

erdmann....@gmail.com

unread,
Jun 22, 2016, 10:53:38 AM6/22/16
to
Vielleicht ist das von Bedeutung: Vorher nutze ich Sheets(..).Select um die Arbeitsblätter zu wechseln, aber das sollte ja eigentlich nichts ausmachen, oder?

Claus Busch

unread,
Jun 22, 2016, 10:58:03 AM6/22/16
to
Hallo Philipp,

Am Wed, 22 Jun 2016 07:53:37 -0700 (PDT) schrieb
erdmann....@gmail.com:

> Vielleicht ist das von Bedeutung: Vorher nutze ich Sheets(..).Select um die Arbeitsblätter zu wechseln, aber das sollte ja eigentlich nichts ausmachen, oder?

gerade nochmals deinen ersten Post gelesen.
Zeile sollte Integer oder Long sein.

erdmann....@gmail.com

unread,
Jun 22, 2016, 11:03:08 AM6/22/16
to
Gerne,

Sub ÜbertragTestingStatus()
Dim istGelb As Boolean
istGelb = False
Dim istRot As Boolean
istRot = False
Dim istGruen As Boolean
istGruen = False
Dim farbe As String
Dim Zeile As String
Dim Zeile2 As String
Dim ergebnis As String
Dim Suchwert As String

'Definition als String, weil ansonsten bei den unteren Funktionen ein Fehler ausgegeben wurde.

Sheets("Backlog_Stories").Select

For j = 2 To 500


'Hiermit ist sichergestellt (habe ich getestet), dass nur verfügbare Werte überhaupt weitergereicht werden
If Cells(j, 7).Value = 0 Then
GoTo LastLine
End If

If Cells(j, 7).Value <> 0 Then
Suchwert = Cells(j, 1).Value
End If

Sheets("Testing_Framework").Select

Zeile = Application.Match(Suchwert, Sheets("Testing_Framework").Range(Cells(1, 4), Cells(200, 4)), 0)

For i = 7 To 124

farbe = Cells(Zeile, i).Interior.Color


If farbe = "49407" Then
istGelb = True
End If

If farbe = "5287936" Then
istGruen = True
End If

If farbe = "192" Then
istRot = True
End If



Next i


If istGruen = False And istGelb = False And istRot = True Then ergebnis = "192"

If istGelb = False And istRot = False And istGruen = True Then ergebnis = "5287936"

If istGelb = True Then ergebnis = "49407"


Sheets("Backlog_Stories").Select
Cells(j, 9).Interior.Color = ergebnis

LastLine:
Next j

End Sub


So, hier der Code, wie gesagt, es ist definitiv klar, dass der Wert zu finden wäre und die Definition sollte auch passen. Ich weiß zwar, der Code ist ansich nicht besonders elegant aber funktionieren sollte er eigentlich.

In einer anderen Konstellation (wenn ich die Zeile über eine Hilfsspalte in Excel mit "Match" ausgebe), hat der Code einwandfrei funktioniert. Da aber in der Suchmatrix einige Werte doppelt vorkommen, wollte ich in VBA dann eine zweite Schleife einbauen, die den selben Suchwert ab "Zeile + 1" sucht um doppelte zu finden..

erdmann....@gmail.com

unread,
Jun 22, 2016, 11:05:50 AM6/22/16
to
Am Mittwoch, 22. Juni 2016 16:58:03 UTC+2 schrieb Claus Busch:
> Hallo Philipp,
>
> gerade nochmals deinen ersten Post gelesen.
> Zeile sollte Integer oder Long sein.
>
>
> Mit freundlichen Grüßen
> Claus
> --
> Windows10
> Office 2016

Der Fehler bleibt auch noch, wenn ich die Zeile als Integer oder Long deklariere :(

Claus Busch

unread,
Jun 22, 2016, 11:12:17 AM6/22/16
to
Hallo Philipp,

Am Wed, 22 Jun 2016 08:03:06 -0700 (PDT) schrieb
erdmann....@gmail.com:

> Sub ÜbertragTestingStatus()
> Dim istGelb As Boolean
> istGelb = False
> Dim istRot As Boolean
> istRot = False
> Dim istGruen As Boolean
> istGruen = False
> Dim farbe As String
> Dim Zeile As String
> Dim Zeile2 As String
> Dim ergebnis As String
> Dim Suchwert As String

was willst du machen? Erstens gibt dir MATCH eine Zeilennummer zurück
und die MUSS Integer oder bei größeren Werten sogar long sein. Wenn dir
das einen Fehler gibt, musst du den Fehler anderweitig beseitigen.
Außerdem durchläufst du eine Schleife. Du hast am Schluss nur die Farben
der letzten Zeile. Auf diese Weise ist eine Schleife eigentlich total
unnötig.

erdmann....@gmail.com

unread,
Jun 22, 2016, 11:17:26 AM6/22/16
to
Am Mittwoch, 22. Juni 2016 17:12:17 UTC+2 schrieb Claus Busch:
> Hallo Philipp,
>
> was willst du machen? Erstens gibt dir MATCH eine Zeilennummer zurück
> und die MUSS Integer oder bei größeren Werten sogar long sein. Wenn dir
> das einen Fehler gibt, musst du den Fehler anderweitig beseitigen.
> Außerdem durchläufst du eine Schleife. Du hast am Schluss nur die Farben
> der letzten Zeile. Auf diese Weise ist eine Schleife eigentlich total
> unnötig.
>
>
> Mit freundlichen Grüßen
> Claus
> --
> Windows10
> Office 2016

Hi Claus,

Lustige Erkenntnis: Wenn "Suchwert" als Long deklariert wird, geht es problemlos weiter. Warum verstehe ich nicht, aber das werde ich mir jetzt merken...

Ich brauche die Zeilennummer, um dann die gesamte Zeile "abzutasten", also nach den Hintergrundfarben, die als Statusindikator da sind. Je nach Status sollen dann in dem Backlog jeweils andere Farben gesetzt werden, damit das Ganze einfach zu bedienen ist..
Der Gedanke dahinter ist, so auszusieben, dass eben eine Farbe übrig bleibt (wie gesagt, das ginge sicher viel eleganter, aber das ist meine erste VBA-Arbeit..)

Vielen Dank noch einmal für die Hilfe, wie gesagt, erst einmal hat sich das Problem scheinbar erledigt ;-)

Gruß,
Philipp

Claus Busch

unread,
Jun 22, 2016, 12:51:29 PM6/22/16
to
Hallo Phillip,

Am Wed, 22 Jun 2016 08:17:25 -0700 (PDT) schrieb
erdmann....@gmail.com:

> Lustige Erkenntnis: Wenn "Suchwert" als Long deklariert wird, geht es problemlos weiter. Warum verstehe ich nicht, aber das werde ich mir jetzt merken...

probiere es mal so:

Sub ÜbertragTestingStatus()
Dim farbe As Long, i As Long, j As Long
Dim c As Range

For j = 2 To 500
farbe = xlNone
If Sheets("Backlog_Stories").Cells(j, 7) <> 0 Then
Set c = Sheets("Testing_Framework").Range("D1:D200") _
.Find(Sheets("Backlog_Stories").Cells(j, 7),
LookIn:=xlValues)

If Not c Is Nothing Then
For i = 124 To 7 Step -1
farbe = Cells(c.Row, i).Interior.Color
Select Case farbe
Case 49407, 5287936, 192
Sheets("Backlog_Stories").Cells(j,
9).Interior.Color = farbe
Exit For
End Select
Next i
End If
End If
Next j
End Sub
0 new messages