Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBScript, Excel - Find in Range

Frage Entwicklung Batch & Shell

Mitglied: internet2107

internet2107 (Level 1) - Jetzt verbinden

13.08.2014, aktualisiert 09:07 Uhr, 1120 Aufrufe, 20 Kommentare, 4 Danke

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:

01.
' ##### neu hinzugefügt 13.08.2014 ANFANG ##### 
02.
With Worksheets(1).Range("a1:cc")  
03.
    Set c_error = .Find("<", lookin:=xlValues)  
04.
    If Not c_error Is Nothing Then 
05.
	    firstAddress = c_error.Address  
06.
        Do  
07.
        objColumn.Cells(2, 1).value = error  
08.
        Set c_error = .FindNext(c_error)  
09.
        Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
10.
    End If  
11.
End With 
12.
Next 
13.
 
14.
' ##### neu hinzugefügt 13.08.2014 ENDE ##### 
15.
 
16.
' ##### ab hier bisher Original ##### 
17.
  'Alle Elemente der Löschliste verarbeiten 
18.
  For Each strColumnHeader In arrColumnsToDelete 
19.
    'Alle verwendeten Spalten des Arbeitsblatts verarbeiten 
20.
    For Each objColumn In objActiveSheet.UsedRange.Columns 
21.
      'Wenn in Zeile 2 der Spalte einer der Spaltentitel aus der 
22.
      'Löschliste enthalten ist, die komplette Spalte löschen 
23.
      If objColumn.Cells(2, 1) = strColumnHeader Then 
24.
        objColumn.Delete 
25.
      End If 
26.
    Next 
27.
  Next
Was ist im oberen Codebereich (' neu hinzugefügt 13.08.2014 ) falsch, da ich bei der Ausführung einen Kompilieriungsfehler bekomme ?
Mitglied: colinardo
13.08.2014, aktualisiert 15.08.2014
Moin,
setze das kleiner als Zeichen in Anführungszeichen "<" , ohne ist es sonst kein String sondern wird als Operator interpretiert.

Grüße Uwe
Bitte warten ..
Mitglied: internet2107
13.08.2014 um 09:10 Uhr
Hallo Uwe,

DANKE. Jedoch hatte ich den Code eingefügt, dabei aber die Zeichen vergessen (noch mal aktualisiert), darum ist dein Vorschlag natürlich sehr gut, danke dafür, aber dennoch muss noch etwas falsch sein, weil er dennoch einen Fehler bringt.
Bitte warten ..
Mitglied: colinardo
13.08.2014, aktualisiert um 09:21 Uhr
Der Zellbezug a1:cc ist kein gültiger Zellbezug, und du hast ein Next in Zeile 12 alleine ohne dazugehöriges vorher auftauchendes for stehen...
Bitte warten ..
Mitglied: internet2107
13.08.2014 um 09:42 Uhr
OK, verstehe. Mein Fehler.

Geändert nun:
01.
With Worksheets(1).Range("a1", "cc") 
02.
Set c_error = .Find("<", lookin:=xlValues) 
03.
If Not c_error Is Nothing Then 
04.
firstAddress = c_error.Address 
05.
Do  
06.
objColumn.Cells(2, 1).value = error  
07.
Set c_error = .FindNext(c_error)  
08.
Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
09.
End If  
10.
End With 
11.
 
Dennoch immer wieder:
Kompilierungsfehler in Microsoft VBScript: ')' erwartet
Bitte warten ..
Mitglied: colinardo
13.08.2014, aktualisiert 15.08.2014
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 !
01.
With objActiveSheet.Range("A:CC") 
02.
	Set c_error = .Find("<",,-4163,1) 
03.
	If Not c_error Is Nothing Then 
04.
		firstAddress = c_error.Address 
05.
		Do  
06.
			c_error.Cells(2, 1).value = "Error" 
07.
			Set c_error = .FindNext(c_error)  
08.
		Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
09.
	End If  
10.
End With
VBA is not VBS, da gibt es einige Unterschiede zu beachten !
Bitte warten ..
Mitglied: internet2107
13.08.2014 um 09:59 Uhr
Oh man.. es ist früh am Morgen.. DANKE.. meine eigene Dummheit.
Jetzt klappt es.
Bitte warten ..
Mitglied: internet2107
15.08.2014 um 09:37 Uhr
Hallo an alle,
Hallo @colinardo

Ich habe erst heute wieder die Zeit gefunden, noch mal mit dieser Änderung zu arbeiten, also einen Test zu machen. Vorgestern schrieb ich zwar, dass er nun klappt, damit meinte ich aber nur, dass die Ausführung des Scripts nun ohne Kompilierungsfehler klappt.

Leider aber bekomme ich nicht das Ergebnis, was gewünscht ist. 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 ?.

Hier noch mal der bisherige Code.

01.
With objActiveSheet.Range("A:CC") 
02.
	Set c_error = .Find("<Test",,-4163) 
03.
	If Not c_error Is Nothing Then 
04.
		firstAddress = c_error.Address 
05.
		Do  
06.
			objColumn.Cells(2, 1).value = Error  
07.
			Set c_error = .FindNext(c_error)  
08.
		Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
09.
	End If  
10.
End With 
11.
 
Danke im Voraus.
Bitte warten ..
Mitglied: colinardo
15.08.2014, aktualisiert um 11:09 Uhr
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 ?
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-Objekt
c_error.Cells(2, 1).value = "Error"
Grüße Uwe

-edit- Objekt korrigiert
Bitte warten ..
Mitglied: internet2107
15.08.2014 um 11:00 Uhr
Zitat von colinardo:
warum suchst du dann nur in A:CC ?
weil die Tabelle nicht mehr als bis CC groß ist.
Wenn ich es ändere auf:
01.
With objActiveSheet.Range
ja... der Fehler liegt in Zeile 6, du setzt den String-Wert nicht in Anführungszeichen!
01.
 objColumn.Cells(2, 1).value = "Error" > 
OK, habe ich geändert auf
01.
objColumn.Cells(2, 1).value = "Error"
Aber dennoch verändert sich rein gar nichts.
Sorry, wenn ich so oft frage, aber von VBS habe ich leider sehr wenig Erfahrung.
Bitte warten ..
Mitglied: colinardo
15.08.2014, aktualisiert um 11:06 Uhr
s. korrigierter Code oben, das Objekt war noch nicht i.O..
Bitte warten ..
Mitglied: internet2107
15.08.2014 um 11:34 Uhr
colinardo

Danke für deine Hilfe bis jetzt. Doch leider
Ich habe nun alles so geändert wie du es vorgeschlagen hast, um keine Missverständnisse aufkommen zu lassen, hier der aktuelle Code.

01.
With objActiveSheet.Range 
02.
	Set c_error = .Find("<Test",, -4163) 
03.
	If Not c_error Is Nothing Then 
04.
		firstAddress = c_error.Address 
05.
		Do  
06.
			c_error.Cells(2, 1).value = "Error" 
07.
			Set c_error = .FindNext(c_error)  
08.
		Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
09.
	End If  
10.
End With
Bitte warten ..
Mitglied: colinardo
15.08.2014, aktualisiert um 11:47 Uhr
schon wieder Fehler in deiner Zeile1, es fehlt der range und eine 1 in Zeile 2
With objActiveSheet.Range
Bitte warten ..
Mitglied: colinardo
15.08.2014, aktualisiert um 11:50 Uhr
Ich hatte den Code oben doch schon funktionsfähig gepostet, hier also nochmal:
01.
With objActiveSheet.Range("A:CC") 
02.
	Set c_error = .Find("<Test",,-4163,1) 
03.
	If Not c_error Is Nothing Then 
04.
		firstAddress = c_error.Address 
05.
		Do  
06.
			c_error.Cells(2, 1).value = "Error" 
07.
			Set c_error = .FindNext(c_error)  
08.
		Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
09.
	End If  
10.
End With
funktioniert einwandfrei.

Grüße Uwe
Bitte warten ..
Mitglied: internet2107
15.08.2014 um 12:05 Uhr
Ich habe nun definitiv diesen Code (hatte den geänderten vorher nicht gesehen):

01.
With objActiveSheet.Range("A:CC") 
02.
	Set c_error = .Find("<Test",,-4163,1) 
03.
	If Not c_error Is Nothing Then 
04.
		firstAddress = c_error.Address 
05.
		Do  
06.
			c_error.Cells(2, 1).value = "Error" 
07.
			Set c_error = .FindNext(c_error)  
08.
		Loop While Not c_error Is Nothing And c_error.Address <> firstAddress  
09.
	End If  
10.
End With
Dennoch:
funktioniert einwandfrei.
bei mir leider nicht. Wo auch immer der Haken ist ?. *Verzweifel*
Bitte warten ..
Mitglied: colinardo
15.08.2014, aktualisiert um 16:39 Uhr
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.

Set c_error = .Find("<Test",,-4163,2) 
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
Bitte warten ..
Mitglied: Biber
15.08.2014 um 16:52 Uhr
Moin,

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
Bitte warten ..
Mitglied: internet2107
16.08.2014 um 16:37 Uhr
Hallo Ihr beiden. Danke für die beiden Antworten. Ich bin erst gerade nach Hause gekommen, werde mich gleich mal mit beiden Dingen noch mal beschäftigen und dann Feedback geben. Danke erstmal.
Bitte warten ..
Mitglied: internet2107
16.08.2014 um 19:11 Uhr
Hallo noch mal, zusammen.

Ich habe nun Zeit gehabt, beide Vorschläge noch mal zu testen. Leider hat sich nichts verändert.

Zu deiner Frage @Biber:
"Ansonsten wäre eine etwas ausführlichere Beschreibung des ....
bei mir leider nicht. Wo auch immer der Haken ist ?. *Verzweifel*
..sinnvoll."

Wenn ich ja eine ausführlichere Beschreibung geben könnte. Das VBScript wird ohne Fehler ausgeführt, er macht in dem Script alles andere, was es soll, nur der gewünschte Fall tritt nicht ein.
Ich kann aber auch nicht sehen, wo er evtl. etwas nicht versteht ?. Also, ob er überhaupt das gewünschte Wort findet und/oder ob er was in die Zeit schreibt. Leider bin ich, so wie z.B. Ihr, in VBScript nicht so gebildet um hier ggf. auf Fehlersuche zu gehen.
Kann ich nicht z.B. die Schritte die das Script abzuarbeiten hat, nicht in eine Textdatei schreiben lassen, um so ggf. den Fehler zu erkennen ??
Bitte warten ..
Mitglied: colinardo
16.08.2014, aktualisiert um 21:14 Uhr
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
Bitte warten ..
Mitglied: internet2107
17.08.2014 um 14:04 Uhr
Ich habe dir eine PN gesendet. Danke im Voraus.
Bitte warten ..
Neuester Wissensbeitrag
DSL, VDSL

Telekom blockiert immer noch den Port 7547 in ihrem Netz

(3)

Erfahrungsbericht von joachim57 zum Thema DSL, VDSL ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel: Text in Zellbereich prüfen mit Vergleichstext ggf. mit Exact-Funktion (5)

Frage von Michi1 zum Thema Microsoft Office ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Microsoft Office
gelöst Excel-Formel oder VBA (7)

Frage von nicki01 zum Thema Microsoft Office ...

Microsoft Office
Prüfung von Intervallen und Textausgabe in Excel (2)

Frage von traller zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...