>> Ich möchte gerne jeden einzelnen Zelleneintrag eines Bereiches mit allen Text vergleichen, die in bestimmten Formen angezeigt werden.
Ansich hast du ja schon alles verbal beschrieben.
* jede einnzelne Zelle => Schleife für Zellen
* alle Texte (bestimmter) Formen => Schleife für Formen
* vergleichen => Vergleich zw. der jeweiligen Form mit dem jeweiligen Zelleninhalt
Daraus bildet man sich seinen ersten Ansatz, z.B. in PseudoCode:
FÜR JEDE zelle IN BEREICH
FÜR JEDE form IN formen
WENN zelle text = form text DANN gefunden := wahr
NÄCHSTE form
WENN gefunden = wahr DANN
meldung "erfolg"
SONST
meldung "neu form anlegen"
ENDE WENN
NÄCHSTE zelle
Bei kleinen Projekten geht das noch gut im Kopf. Wobei, das gilt mehr für bereits erfahrene Menschen. Als Anfänger sollte man sich das irgendwo aufschreiben, damit man es vor Augen hat und den Faden nicht verliert (man konzentriert sich so auf nur jeweils eine Sache: "Coden", oder "Ablauf durchdenken").
Jeder hat so mal angefangen, vorallem diejenigen die das von der Pike auf gelernt haben. Bevor die auch nur eine einzige Zeile Code am Computer tippen durften, mussten die einen Programmablaufplan, Struktogram, oder was auch immer auf Papier bringen (später nimmt für sowas, vorallen größere Projekte, dann Hilfswerkzeuge am PC in Anspruch).
Von dem Ansaz oben kommt man dann nach und nach auf folgende Lösung.
Sub test1()
Dim rngBereich As Excel.Range
Dim rngZelle As Excel.Range
Dim shp As Excel.Shape
Dim blnTreffer As Boolean
With ThisWorkbook.Worksheets("Lists")
Set rngBereich = .Cells(.Rows.Count, "A").End(xlUp)
Set rngBereich = .Range("D3:G" & rngBereich.Row)
For Each rngZelle In rngBereich
For Each shp In .Shapes
If rngZelle.Text <> "" _
And rngZelle.Text = shp.TextFrame2.TextRange.Text _
Then
blnTreffer = True
Exit For
End If
Next
If blnTreffer Then
Call MsgBox("Erfolg.", vbInformation)
blnTreffer = False
Else
Call MsgBox("Neue Form muss hinzugefügt werden!", vbExclamation)
End If
Next
End With
End Sub
Hier wird z.B. noch darauf getestet das die Zelle auch einen Inhalt hat und nur dann wird erst der Vgl. durchgeführt. Derlei Dinge fließen normalerweise auch schon in die vorrausgegangene Planung mit ein.
Jetzt will man aber bestimmt nicht 100 Meldungen wegklicken. Also nimmt man eine Änderung/Verbesserung daran vor. Normalerweise findet diese noch wärend der Planung statt, also vor dem Coden. Als Anfänger wrid man sowas aber nicht gänzlich vermeiden können. Ist ansich auch gut so, denn daraus lernt man weitsichtiger zu denken. Das ist ein Entwicklungsprozess, manche tun sich da leichter, manche nicht.
Sub test2()
Dim rngBereich As Excel.Range
Dim rngZelle As Excel.Range
Dim shp As Excel.Shape
Dim blnTreffer As Boolean
Dim n As Long
With ThisWorkbook.Worksheets("Lists")
Set rngBereich = .Cells(.Rows.Count, "A").End(xlUp)
Set rngBereich = .Range("D3:G" & rngBereich.Row)
For Each rngZelle In rngBereich
For Each shp In .Shapes
If rngZelle.Text <> "" Then
If rngZelle.Text = shp.TextFrame2.TextRange.Text Then
blnTreffer = True
Exit For
End If
Else
blnTreffer = True
End If
Next
If blnTreffer Then
blnTreffer = False
Else
n = n + 1
End If
Next
If n > 0 Then
Call MsgBox(n & " neue Form(en) muss hinzugefügt werden!", vbExclamation)
Else
Call MsgBox("Alles i.O.", vbInformation)
End If
End With
End Sub
Ob das nun schon DIE Lösung isfür dich ist, kann ich nicht sagen.
Gruß
|