Teilweise Zelle(oder Zeichenkette) match im excel-makro
Ich bin neu in VBA und würde ich gerne eine Zeichenfolge (oder Zelle) match zwischen zwei Blättern.
Beispiel Name1 wäre "IT-executive Sally Lim"
Beispiel Name2 wäre "Sally Lim"
Name1 = Sheets("Work").Cells(RowName1, ColName1)
Name2 = Sheets("Roster").Cells(RowName2, ColName2)
'This condition doesn't work
If Name1 = "*" & Name2 & "*" Then
'The "Name2" comes out with a compile error: Invalid Qualifier
Name2.Font.Strikethrough
Exit Do
Else
End If
Aber es funktioniert nicht. Wenn ich die Codierung, entweder nichts passiert oder eine Fehlermeldung erscheint. Bitte helfen Sie
Bearbeitet Kodierung:
If ShiftName Like "*" & CashName & "*" Then
CashName.Font.Strikethrough = True
Den Durchgestrichen Teil gelöst wurde und es nicht zeigt, die "Compile Error" mehr, nachdem ich meine Erklärung von "string" auf "Reihe", wie vorgeschlagen, von John Coleman.
Getestet habe ich durch ändern der Name1 und Name2 sowohl Sally und verwenden Sie dann die folgende Bedingung für die Durchgestrichen und es funktioniert. Ich glaubte, dass es die "*" gemacht hat, dass die Bedingung nicht praktikabel.
If ShiftName Like CashName Then
CashName.Font.Strikethrough = True
Wie kann eine teilweise übereinstimmung erfolgt durch ändern der Zustand entsprechend?
ZWEITER EDIT:
MIR SCHLECHT! Ich merkte, dass meine Name1 war in CAPTIALS.
Also.. Wie kann ich das geändert, damit es funktioniert? Bitte erleuchte mich. Danke
InformationsquelleAutor stupidgal | 2016-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zusätzlich zu @MacroMan 's Antwort über die Verwendung von
Like
würden, würden Sie auch verwenden müssenStrikethrough
richtig. Es ist eine Boolean-Eigenschaft muss auf True festgelegt werden:Sie Auf Bearbeiten:
Basierend auf Ihre erweiterte Frage, die man tun könnte etwas wie diese:
Es ist nicht unbedingt notwendig, um
.Value
auf Range-Variablen (der Vergleich mitLike
funktionieren würde wie erwartet, ohne es), aber es wird von vielen als gute VBA-coding-style zu explizit sein, wenn mit range-Variablen im Gegensatz zu unter Berufung auf die default-Eigenschaft von range-Objekten.Könnte man auch verzichten die Variablen
Name1
undName2
ganz:Eine Letzte Bemerkung: Die
Else
unmittelbar gefolgt vonEnd If
ist etwas sinnlos. Vermutlich Ihre eigentliche code in der else-Klausel. Wenn nicht-einfach löschen ganz anderes und habenEnd If
unmittelbar nach derExit Do
Vielen Dank für die Bereitstellung Ihrer Hilfe. Jedoch erhielt ich einen "compile error: Invalid qualifier" für Name2, wenn ich das coding.
Ich hatte nur deinen code-snippet zu gehen. Ich war der Annahme, dass
Name2
ist eine Range-variable, die verwendet wurde, um eine Schleife über einen Bereich, aber anscheinend ist das nicht der Fall. Wie istName2
erklärt? Vielleicht könnten Sie Bearbeiten Ihren code einschließen, um die umliegendenDo Loop
(oder sogar mehr der code, vielleicht ist der ganze sub ist, wenn es nicht zu lange).bitte werfen Sie einen Blick auf die Codierung bearbeitet
Bisher habe ich
Dim Name1 as string
(gleich für Name2) habe ich eine andere Codierung als das, was Sie bearbeitet haben, aber wenn ich es laufen, es gibt keine Antwort darauf. Getestet habe ichIf Name1.Value Like "*" & Name2.Value & "*" Then MsgBox CashName
, es gibt auch keine Antwort, also ich glaube, dass etwas schief gelaufen ist für die die BedingungInformationsquelleAutor John Coleman
Verwenden Sie die
Like
Betreiber:Können Sie
Like
für bestimmte pattern-matching, sondern es ermöglicht auch die wilden Charakter*
Dann
Name1
offensichtlich noch nicht zu Ende mit dem, wasName2
ist. Diese Antworten basieren auf den code in deine Frage - wir können nicht sehen, die Werte, die Sie sehen.Vielleicht werde ich es noch einmal überprüfen
InformationsquelleAutor Sam