Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Probleme bei csv Import - Setre

VBA Probleme bei csv Import - Setre
01.03.2022 08:32:15
Piet
Hallo Kollegen
dies ist eine Antwort zum Thread - VBA Probleme bei csv Import - Setre 22.02.2022 16:26:48
Im Archiv fand ich die letzte Antwort das es noch einen Fehler im Makro gibt. Den korrigiere ich noch.
Es freut mich auf jeden Fall das die Zuordnung der Daten jetzt in Ordnung ist. Den letzten Fehler finde ich auch noch!
mfg Piet

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Probleme bei csv Import - Setre
01.03.2022 09:12:32
Yal
Hallo Piet
Mit https://www.herber.de/cgi-bin/meinebeitraege?name=setre
würdest Du auf dem Thread kommen und etwas hinzufügen können, aber "Setre" würde es nicht mitbekommen, da er die Rückmeldung per Mail nicht eingeschaltet hat.
Die archivierte Thread hat den Link
https://www.herber.de/forum/archiv/1872to1876/1872396_Listeneintrag_per_Code_auswaehlen.html
So wäre der Beitrag vollständig verlinkt.
VG
Yal
Anzeige
AW: VBA Probleme bei csv Import - Setre
01.03.2022 20:25:21
setre
Super, danke Piet, da freu ich mich :)
AW: VBA Probleme bei csv Import - Setre
02.03.2022 09:44:45
Piet
Hallo
auf ein neues, da waren noch zwei dumme Flüchtigkeitsfehler. Weil Excel nur Befehle befolgen konnte muss der Programmierer an alles denken.
Nun bin ich gespannt ob wir den Thread abschliessen können?
mfg Piet
  • 
    Sub ImportCSV(Dateiname, ZielTabelle As String)
    Dim rFind As Range, FallNr, Patient
    Dim AC As Range, FinalRow As Long
    Dim AR As Worksheet, zAr, zCS As Long
    Dim WS As Worksheet, j, c, n, x As Long
    If Dateiname = False Then Exit Sub
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Sheets.Add.Name = "CSV"
    Set WS = ThisWorkbook.Sheets("CSV")
    Workbooks.Open Filename:=Dateiname, Local:=True
    ActiveSheet.UsedRange.Copy WS.Cells(1)
    ActiveWorkbook.Close SaveChanges:=False
    On Error GoTo Fehler
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    With Worksheets("Aktuell stationär")
    'Patienten Daten Spalte O-T zum wiederherstellen retten
    WS.Range("BA2:BZ200").ClearContents
    'Druckblatt 1-4 Daten in CSV Sheet retten zum wiederherstellen!
    .Range("K2:T100").Copy
    WS.Range("BA2").PasteSpecial xlPasteValues
    zCS = WS.Cells(Rows.Count, "BA").End(xlUp).Row + 2
    .Range("U2:AD100").Copy
    WS.Range("BA" & zCS).PasteSpecial xlPasteValues
    zCS = WS.Cells(Rows.Count, "BA").End(xlUp).Row + 2
    .Range("AE2:AN100").Copy
    WS.Range("BA" & zCS).PasteSpecial xlPasteValues
    zCS = WS.Cells(Rows.Count, "BA").End(xlUp).Row + 2
    .Range("AO2:AX100").Copy
    WS.Range("BA" & zCS).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    'Druckblatt 1-4 Spalte O-T löschen
    .Range("O2:T100").ClearContents
    .Range("Y2:AD100").ClearContents
    .Range("AI2:AN100").ClearContents
    .Range("AS2:AX100").ClearContents
    '**  Datenverarbeitung - alte Daten öschen, neue Daten einfügen
    Set AR = ThisWorkbook.Sheets("Archiv")
    'Nächste freie Zeile in Aktuell und Archiv suchen
    zAr = AR.Cells(Rows.Count, 1).End(xlUp).Row + 1
    'LastZell in "Aktuell stationär" suchen
    FinalRow = .Cells(Rows.Count, 1).End(xlUp).Row
    'dann Prüfen ob Datensätze erloschen sind -> ins Archiv verschieben
    For x = 2 To FinalRow
    FallNr = .Cells(x, 6)   'Fall Nummer in Spalte F "CSV" Tabelle suchen
    Set rFind = WS.Columns(6).Find(What:=FallNr, After:=WS.[f1], LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    'Gefunden Datensatz mit neuesten Daten überschreiben
    If Not rFind Is Nothing Then
    WS.Cells(rFind.Row, 1).Resize(1, 10).Copy
    .Cells(x, 1).PasteSpecial xlPasteValues
    End If
    'Nicht gefunden Datensatz ins Archiv kopieren und löschen
    If rFind Is Nothing Then
    .Cells(x, 1).Resize(1, 10).Copy
    AR.Cells(zAr, 1).PasteSpecial xlPasteValues
    'Datensatz nur Spalte A-J löschen!!
    .Cells(x, 1).Resize(1, 10).ClearContents
    zAr = zAr + 1:  c = c + 1
    End If
    Next x
    'evtl. Leerzeilen in "Aktuell stationär" rückwärts löschen
    If c > 0 Then
    For x = FinalRow To 2 Step -1
    If .Cells(x, 1) = Empty Then
    .Cells(x + 1, 1).Resize(FinalRow - x + 3, 10).Copy
    .Cells(x, 1).PasteSpecial xlPasteValues
    End If
    Next x
    End If
    'zuerst neue CSV Datensätze in "Aktuell stationär" unten anhängen
    FinalRow = WS.Cells(Rows.Count, 1).End(xlUp).Row
    zCS = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    For x = 2 To FinalRow
    FallNr = WS.Cells(x, 6)   'Fall Nummer in Spalte F "Aktuell stationär" suchen
    Set rFind = .Columns(6).Find(What:=FallNr, After:=.[f1], LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    'neue CSV Datensätze in "Aktuell stationär" übernehmen
    If rFind Is Nothing Then
    'neue CSV Daten in Aktuell kopieren
    WS.Cells(x, 1).Resize(1, 10).Copy
    .Cells(zCS, 1).PasteSpecial xlPasteValues
    zCS = zCS + 1:  n = n + 1
    End If
    Next x
    '**  vor dem wiederherstellen Formeln neu berechen!!
    Application.Calculation = xlCalculationAutomatic
    Application.Calculate     'noch mal deaktivieren
    Application.Calculation = xlCalculationManual
    '**  Patienten Daten O-T in Druckblatt 1-4 wiederherstellen
    'gerettete Patienten Daten aus Spalte O-T wieder einfügen
    FinalRow = WS.Cells(Rows.Count, "BA").End(xlUp).Row
    For x = 2 To FinalRow
    If WS.Cells(x, "BA")  Empty Then
    Patient = WS.Cells(x, "BA")   'Patienten Text in  "Aktuell stationär" suchen
    Set rFind = .Cells.Find(What:=Patient, After:=.[k1], LookIn:=xlValues, LookAt:= _
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    'frühere Patientendaten in "Aktuell stationär" wieder einfügen
    If Not rFind Is Nothing Then
    WS.Cells(x, "BE").Resize(1, 6).Copy
    .Cells(rFind.Row, rFind.Column + 4).PasteSpecial xlPasteValues
    End If
    End If
    Next x
    'ggf. Patientendaten O-T im Archiv einfügen
    If c > 0 Then
    zAr = zAr - 1
    For j = zAr - c To zAr
    For x = 2 To FinalRow
    Patient = WS.Cells(x, "BA")
    If InStr(Patient, AR.Cells(j, 1)) And _
    InStr(Patient, AR.Cells(j, 2)) Then
    'neue CSV Daten in Aktuell k6opieren
    WS.Cells(x, "BE").Resize(1, 6).Copy
    AR.Cells(j, 15).PasteSpecial xlPasteValues
    End If
    Next x
    Next j
    End If
    End With
    Ende:  'Applicationen wieder aktivieren
    Application.Calculation = xlCalculationAutomatic
    Application.CutCopyMode = False
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Sheets("Aktuell stationär").Select
    Range("K1").Select
    If Err > 0 Then Exit Sub
    MsgBox n & "  neue Datensätze" & vbLf & c & "  Datensätze gelöscht"
    Exit Sub
    Fehler:  'bei Fehler Application aktivieren
    MsgBox "unerwartete Fehler aufgetreten  & vblf & Error()": GoTo Ende
    End Sub
    

  • Anzeige
    AW: VBA Probleme bei csv Import - Setre
    02.03.2022 16:16:39
    setre
    Super, danke fürs Drübergucken!
    Leider fügt das neue Makro nun beim CSV Import die neuen Personendaten erst ab Zeile 28 in A-J ein, und lässt die Übereinstimmungen in den obersten Zeilen stehen.
    Weißt du woran das liegen könnte?
    AW: VBA Probleme bei csv Import - Setre
    03.03.2022 10:03:28
    setre
    Eine Frage hätte ich allerdings auch noch, tut mir Leid:
    Ich möchte doch nur 10 Personen pro Seite darstellen, damit ich etwas mehr Platz für Notizen habe.
    Wie kann ich das abändern, also dass es ab Zeile 12 K-T dann schon bei Zeile 2 U-AD weitergeht?
    Vielen Dank!
    AW: VBA Probleme bei csv Import - Setre
    03.03.2022 11:15:35
    Piet
    Hallo
    zu deiner Frage eine sehr einfache Antwort, sie wird dich angenehm überraschen! - Ändere einfach die Formeln, das ist alles!
    Ob du auf einem Blatt 8, 9, oder 10-12 Personen hast ist dem Makro egal. Es listet dir die aktuellen Personen nur in den Spalten A-J auf!
    Wie du diese Personen auf dem Druckblatt verteilst kannst du frei wählen. Deshalb ist es ja von mir für 4 Druckblätter ausgelegt worden!
    Ob die Personen nebeneinander oder untereinander stehen, kannst du selbst festlegen. Die Range Reihenfolge der Formeln muss nur stimmen!
    Zu dem gemeldetenFehler:
    Hast du das letzte makro im einsatz? Ich habe in meinem Beispiel versucht den nFehler zu rekonstruieren. Bei mir läuft es einwandfrei!
    Wo ich ins Schleudern komme ist der Hinweis, das erst ab Zeile 28 neu eingefügt wird, die Daten im oberen Bereich aber stehen bleiben!
    Weil ich die Fall Nummer exakt prüfe, und erloschene Daten ins Archiv verschiebe, sollte es oben keine "alten Daten" mehr geben.
    Wennn der Fehler bei dir noch mal auftritt könntest du mir bitte das Aktuelle Blatt und das CSV Blatt mit anonymen Daten zum prüfen hochladen.
    Die Namen kanns du gegen Person 1,2,3, tauschen, auch das Geburtsdatum. Mir geht es ja nur darum den Fehler logisch zu verstehen.
    mfg Piet
    Anzeige
    AW: VBA Probleme bei csv Import - Setre
    03.03.2022 12:56:34
    setre
    Ja, dumme Frage, klar, vielen Dank!
    Ich prüf das Makro nochmal und melde mich dann wenn ich nicht weiterkomme :)
    Vielen, vielen Dank nochmal, das hat alles wirklich sehr geholfen!!
    Eine kleine Frage hab ich allerdings noch:
    Ich hätte eigentlich im Druckbereich die Personen gerne nach Raumnummer sortiert (aufsteigend).
    Wenn neue Leute importiert werden, werden die ja unten dran gehangen.
    Gibt es da eine Möglichkeit, den Druckbereich (und meinetwegen dann auch Spalten A-J immer nach Raumnummer aufsteigend sortiert zu halten?
    Weil ich möchte ja nicht, dass meine Eingaben aus O-T verloren gehen, wenn ich A-J umsortiere.
    Wenn du da noch eine Idee hättest wäre das super!!
    Danke nochmal und liebe Grüße!
    Anzeige
    AW: VBA Probleme bei csv Import - Setre
    04.03.2022 14:04:16
    Piet
    Hallo
    ich warte mal ab ob der Fehler noch auftritt. Unten ein Makro mit Sorierroutine aufsteigend nach Raum.
    mfg Piet
  • 
    Sub ImportCSV(Dateiname, ZielTabelle As String)
    Dim rFind As Range, FallNr, Patient
    Dim AC As Range, FinalRow As Long
    Dim AR As Worksheet, zAr, zCS As Long
    Dim WS As Worksheet, j, c, n, x As Long
    If Dateiname = False Then Exit Sub
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Sheets.Add.Name = "CSV"
    Set WS = ThisWorkbook.Sheets("CSV")
    Workbooks.Open Filename:=Dateiname, Local:=True
    ActiveSheet.UsedRange.Copy WS.Cells(1)
    ActiveWorkbook.Close SaveChanges:=False
    On Error GoTo Fehler
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    With Worksheets("Aktuell stationär")
    'Patienten Daten Spalte O-T zum wiederherstellen retten
    WS.Range("BA2:BZ200").ClearContents
    'Druckblatt 1-4 Daten in CSV Sheet retten zum wiederherstellen!
    .Range("K2:T100").Copy
    WS.Range("BA2").PasteSpecial xlPasteValues
    zCS = WS.Cells(Rows.Count, "BA").End(xlUp).Row + 2
    .Range("U2:AD100").Copy
    WS.Range("BA" & zCS).PasteSpecial xlPasteValues
    zCS = WS.Cells(Rows.Count, "BA").End(xlUp).Row + 2
    .Range("AE2:AN100").Copy
    WS.Range("BA" & zCS).PasteSpecial xlPasteValues
    zCS = WS.Cells(Rows.Count, "BA").End(xlUp).Row + 2
    .Range("AO2:AX100").Copy
    WS.Range("BA" & zCS).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    'Druckblatt 1-4 Spalte O-T löschen
    .Range("O2:T100").ClearContents
    .Range("Y2:AD100").ClearContents
    .Range("AI2:AN100").ClearContents
    .Range("AS2:AX100").ClearContents
    '**  Datenverarbeitung - alte Daten öschen, neue Daten einfügen
    Set AR = ThisWorkbook.Sheets("Archiv")
    'Nächste freie Zeile in Aktuell und Archiv suchen
    zAr = AR.Cells(Rows.Count, 1).End(xlUp).Row + 1
    'LastZell in "Aktuell stationär" suchen
    FinalRow = .Cells(Rows.Count, 1).End(xlUp).Row
    'dann Prüfen ob Datensätze erloschen sind -> ins Archiv verschieben
    For x = 2 To FinalRow
    FallNr = .Cells(x, 6)   'Fall Nummer in Spalte F "CSV" Tabelle suchen
    Set rFind = WS.Columns(6).Find(What:=FallNr, After:=WS.[f1], LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    'Gefunden Datensatz mit neuesten Daten überschreiben
    If Not rFind Is Nothing Then
    WS.Cells(rFind.Row, 1).Resize(1, 10).Copy
    .Cells(x, 1).PasteSpecial xlPasteValues
    End If
    'Nicht gefunden Datensatz ins Archiv kopieren und löschen
    If rFind Is Nothing Then
    .Cells(x, 1).Resize(1, 10).Copy
    AR.Cells(zAr, 1).PasteSpecial xlPasteValues
    'Datensatz nur Spalte A-J löschen!!
    .Cells(x, 1).Resize(1, 10).ClearContents
    zAr = zAr + 1:  c = c + 1
    End If
    Next x
    'evtl. Leerzeilen in "Aktuell stationär" rückwärts löschen
    If c > 0 Then
    For x = FinalRow To 2 Step -1
    If .Cells(x, 1) = Empty Then
    .Cells(x + 1, 1).Resize(FinalRow - x + 3, 10).Copy
    .Cells(x, 1).PasteSpecial xlPasteValues
    End If
    Next x
    End If
    'zuerst neue CSV Datensätze in "Aktuell stationär" unten anhängen
    FinalRow = WS.Cells(Rows.Count, 1).End(xlUp).Row
    zCS = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    For x = 2 To FinalRow
    FallNr = WS.Cells(x, 6)   'Fall Nummer in Spalte F "Aktuell stationär" suchen
    Set rFind = .Columns(6).Find(What:=FallNr, After:=.[f1], LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    'neue CSV Datensätze in "Aktuell stationär" übernehmen
    If rFind Is Nothing Then
    'neue CSV Daten in Aktuell kopieren
    WS.Cells(x, 1).Resize(1, 10).Copy
    .Cells(zCS, 1).PasteSpecial xlPasteValues
    zCS = zCS + 1:  n = n + 1
    End If
    Next x
    'Daten für dem wiederherstellen nach Raum sortieren
    Range("A2:J100").Sort Key1:=Range("J2"), Order1:=xlAscending, Header:= _
    xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    '**  vor dem wiederherstellen Formeln neu berechen!!
    Application.Calculation = xlCalculationAutomatic
    Application.Calculate     'noch mal deaktivieren
    Application.Calculation = xlCalculationManual
    '**  Patienten Daten O-T in Druckblatt 1-4 wiederherstellen
    'gerettete Patienten Daten aus Spalte O-T wieder einfügen
    FinalRow = WS.Cells(Rows.Count, "BA").End(xlUp).Row
    For x = 2 To FinalRow
    If WS.Cells(x, "BA")  Empty Then
    Patient = WS.Cells(x, "BA")   'Patienten Text in  "Aktuell stationär" suchen
    Set rFind = .Cells.Find(What:=Patient, After:=.[k1], LookIn:=xlValues, LookAt:= _
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    'frühere Patientendaten in "Aktuell stationär" wieder einfügen
    If Not rFind Is Nothing Then
    WS.Cells(x, "BE").Resize(1, 6).Copy
    .Cells(rFind.Row, rFind.Column + 4).PasteSpecial xlPasteValues
    End If
    End If
    Next x
    'ggf. Patientendaten O-T im Archiv einfügen
    If c > 0 Then
    zAr = zAr - 1
    For j = zAr - c To zAr
    For x = 2 To FinalRow
    Patient = WS.Cells(x, "BA")
    If InStr(Patient, AR.Cells(j, 1)) And _
    InStr(Patient, AR.Cells(j, 2)) Then
    'neue CSV Daten in Aktuell k6opieren
    WS.Cells(x, "BE").Resize(1, 6).Copy
    AR.Cells(j, 15).PasteSpecial xlPasteValues
    End If
    Next x
    Next j
    End If
    End With
    Ende:  'Applicationen wieder aktivieren
    Application.Calculation = xlCalculationAutomatic
    Application.CutCopyMode = False
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Sheets("Aktuell stationär").Select
    Range("K1").Select
    If Err > 0 Then Exit Sub
    MsgBox n & "  neue Datensätze" & vbLf & c & "  Datensätze gelöscht"
    Exit Sub
    Fehler:  'bei Fehler Application aktivieren
    MsgBox "unerwartete Fehler aufgetreten  & vblf & Error()": GoTo Ende
    End Sub
    

  • Anzeige
    AW: VBA Probleme bei csv Import - Setre
    04.03.2022 16:11:08
    setre
    Danke für die Sortierroutine!
    Also, bis jetzt scheint erstmal alles zu klappen!
    Ich möchte mich an dieser Stelle wirklich noch einmal aufrichtig für deine ganze Mühe bedanken!
    Du hast mir sehr geholfen und ich habe viel gelernt bzgl. VBA mit meinen Anfängerkenntnissen! Und ich weiß das hier sehr zu schätzen, dass du deine Zeit und Energie dafür verwendet hast!
    Liebe Grüße und Alles Gute!
    AW: danke für die nette Rückmeldung oWt
    05.03.2022 20:40:50
    Piet
    ...
    AW: Danke an Yal fürs verlinken oWt
    02.03.2022 09:49:32
    Piet
    ...

    307 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige