String - Objekt - With - Unklarheiten
28.01.2014 20:18:32
Erich
Hi Vorname,
aus deinem Code ist kaum herauszulesen, wessen ThemeColor = xlThemeColorAccent5 gesetzt werden soll.
TtbC ist nur eine Stringvariable - das kann es nicht sein, eine String-Variable hat keine ThemeColor.
Soll eine bestimmte einzelne Zelle xlThemeColorAccent5 erhalten? Oder ein anderer Bereich?
Was hat das mit dem String TtbC zu tun?
Vor deiner Antwort auf diese Fragen lässt sich die falsche Zeile am Ende kaum
durch eine sinnvolle ersetzen:
Option Explicit ' IMMER zu empfehlen!
Sub Bla()
Dim iEnde1 As Long ' nicht: Integer
Dim ProgressMarker06 As Range
Dim i As Long
Dim CI As String
Dim Pos1 As Long, Pos2 As Long
Dim TtbC As String
With Sheets("Testplan")
iEnde1 = Application.WorksheetFunction.CountIf(.Range("A1:A9999"), "X")
For i = 1 To iEnde1
Set ProgressMarker06 = .Range("A1:A9999").Find("X")
If ProgressMarker06 Is Nothing Then
NoXInfo.Show ' UF-Aufruf
Exit Sub
Else
ProgressMarker06.Select
End If
CI = ProgressMarker06.Offset(0, 5)
Pos1 = InStr(CI, "'")
Pos2 = InStr(Pos1 + 1, CI, "'")
TtbC = Mid(CI, Pos1 + 1, Pos2 - 1 - Pos1)
' TtbC.Font.ThemeColor = xlThemeColorAccent5 ' falsch
Next i
End With
End Sub
Nur so:
Wozu soll an der Stelle
With TtbC.Font
.ThemeColor = xlThemeColorAccent5
End With
eigentlich das With gut sein? Da wird doch kein Objekt mehrfach angesprochen.
Hast du mal in die VBA-Hilfe zu With geschaut?
Wenn es denn sinnvoll wäre, könnte man da einfach
TtbC.Font.ThemeColor = xlThemeColorAccent5
schreiben. Aber das ist eben nicht sinnvoll.
Oben ließe sich With dagegen sinnvoll einsetzen:
CountIf(Range("A1:A9999"), ...) bestimmst du einfach auf A1:A9999 - egal, auf welchem Blatt,
also auf dem gerade aktiven.
Beim Find mit
Sheets("Testplan").Range("A1:A9999").Find("X")
gibst du dann das Blatt an.
Ich geh mal davon aus, dass es hier immer um Sheets("Testplan") gehen soll.
Deshalb habe ich im Code dafür With verwendet.
Nichts geändert habe ich an der Suchlogik. Dein Code wird iEnde1 mal immer wieder dasselbe X finden -
immer das erste, nie die darauf folgenden.
Mit Range("A1:A9999").Find("X") suchst du immer wieder von A1 aus nach unten.
Schau dir mal in der VBA-Hilfe zu Find das Beispiel an. Da wird ganz gut gezeigt, wie man mit FindNext arbeitet.
(Möglich wäre natürlich, dass "X" von NoXInfo aus gelöscht wird - dann reicht Find evtl. aus.)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich