VBScript, Excel - Find in Range
Hallo zusammen.
Ein nettes Mitglied hat mir mit einem langen Code geholfen, dafür noch mal großen Dank.
Jedoch benötige ich in diesem Code eine Erweiterung. Aktuell wird in einer extra Datei festgestellt, welche Spalten (Columns) gelöscht werden. Das klappt auch einwandfrei. Jedoch würde ich die Sache gerne soweit erweitern, dass er vorher noch die Spalten nach einem bestimmten Zeichen durchsucht. Falls das Zeichen "<" vorhanden ist, soll er in die Zelle (2.1) das Wort "error" schreiben.
Hier der Ausschnitt vom Code:
Was ist im oberen Codebereich (' ##### neu hinzugefügt 13.08.2014 #####) falsch, da ich bei der Ausführung einen Kompilieriungsfehler bekomme ?
Ein nettes Mitglied hat mir mit einem langen Code geholfen, dafür noch mal großen Dank.
Jedoch benötige ich in diesem Code eine Erweiterung. Aktuell wird in einer extra Datei festgestellt, welche Spalten (Columns) gelöscht werden. Das klappt auch einwandfrei. Jedoch würde ich die Sache gerne soweit erweitern, dass er vorher noch die Spalten nach einem bestimmten Zeichen durchsucht. Falls das Zeichen "<" vorhanden ist, soll er in die Zelle (2.1) das Wort "error" schreiben.
Hier der Ausschnitt vom Code:
' ##### neu hinzugefügt 13.08.2014 ANFANG #####
With Worksheets(1).Range("a1:cc")
Set c_error = .Find("<", lookin:=xlValues)
If Not c_error Is Nothing Then
firstAddress = c_error.Address
Do
objColumn.Cells(2, 1).value = error
Set c_error = .FindNext(c_error)
Loop While Not c_error Is Nothing And c_error.Address <> firstAddress
End If
End With
Next
' ##### neu hinzugefügt 13.08.2014 ENDE #####
' ##### ab hier bisher Original #####
'Alle Elemente der Löschliste verarbeiten
For Each strColumnHeader In arrColumnsToDelete
'Alle verwendeten Spalten des Arbeitsblatts verarbeiten
For Each objColumn In objActiveSheet.UsedRange.Columns
'Wenn in Zeile 2 der Spalte einer der Spaltentitel aus der
'Löschliste enthalten ist, die komplette Spalte löschen
If objColumn.Cells(2, 1) = strColumnHeader Then
objColumn.Delete
End If
Next
Next
Was ist im oberen Codebereich (' ##### neu hinzugefügt 13.08.2014 #####) falsch, da ich bei der Ausführung einen Kompilieriungsfehler bekomme ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 246348
Url: https://administrator.de/contentid/246348
Ausgedruckt am: 23.11.2024 um 21:11 Uhr
20 Kommentare
Neuester Kommentar
Range("a1", "cc")
ist auch kein richtiger Bezug ! Wenn dann "A:CC"Führst du das ganze als VBS Script aus und nicht in VBA ? So kann der Code nicht in VBS ausgeführt werden, da die Konstanten wie xlValues in ihre tatsächlichen Werte umgewandelt werden müssen und das Worksheets durch das Objekt ersetzt werden muss das in deinem Script dafür verwendet wird !
With objActiveSheet.Range("A:CC")
Set c_error = .Find("<",,-4163,1)
If Not c_error Is Nothing Then
firstAddress = c_error.Address
Do
c_error.Cells(2, 1).value = "Error"
Set c_error = .FindNext(c_error)
Loop While Not c_error Is Nothing And c_error.Address <> firstAddress
End If
End With
VBA is not VBS, da gibt es einige Unterschiede zu beachten !
Zitat von @internet2107:
Mein Wunsch ist ja, dass er das ganze Excelsheet nach dem Wort "<Test" durchsucht
warum suchst du dann nur in A:CC ?Mein Wunsch ist ja, dass er das ganze Excelsheet nach dem Wort "<Test" durchsucht
und falls es in einer Zelle gefunden wird, soll er in der zweiten Reihe der Spalte in der sich die Zelle befindet, das Wort "error" schreiben.
Entdeckt jemand den Fehler ?.
ja... der Fehler liegt in Zeile 6, du setzt den String-Wert nicht in Anführungszeichen, und du verwendest das falsche Range-ObjektEntdeckt jemand den Fehler ?.
c_error.Cells(2, 1).value = "Error"
-edit- Objekt korrigiert
Ich hatte den Code oben doch schon funktionsfähig gepostet, hier also nochmal:
funktioniert einwandfrei.
Grüße Uwe
With objActiveSheet.Range("A:CC")
Set c_error = .Find("<Test",,-4163,1)
If Not c_error Is Nothing Then
firstAddress = c_error.Address
Do
c_error.Cells(2, 1).value = "Error"
Set c_error = .FindNext(c_error)
Loop While Not c_error Is Nothing And c_error.Address <> firstAddress
End If
End With
Grüße Uwe
Muss denn der ganze Wert der Zelle übereinstimmen oder nur ein Teil ?
wenn du nur nach einem Teil einer Zelle suchst musst du bei Zeile 2 den letzten Parameter auf 2 ändern.
ansonsten liegt der Fehler in einem Codeteil den ich hier nicht einsehen kann, bzw. der Code steht an einer Stelle die nicht immer ausgeführt wird.
Grüße Uwe
wenn du nur nach einem Teil einer Zelle suchst musst du bei Zeile 2 den letzten Parameter auf 2 ändern.
Set c_error = .Find("<Test",,-4163,2)
Grüße Uwe
Moin,
es kann nicht einfach ganz banal an der Zeile 1 liegen, die vielleicht nur bei colinardo gültig ist?
Ansonsten wäre eine etwas ausführlichere Beschreibung des ....
Grüße
Biber
es kann nicht einfach ganz banal an der Zeile 1 liegen, die vielleicht nur bei colinardo gültig ist?
With Worksheets(1).Range("a1:cc")
als erste Zeile wäre doch noch einen Versuch wert, oder?Ansonsten wäre eine etwas ausführlichere Beschreibung des ....
bei mir leider nicht. Wo auch immer der Haken ist ?. *Verzweifel*
..sinnvoll.Grüße
Biber
Codeabschnitt kopieren und in Excel im VBA-Editor(ALT-F11) in eine Sub-Prozedur einfügen und manuell Schritt für Schritt (F8) ausführen lassen und dabei die Variablen mit dem Debugger beobachten. So kannst du den Fehler eingrenzen.
Ansonsten schick mir kurz eine PM dann kannst du mir dein Sheet zuschicken und ich sehe mir das mal an, sonst wird das hier dieses Jahr nichts mehr. Uns fehlt hier nur der komplette Zusammenhang deines Scriptes und der Inhalt des Sheet's in denen es ausgeführt wird.
Grüße Uwe
Ansonsten schick mir kurz eine PM dann kannst du mir dein Sheet zuschicken und ich sehe mir das mal an, sonst wird das hier dieses Jahr nichts mehr. Uns fehlt hier nur der komplette Zusammenhang deines Scriptes und der Inhalt des Sheet's in denen es ausgeführt wird.
Grüße Uwe