Thema Datum  Von Nutzer Rating
Antwort
Rot mehrere excel blätter bearbeiten (VBA .xlsx - .csv)
01.08.2018 16:48:52 jens
NotSolved
01.08.2018 17:48:16 Gast98756
Solved
02.08.2018 16:01:39 jens
NotSolved
02.08.2018 20:40:03 Gast37587
*****
Solved

Ansicht des Beitrags:
Von:
jens
Datum:
01.08.2018 16:48:52
Views:
1206
Rating: Antwort:
  Ja
Thema:
mehrere excel blätter bearbeiten (VBA .xlsx - .csv)

Schönen guten Abend, 

ich hätte da ein, anscheind nicht sehr alltägliches Problem. Bin leider absolut neu und unerfahren in der verwendung von Excle bzw. VBA, hoffe deshalb hier den richtige Tipp zu bekommen. Nun aber zu meinem Anliegen.

Ich muss in 560 Excel Datein, die Werte 90 in CB und 50 in CC bis Zeile 400, einfügen wenn machbar : nur bis zur letzten Zeile in dem Excel dokument?!).

Das ist natürlich relativ schnell mit einem Makro erledigt.  

Ich habe da auch etwas herumgegoogelt und versucht mir was zusammen zu basteln. 

Mein erster versuch sieht so aus :

Sub Zeta_Werte_einfuegen()
    Dim strFile As String
    
    Application.ScreenUpdating = False 'dekativiert das aufpopen der Excel Fenster
    
    strPath = "C:\Users\......\"    'Pfad des Verzeichnisses, endet mit \
    strExt = "*.*"      'Dateiextension kann geändert werden, z.B. "*.xlsx" für Excel Dateien oder "*.*" für alle Dateitypen

    If strPath = "" Then
        Exit Sub
    Else
        strFile = Dir(strPath & strExt)
        Do While Len(strFile) > 0
            Workbooks.Open Filename:=strPath & strFile
                             
                                               
                Range("CB2").Select
                ActiveCell.FormulaR1C1 = "90"
                Selection.AutoFill Destination:=Range("CB2:CB400"), Type:=xlFillDefault
                Range("CB2:CB400").Select
    
                Range("CC2").Select
                ActiveCell.FormulaR1C1 = "50"
                Selection.AutoFill Destination:=Range("CC2:CC400"), Type:=xlFillDefault
                Range("CC2:CC40").Select
    
                
                
            Workbooks(strFile).Close True  ' Arbeitsmappe wird geschlossen und gespeichert
            strFile = Dir()                 ' nächste Datei wird ermittelt
        Loop
    End If
End Sub

 

Das ist ne richtig coole sache , da in dem Ordner in dem sich alle Excel Datein befinden, alle Werte automatisch geändert werden.

Nun kommt mein eigentliches Problem

Ich verwende leider keine normalen .xlsx datein, sondern .csv (MS DOS) Datein. 

Und wenn man ein makro wie das obrige auf diese .csv Datein anwedet, werden die Werte 90 und 50 in spalte "a" ab zeile 70 geschrieben. Mit 29 (a->cc) punkten davor. 

 

Nachdem ich also das problem identifierziert habe , es also am Dateiformat hängt, wollte ich ein 3 schritt workaround probieren. 

Schirtt 1: die vorhandenen .csv(MS DOS) Datein aus einem Ordner neu abgespeichert als .xlsx in einem neuen Ordner abspeichern. 

Dim FSO As Object
    Dim folder As Object
    Dim wb As Object
    
    csvPath = "C:\Users\...\Desktop\scv_ordner\"
    xlsPath = "C:\Users\....\Desktop\neue_xlsx\"
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set CSVfolder = FSO.GetFolder(csvPath)
    
    If FSO.FolderExists(xlsPath) = False Then
        FSO.createFolder (xlsPath)
    End If
    
    Set XlsFolder = FSO.GetFolder(xlsPath)
    
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
        
    For Each wb In CSVfolder.Files
        If LCase(Right(wb.Name, 3)) = "csv" Then
            Set activeWB = Workbooks.Open(wb)
            activeWB.SaveAs Filename:=xlsPath & "\" & Left(activeWB.Name, Len(activeWB.Name) - 3) & "xlsx", FileFormat:=xlOpenXMLWorkbook
            activeWB.Close True
        End If
    Next
    
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub

 

Schritt 2:

Wie der erste gepostete Code.

 

und Schritt 3 :

Wieder von .xlsx in .csv (MS DOS) zurück umwandeln.

Public Sub XLSX_zu_CSV()

    Dim FSO As Object
    Dim folder As Object
    Dim wb As Object
    
    csvPath = "C:\Users\....\Desktop\test ordner\neue_csv\"
    xlsPath = "C:\Users\....\Desktop\test ordner\neue_xlsx\"
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set CSVfolder = FSO.GetFolder(csvPath)
    
    If FSO.FolderExists(xlsPath) = False Then
        FSO.createFolder (xlsPath)
    End If
    
    Set XlsFolder = FSO.GetFolder(xlsPath)
    
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
        
    For Each wb In XlsFolder.Files
        If LCase(Right(wb.Name, 3)) = "xlsx" Then
            Set activeWB = Workbooks.Open(wb)
            activeWB.SaveAs Filename:=xlsPath & "\" & Left(activeWB.Name, Len(activeWB.Name) - 3) & "csv", FileFormat:=xlCSVMSDOS
            activeWB.Close True
        End If
    Next
    
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub

 

 

Dem profi wird natürlich sofort auffallen das an den ganzen Codes irgendwas nicht stimmt.

Es tut mir wirklich leid, ich hab bei dem ganzen gesuche im Internet immer mehr cba codes gefunden die helfen sollten, es nicht mit meinem wissen, getan haben und ich habe es mit meinem herumgefusche mit nichten besser gemacht. Die oben beschriebenen Codes sollen eigentlich nur meine unfähigkeit zeigen, und das ich es bis hier her versucht habe. Leider hab ich nie etwas in die richtung gelernt und brauche vba in der regel nicht.

 

Danke an alle die bis hier her gelesen haben. Ich wünsche euch noch ein schönen Tag.

Grüße , Jens


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot mehrere excel blätter bearbeiten (VBA .xlsx - .csv)
01.08.2018 16:48:52 jens
NotSolved
01.08.2018 17:48:16 Gast98756
Solved
02.08.2018 16:01:39 jens
NotSolved
02.08.2018 20:40:03 Gast37587
*****
Solved