peterchen1976
Goto Top

Rechnen oder ersetzten hat jemand eine Idee

Hallo,
folgendes Problem: Ich möchte in einer Datei (mir ist es egal in welchem Format) folgendes abändern...

If Not zelle Is Nothing Then
If zelle.Address = ("$C$15") Then
ActiveSheet.Range("C15").Interior.ColorIndex = 2
End If
End If
Set zelle = Target

Die "15" soll nun plus 40 also 55 da stehen.

In der nächsten Spalte dann

If Not zelle Is Nothing Then
If zelle.Address = ("$C$16") Then
ActiveSheet.Range("C16").Interior.ColorIndex = 2
End If
End If
Set zelle = Target

"16" plus 40 also 56

Die Liste geht immer so weiter bis "C98"

um nicht immer alles von hand ändern zu müssen... hat jemand einen Idee?

Gruß Peterchen

Content-ID: 249833

Url: https://administrator.de/contentid/249833

Ausgedruckt am: 15.11.2024 um 21:11 Uhr

ITvortex
ITvortex 22.09.2014 aktualisiert um 16:23:28 Uhr
Goto Top
Bitte Code Tags hinzufügen </code(>)

lg
Friemler
Friemler 23.09.2014 aktualisiert um 00:36:59 Uhr
Goto Top
Hallo Peterchen,

das lässt sich leicht mit Regular Expressions lösen, hier in VBScript:
Option Explicit


'Konstanten für Ein-/Ausgabe  
Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8

'Suchmuster  
Const Pattern1 = "(.*If zelle\.Address = \(""\$C\$)([1-9][0-9])(""\) Then.*)"  
Const Pattern2 = "(.*ActiveSheet\.Range\(""C)([1-9][0-9])(""\)\.Interior\.ColorIndex = 2.*)"  


'Deklaration der Variablen  
Dim objArgs, objFSO, objInStream, objOutStream, objRegExp
Dim strInFilePath, strOutFilePath, arrFileContent


'Hauptprogramm  
Set objFSO  = CreateObject("Scripting.FileSystemObject")  
Set objArgs = WScript.Arguments

If ParseCommandLine(objArgs) Then
  Set objInStream = objFSO.OpenTextFile(strInFilePath, ForReading, False)
  arrFileContent  = Split(objInStream.ReadAll, vbCrLf)
  objInStream.Close

  Set objRegExp        = New RegExp
  objRegExp.Global     = True
  objRegExp.IgnoreCase = True

  Call ReplaceNumbers(arrFileContent, Pattern1)
  Call ReplaceNumbers(arrFileContent, Pattern2)

  Set objOutStream = objFSO.OpenTextFile(strOutFilePath, ForWriting, True)
  objOutStream.Write Join(arrFileContent, vbCrLf)
  objOutStream.Close
End If



'---------------------------------------------------------------------------  
'Unterprogramme  
'---------------------------------------------------------------------------  

'///////////////////////////////////////////  
'Ersetzungen ausführen  
'///////////////////////////////////////////  
Sub ReplaceNumbers(ByRef arrFileContent, ByRef strPattern)
  Dim intLineCnt, objMatch

  objRegExp.Pattern = strPattern

  For intLineCnt = 0 To UBound(arrFileContent)
    For Each objMatch In objRegExp.Execute(arrFileContent(intLineCnt))
      If objMatch.SubMatches.Count > 0 Then
        arrFileContent(intLineCnt) = objMatch.SubMatches(0) & CStr(CInt(objMatch.SubMatches(1)) + 40) & objMatch.SubMatches(2)
      End If
    Next
  Next
End Sub


'///////////////////////////////////////////  
'Befehlszeile einlesen und Name von Ein-  
'und Ausgabedatei ermitteln  
'///////////////////////////////////////////  
Function ParseCommandLine(ByRef objArgs)
  ParseCommandLine = False

  If objArgs.Count > 0 Then
    strInFilePath = objFSO.GetAbsolutePathName(objArgs(0))

    If objFSO.FileExists(strInFilePath) Then
      strOutFilePath = objFSO.BuildPath(objFSO.GetParentFolderName(strInFilePath), _
                                        objFSO.GetBaseName(strInFilePath) _
                                        & "_neu." _  
                                        & objFSO.GetExtensionName(strInFilePath))
      ParseCommandLine = True
    End If
  End If
End Function

Den Code z.B. als rexplace.vbs speichern und dann mit
cscript /nologo rexplace.vbs "Pfad-zur-zu-ändernden-Datei"
aufrufen. Du kannst die Eingabedatei auch per Drag'n Drop auf der Scriptdatei fallen lassen.

Das Script erzeugt eine neue Datei, deren Name sich aus <NameDerEingabedatei>+_neu.+<Erweiterung> zusammensetzt

Gruß
Friemler
peterchen1976
peterchen1976 24.09.2014 um 08:02:21 Uhr
Goto Top
@ Friemler

Vielen Dank für Deine Hilfe brauche noch ein wenig Unterstützung worein muss ich es kopieren? Habe nur Visual Basic Express
Friemler
Friemler 24.09.2014 aktualisiert um 09:22:15 Uhr
Goto Top
Einfach als Textdatei mit der Dateinamenserweiterung .vbs speichern und so wie oben beschrieben aufrufen. Der VBScript-Interpreter cscript.exe ist auf jedem Windows-System vorhanden.

[EDIT]
Ich habe gerade erste Deine PM gelesen.

  1. Wenn es Probleme gibt, bitte immer im Thread ein neues Posting erstellen.
  2. Bei mir läuft das Script ohne Fehler. Wenn das bei Dir nicht der Fall ist, liegt es an der Eingabedatei. Du müsstest dann mal einen Ausschnitt der realen Datei hier einstellen und dabei Codetags verwenden.
[/EDIT]
peterchen1976
peterchen1976 25.09.2014 um 12:21:59 Uhr
Goto Top
Hallo und vielen Dank für diese Lösung ....

Hat super geklappt...


Peter