newbie89
Goto Top

Excel In mehreren Exceldateien Texte auslesen u in neue Spalte mit Zahlenformat einfügen

Hallo.

Bin neu hier und habe aber sogleich eine wichtige Frage (für mich jedenfalls). Kenne micht mit VBA usw. leider nicht so gut aus, aber sollte jetzt dennoch etwas zustande bekommen. Folgendes Problem:

In einem Ordner X sind mehrere Excel-Dateien (immer selber Formatierung) und in einer Spalte Y steht ein gewisser Wert (00,00 l) in jeder Zeile. So das 1. Problem ist, das ich nur die Zahlen brauche ohne das l (=Liter) und diese Werte müssen dann eine Spalte weiter rechts (ist frei) kopiert werden! So und nun sollen alle Werte über 40 fett und rot markiert werden!!

Und diese Prozedur sollte in allen Excel-Tabellen in diesem Ordner statt finden. Am besten wäre wenn dies dann per .vbs oder .bat (weiß ja nicht welche es sein muss) ausführbar sein. Geht das?

Ich bedanke mich jetzt schon für eine rasche Antwort. Bei evt. Rückfragen stehe ich gerne zur Verfügung.


Danke.


lg

Content-Key: 92523

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

Printed on: April 24, 2024 at 11:04 o'clock

Member: bastla
bastla Jul 21, 2008 at 14:18:00 (UTC)
Goto Top
Hallo newbie89 und willkommen im Forum!

Als VBScript etwa so:
Ordner = "D:\X"  
AbZeile = 3 'Einträge ab dieser Zeile suchen  
Spalte = "Y"  
Wert = 40 'Grenzwert für Formatierung  

Set fso = CreateObject("Scripting.FileSystemObject")  

Set oXL = CreateObject("Excel.Application")  
Const xlCellValue = 1
Const xlGreater = 5

'Alle Dateien des angegebenen Ordners ...  
For Each oExcelDatei In fso.GetFolder(Ordner).Files
    '... erfassen, und, falls der Typ "xls" ist, bearbeiten  
    If LCase(fso.GetExtensionName(oExcelDatei.Name)) = "xls" Then  
        'Datei öffnen  
        oXL.Workbooks.Open oExcelDatei.Path
        Zeile = AbZeile
        'Solange die vorgegebene Spalte Einträge enthält  
        Do While oXL.Cells(Zeile, Spalte).Value <> ""  
            'Rechte Nachbarzelle ...  
            With oXL.Cells(Zeile, Spalte).Offset(0, 1)
                '... mit Zahlenwert ohne " l" füllen ...  
                .Value = CDbl(Replace(oXL.Cells(Zeile, Spalte).Value, " l", ""))  
                '... und Bedingte Formatierung erstellen  
                .FormatConditions.Add xlCellValue, xlGreater, Wert
                With .FormatConditions(1).Font
                    .Bold = True
                    .ColorIndex = 3 'Rot  
                End With
            End With
            Zeile = Zeile + 1
        Loop
        'Datei schließen und speichern  
        oXL.ActiveWorkbook.Close True
    End If
Next
	
oXL.Application.Quit
Du solltest vielleicht einmal nur mit 2 Dateien (Kopien) in einem Ordner testen ...

Noch eine Anmerkung: Es wird die beim Öffnen der jeweiligen Exceldatei aktuelle Tabelle bearbeitet.

Grüße
bastla
Member: newbie89
newbie89 Jul 21, 2008 at 14:39:16 (UTC)
Goto Top
hallo face-smile

Das hat prima funktioniert! Komischerweise hat das Skript aber bis zu 2x eine Zahl unter 40 auch formatiert. Sonst hat es bis jetzt einwandfrei funktioniert. Herzlichen Dank!!

Aber gibt es eine Möglichkeit diesen Fehler auszubessern oder wieso ist das passiert?

lg u danke face-smile


zusätzlich:
Also beim 1. Mal ausführen hat alles geklappt . Wurde wunderbar formatiert. und nun bekomme ich folgende Meldung immer wieder:

http://c.imagehost.org/view/0362/fehler.jpg


Aber den Code habe ich genauso belassen:

Ordner = "C:\Dokumente und Einstellungen\AndreaHoedl\Eigene Dateien\Timur"
AbZeile = 2 'Einträge ab dieser Zeile suchen
Spalte = "B"
Wert = 40 'Grenzwert für Formatierung

Set fso = CreateObject("Scripting.FileSystemObject")

Set oXL = CreateObject("Excel.Application")
Const xlCellValue = 1
Const xlGreater = 5

'Alle Dateien des angegebenen Ordners ...
For Each oExcelDatei In fso.GetFolder(Ordner).Files
'... erfassen, und, falls der Typ "xls" ist, bearbeiten
If LCase(fso.GetExtensionName(oExcelDatei.Name)) = "xls" Then
'Datei öffnen
oXL.Workbooks.Open oExcelDatei.Path
Zeile = AbZeile
'Solange die vorgegebene Spalte Einträge enthält
Do While oXL.Cells(Zeile, Spalte).Value <> ""
'Rechte Nachbarzelle ...
With oXL.Cells(Zeile, Spalte).Offset(0, 1)
'... mit Zahlenwert ohne " l" füllen ...
.Value = CDbl(Replace(oXL.Cells(Zeile, Spalte).Value, " l", ""))
'... und Bedingte Formatierung erstellen
.FormatConditions.Add xlCellValue, xlGreater, Wert
With .FormatConditions(1).Font
.Bold = True
.ColorIndex = 3 'Rot
End With
End With
Zeile = Zeile + 1
Loop
'Datei schließen und speichern
oXL.ActiveWorkbook.Close True
End If
Next

oXL.Application.Quit
Member: bastla
bastla Jul 21, 2008 at 14:47:09 (UTC)
Goto Top
Hallo newbie89!

Aber gibt es eine Möglichkeit diesen Fehler auszubessern oder wieso ist das passiert?
Wahrscheinlich; keine Ahnung.

Es wird eine "Bedingte Formatierung" verwendet - schau doch einmal für die betreffenden Zellen nach ("Format / Bedingte Formatierung..."), ob Dir etwas auffällt.

Grüße
bastla
Member: newbie89
newbie89 Jul 21, 2008 at 14:55:48 (UTC)
Goto Top
hab das mit der bedingten formatierung mal gecheckt. also ab und zu geht es ganz normal und dann wiederum kommt der fehler. es ist ganz verschieden. aber irgnd. ist da kein system hinter den fehlern ;) ... weil ab und zu ist eine bedingte formatierung vorhanden und es geht nicht. und ab und zu nicht. und wenn ich das skript das 2. mal starte ist es auch 1x nicht gegangen...

und jetzt geht es wieder ;P ... wenn ich herausfinde an was es liegt melde ich mich. vielen dank für die hilfe.

lg