Office: (Office 365) VBA Makro einfügen CSV, verarbeiten und abspeichern

Helfe beim Thema VBA Makro einfügen CSV, verarbeiten und abspeichern in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, erstmal vorab meine VBA Kenntnisse sind sehr rudimentär. Aufgabenstellung in Kurz: Ich hab 2 Dateien, eine Hauptdatei... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Mark-AD, 8. September 2022.

  1. Mark-AD Neuer User

    VBA Makro einfügen CSV, verarbeiten und abspeichern


    Hallo zusammen,

    erstmal vorab meine VBA Kenntnisse sind sehr rudimentär.

    Aufgabenstellung in Kurz:

    Ich hab 2 Dateien, eine Hauptdatei (IDXXXX_8x8_GV-contrast.xlsm) und eine CSV die folgendermaßen Beispielhaft benannt ist ID06850.csv (die Nummern ändern sich, Name bleibt immer gleich lang).

    Ich hab nun die Herausforderung ein Makro zu schreiben, dass sich in einer Excel Datei befindet in der 2 Arbeitsblätter sind (grey value mesh 8x8, Graph).

    In diese Hauptdatei möchte ich aus einer CSV Datei meiner Wahl (anfangend aus dem selben Ordner in dem diese Hauptdatei liegt), einen Teil (immer Zeile 2-65 und Spalte A-D, Zeile 1 ist Überschrift die brauch ich nicht) daraus importierten.

    Diese Daten sollen in der Haupdatei im Blatt "grey value mesh 8x8" in Zeile 2-65 und Spalte B-E einfgefügt werden.

    !Dieser Teil ist teilweise geschafft. Das Makro startet bei der Dateiauswahl nur nicht im selben Ordner im dem die Hauptdatei liegt!

    Um folgendes möchte ich das Makro noch erweitern:
    1. Das was oben fehlt, das Makro soll beim "Öffnen Fenster" da Anfangen wo die Hauptdatei liegt.
    2. Aus dem Namen der gewählten CSV Datei im Blatt "Graph" in Feld H12 die Nummer der ID eintragen (nur die Nummer ohne ID davor und .csv dahinter)
    3. In dem Ordner in dem sich die Haupdatei befindet, soll dann die Datei als ID06850_8x8_GV-contrast.xlsm abgespeichert werden.
    4. Die Hauptdatei (IDXXXX_8x8_GV-contrast.xlsm) soll weiter offen bleiben und die .csv mit der gerade gearbeitet wurde geschlossen werden.

    Folgendermaßen schaut das Makro momentan aus:

    Sub importCSV()
    '
    ' importCSV Makro
    '
    ' Tastenkombination: Strg+ä
    '
    strOpenFile = Application.GetOpenFilename(, , "Please choose CSV:")
    Workbooks.OpenText Filename:= _
    strOpenFile, Origin:=65001, StartRow _
    :=2, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
    , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
    Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
    Range("A1:D64").Select
    Selection.Copy
    Windows("IDXXXX_8x8_GV-contrast.xlsm").Activate
    Range("B2").Select
    ActiveSheet.Paste
    End Sub


    Das Makro wurde aufgenommen und da hab ich beim import schon angeklickt das er ab Zeile 2 anfangen soll und Zeile 1 garnicht erst mitnimmt.

    Wäre für jede Hilfe dankbar, da ich hierzu nichts praktikables gefunden hab bis jetzt.

    Gruß Mark
     
  2. d'r Bastler
    d'r Bastler hat Ahnung
    d'r Bastler, 8. September 2022
    #2
    1 Person gefällt das.
  3. Mark-AD Neuer User
    Hi vielen Dank für den Tipp.

    Leider steht da "nur" wie ich aus einem bestimmten Ordner die Datei laden kann, nicht aber wie er den Ordner im Fenster schon anwählt in dem die Hauptdatei liegt. Der Ordner in den ich die Hauptdatei immer reinkopiere ändert sich vom Namen immer (laufende Auftragsnummer usw... ).

    Hast du da n Tipp?

    Gruß Mark
     
  4. Exl121150 Erfahrener User

    VBA Makro einfügen CSV, verarbeiten und abspeichern

    Hallo,

    folgendes Makro sollte dafür Abhilfe schaffen:
    Code:
    Option Explicit
    
    Sub importCSV()
    '
    ' importCSV Makro
    '
    ' Tastenkombination: Strg+ä
    '
       Dim strOpenFile As String
      
       With Application.FileDialog(fileDialogType:=msoFileDialogFilePicker)
         .AllowMultiSelect = False
         .InitialView = msoFileDialogViewDetails
         .InitialFileName = ActiveWorkbook.Path
         .Title = "Please choose CSV:"
         With .Filters
           .Clear
           .Add "CSV-Dateien", "*.CSV", 1
         End With
         If .Show = -1 Then
           strOpenFile = .SelectedItems(1)
         End If
       End With
      
    '   strOpenFile = Application.GetOpenFilename(, , "Please choose CSV:")
      
       Workbooks.OpenText Filename:=strOpenFile, Origin:=65001, StartRow:=2, _
         DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
         ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
         FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
      
       Range("A1:D64").Copy Destination:=Worksheets("Zielblatt").Range("B2")
      
    '   Range("A1:D64").Select
    '   Selection.Copy
    '   Windows("IDXXXX_8x8_GV-contrast.xlsm").Activate
    '   Range("B2").Select
    '   ActiveSheet.Paste
    
    End Sub
    

    In der letzten Codezeile musst du statt "Zielblatt" den Namen des Arbeitsblattes einsetzen, in dem die Zielzelle B2 liegt.
     
    Exl121150, 9. September 2022
    #4
    1 Person gefällt das.
  5. Exl121150 Erfahrener User
    Hallo,

    die letzte Codezeile muss natürlich heißen:
    Range("A1:D64").Copy Destination:=ThisWorkbook.Worksheets("Zielblatt").Range("B2")
    wobei wiederum "Zielblatt" zu ersetzen ist mit dem richtigen Arbeitsblattnamen des Kopierzieles. Dabei muss sich "Zielblatt" in derselben Arbeitsmappe befinden, in der sich auch das Makro befindet.
     
    Exl121150, 9. September 2022
    #5
    1 Person gefällt das.
  6. Mark-AD Neuer User
    Super das funktioniert ja mega :D. Danke. Jetzt muss ich mich "nur" noch um das Speichern und schließen kümmern.
     
  7. Mark-AD Neuer User
    Ok für den Namen hab ich folgenden Lösungsansatz:
    Dim blattname As String
    Application.Volatile
    blattname = ActiveSheet.Name
    Sheets("ThisWorkbook.Worksheets("Graph").Range("H12")").Range("A1")").Value = blattname

    Bis blattname = ActiveSheet.Name is alles tutti nur will er mir es nicht in mein anderes Workbook schreiben mit folgender Fehlermeldung: Fehler beim kompilieren erwartet Listentrennzeichen oder).

    Screenshot:

    VBA Makro einfügen CSV, verarbeiten und abspeichern upload_2022-9-9_12-28-26.png

    Hat wer nen tipp wie ich die Variable blattname in meinem Hauptdokument im Blatt Graph in Zelle H12 angezeigt bekomme?

    Danke schonmal

    Mark
     
  8. Exl121150 Erfahrener User

    VBA Makro einfügen CSV, verarbeiten und abspeichern

    Hallo,
    was willst du mit dieser Zuweisungszeile erreichen? Außer dass du den Namen des aktiven Arbeitsblattes an irgendwelche Zellen des Arbeitsblattes "Graph" zuweisen möchtest, verstehe ich überhaupt nichts - und VBA ist natürlich damit total überfordert.
    Zu sehen sind die beiden Zellen A1 und H12 - was soll mit diesen geschehen?
     
    Exl121150, 9. September 2022
    #8
    1 Person gefällt das.
  9. Exl121150 Erfahrener User
    Hallo,
    ThisWorkbook.Worksheets("Graph").Range("H12").Value = blattname
     
    Exl121150, 9. September 2022
    #9
    1 Person gefällt das.
  10. Mark-AD Neuer User
    Also ich möchte erreichten das er mir den Namen des aktiven Arbeitsblattes in die Hauptdatei IDXXXX_8x8_GV-contrast.xlsm im selben Ordner (die is ja schon offen) auf auf das Arbeitsblatt Graph Zelle H12 schreibt. Das .Range("A1") war n copy paste fehler den ich nicht gesehen habe.
     
  11. Mark-AD Neuer User
    Wow das funktioniert ja super. Gibt es eine möglichkeit dann automatisch am Schluss die Datei mit dem blattnamen_8x8_GV-contrast.xlsm extra zu speichern. Ich mein ohne das er die Hauptdatei die offen ist abspeichert?

    Anders ausgedrückt, er erstellt danach aus der Hauptdatei im Hintergrund die Datei (Beispiel) ID06850_8x8_GV-contrast.xls und die Hauptdatei wird nicht gespeichert.

    Geht das? Wenn ja wie?
     
  12. Exl121150 Erfahrener User
    Hallo,

    mit der folgenden Anweisung wird die Excel-Datei mit dem Makro und den beiden Arbeitsblättern "grey value mesh 8x8" und "Graph" als Kopie unter dem neuen Namen Blattname & "_8x8_GV-contrast.xlsm" gespeichert, wobei der Inhalt der Variablen Blattname vom CSV-Dateinamen herrührt.
    Wenn die Variable Blattname den Inhalt "ID06850" hat, wird eine Kopie der Excel-Datei mit Dateiname "ID06850_8x8_GV-contrast.xlsm" im ebenfalls anzugebenden Pfad gespeichert:

    ThisWorkbook.SaveCopyAs Filename:="Pfad\" & Blattname & "_8x8_GV-contrast.xlsm"
     
    Exl121150, 9. September 2022
    #12
    1 Person gefällt das.
  13. Mark-AD Neuer User

    VBA Makro einfügen CSV, verarbeiten und abspeichern

    Hi, super danke das du mir da grad so viel hilfst. Jetzt hab ich das Problem das der Pfad praktisch immer der sein muss wo die Hauptdatei drin liegt. Ich habs versucht mit ActiveWorkbook.Path

    ThisWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & blattname & "_8x8_GV-contrast.xlsm"

    Nur des interessiert ihn nicht. (Hab die Zeile mal auskommentiert, war noch aus nem versuch obs mit "" geht, Überraschung tuts nicht.)

    Hier mal der ganze code:

    Sub importCSV()
    '
    ' importCSV Makro
    '
    ' Tastenkombination: Strg+ä
    '

    'Datei öffnen

    Dim strOpenFile As String

    With Application.FileDialog(fileDialogType:=msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .InitialView = msoFileDialogViewDetails
    .InitialFileName = ActiveWorkbook.Path
    .Title = "Please choose CSV:"
    With .Filters
    .Clear
    .Add "CSV-Dateien", "*.CSV", 1
    End With
    If .Show = -1 Then
    strOpenFile = .SelectedItems(1)
    End If
    End With

    'CSV verarbeiten

    Workbooks.OpenText Filename:=strOpenFile, Origin:=65001, StartRow:=2, _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True

    Range("A1:D64").Copy Destination:=ThisWorkbook.Worksheets("grey value mesh 8x8").Range("B2")

    'Name aus CSV holen und einfügen
    Dim blattname As String
    Application.Volatile
    blattname = ActiveSheet.Name
    ThisWorkbook.Worksheets("Graph").Range("H12").Value = blattname

    'Sichern der Hauptdatei mit blattname

    'ThisWorkbook.SaveCopyAs Filename:="ActiveWorkbook.Path\" & blattname & "_8x8_GV-contrast.xlsm"

    'Schließen der CSV

    ActiveWorkbook.Close SaveChanges = False

    'Aktivieren der Haupdatei

    Windows("IDXXXX_8x8_GV-contrast.xlsm").Activate

    End Sub
     
    Zuletzt bearbeitet: 12. September 2022
  14. Exl121150 Erfahrener User
    Hallo,

    das kann so nicht funktionieren. Falls du meinen Hinweis genau gelesen hast, steht dort
    ThisWorkbook.SaveCopyAs Filename:="Pfad\" & Blattname & "_8x8_GV-contrast.xlsm"
    somit muss die Anweisung lauten wie folgt:
    ThisWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\" & blattname & "_8x8_GV-contrast.xlsm"
     
    Exl121150, 12. September 2022
    #14
    1 Person gefällt das.
  15. Mark-AD Neuer User
    ok ich hatte dahinter auch mal das\ stehen aber warum muss das \ mit &"\" angehängt werden?

    Vielen Dank auf jedenfall für deine großartige Hilfe!
     
    Zuletzt bearbeitet: 12. September 2022
Thema:

VBA Makro einfügen CSV, verarbeiten und abspeichern

Die Seite wird geladen...
  1. VBA Makro einfügen CSV, verarbeiten und abspeichern - Similar Threads - VBA Makro einfügen

  2. Per Makro bestimmten Bereich per PDF unter bestimmten Pfad speichern.

    in Microsoft Excel Hilfe
    Per Makro bestimmten Bereich per PDF unter bestimmten Pfad speichern.: Moin Zusammen, ich hoffe Ihr könnt mir helfen, denn ich verzweifle so langsam :( Ich habe bereits hier und im Internet gefühlt vieles durchgelesen, komme aber leider nicht weiter. Ich möchte...
  3. VBA Excel in mehrere teilen nach Kostenstelle

    in Microsoft Excel Hilfe
    VBA Excel in mehrere teilen nach Kostenstelle: Hallo liebe Office Community, ich bin mit VBA nicht so bewandert und habe folgenden "Auftrag"... Eine Excel Datei aus SAP soll aufgeteilt werden nach Kostenstelle. Sprich für jede Kostenstelle...
  4. VBA Makro, einzelne Zellen kopieren und in fortlaufende Zeile einfügen

    in Microsoft Excel Hilfe
    VBA Makro, einzelne Zellen kopieren und in fortlaufende Zeile einfügen: Hallo zusammen Verstehe die Makro Codes nicht gut, jedoch halfen bereits youtube Tutorials bei ein paar Problemen. Nun bräuchte ich aber eure Hilfe. Es geht um folgendes: Ich möchte ein Makro in...
  5. VBA programmieren

    in Microsoft Excel Hilfe
    VBA programmieren: Hallo Leute, Bisher hatte ich meine Probleme immer mit dem mitlesen lösen können. Nun ist es soweit und ich brauche eure Hilfe. Ich habe ein Tabellenblatt, nennen wir es mal "Palettenliste", mit...
  6. Formatierungszeichen mit einem VBA Makro einblenden

    in Microsoft Word Hilfe
    Formatierungszeichen mit einem VBA Makro einblenden: Hallo! Ich benutze Word 365 und habe eine Vorlage mit Makros. Über eine Userform werden dann Textbausteine ein- oder ausgeblendet. Nun möchte ich, dass wenn man auf Basis der Vorlage ein neues...
  7. Makro zur Einfügung hervorgehobener Klammern

    in Microsoft Word Hilfe
    Makro zur Einfügung hervorgehobener Klammern: Liebes Forum, ich zerbreche mir den Kopf, wie man Folgendes als Makro umsetzt: 1. Der markierte Text soll in eckige Klammern gesetzt werden. 2. Die eingefügten eckigen Klammern (nicht der...
  8. mehrere Bilder per VBA in Exceltabelle einfügen

    in Microsoft Excel Hilfe
    mehrere Bilder per VBA in Exceltabelle einfügen: Hallo Zusammen, ich hatte für Excel 2007 ein Makro, mit welchem ich Bilder anhand des Bildpfades in eine Exceltabelle einfügen konnte. Das Makro funktioniert zwar auch noch in Excel 2013,...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden