Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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

Dateien bereitstellen und umwandeln

Dateien bereitstellen und umwandeln
12.03.2014 10:18:07
Tom
Hallo,
ich brauche mal wieder Hilfe. Ich habe zu diesem Zweck den Code mal hier eingefügt. Ich möchte alle Excel-Dateien eines variablen Ordners auslesen und in einer Exceldatei auflisten. Dann möchte ich von hieraus die Dateien öffnen/bearbeiten können. Wenn ich sie schließe soll der User wieder in der Ursprungsdatei sein. Er markiert dann eine Zelle, wenn Bearbeitung abgeschlossen ist. Dann möchte ich aus diese Datei, vorausgesetzt der Bearbeitungsstand steht auf abgeschlossen, ein Tabellenblatt auf einem anderen Laufwerk als csv-Datei bereitstellen. Nach erfolgreicher Bereitstellung soll in der Ursprungsdatei der Vermerk "Bereitstellúng erfolgreich" stehen. Soll eigentlich wie ein Formular aussehen.
Option Explicit
' Pfadangaben
Dim BasisPfad As String
Dim PfadDaten As String
Dim PfadMonat As String
Dim PfadMonatZahl As String
Dim PfadJahr As String
Dim GesamtPfad As String
Dim BasisPfadDB As String
Dim PfadDatenDB As String
Dim PfadMonatDB As String
Dim PfadMonatZahlDB As String
Dim PfadJahrDB As String
Dim GesamtPfadDB As String
Sub DatenKonvertierungStarten()
PfadSetzen
OrdnerAnlegen
DateienAuflistenDB
End Sub

Sub PfadSetzen()
With ThisWorkbook.Sheets("iWB")
BasisPfad = .Range("B4").Value
BasisPfadDB = "C:\Co"
PfadDaten = .Range("B5").Value
PfadDatenDB = "BD_"
PfadJahr = .Range("B6").Value
PfadMonat = Left(.Range("B7").Value, 3)
PfadMonatZahl = .Range("B8").Value
End With
GesamtPfad = BasisPfad + "\" + PfadDaten + "\" + PfadJahr + "\" + Format
(PfadMonatZahl, "00") + "_" + PfadMonat
GesamtPfadDB = BasisPfadDB + "\" + PfadDatenDB + PfadJahr + "\" + Format
(PfadMonatZahl, "00") + "_" + PfadMonat + "_" + PfadJahr + "\" + "Rechnungen"
End Sub

Sub OrdnerAnlegen()
'prüfen ob ein Ordner vorhanden ist und falls nicht fragen ob Ordner erstellt werden soll
Dim Ord As String
Dim Antwort As Integer
Ord = GesamtPfad
If Dir(Ord, vbDirectory)  "" Then
MsgBox "Der Ordner " + "'" + Format(PfadMonatZahl, "00") + "_" + PfadMonat
+ "'" + " ist schon vorhanden!"
Else
Antwort = MsgBox("Der Ordner " + "'" + Format(PfadMonatZahl, "00") + "_" +
PfadMonat + "'" + " ist nicht vorhanden." _
& vbNewLine _
& "soll der Ordner angelegt werden?!", vbYesNo)
If Antwort = vbYes Then
'Falls kein LW angegeben ist, erstellt die MkDir-Anweisung den neuen
Ordner auf dem aktuellen LW.
MkDir Ord
MsgBox "Ordner " + Format(PfadMonatZahl, "00") + "_" + PfadMonat + "
angelegt"
Else
MsgBox "Es wurden keine Änderungen vorgenommen"
Exit Sub
End If
End If
End Sub

Sub DateienAuflistenDB()
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim strDat As String
Dim Zeile As Integer
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder(GesamtPfadDB)
Set fdateien = fVerz.Files
Range("A12:aa1000").Delete
Range("b12").Select
Zeile = 11
For Each fDatei In fdateien
If Right(fDatei, 3) = "xls" Or Right(fDatei, 4) = "xlsx" Or Right(fDatei, 4)
= "xlsm" Then
If InStr(fDatei, "") > 0 Then
Zeile = Zeile + 1
Cells(Zeile, 2) = fDatei.Name
End If
End If
Next fDatei
End Sub

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien bereitstellen und umwandeln
12.03.2014 14:23:50
fcs
Hallo Tom,
das öffnen einer Datei in der Dateiliste geht relativ einfach.
'zusätzliches Makro in dem Modul mit den anderen Makros.
Sub RechnungsDatei_oeffnen(strName As String)
Application.Workbooks.Open Filename:=GesamtPfadDB & "\" & strName
End Sub
'Code für Ereignismakro unter dem Tabellenblatt mit der Dateiliste
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Cells.Count = 1 Then
If Target.Row >= 12 And Target.Column = 2 And Target.Value  "" Then
Cancel = True
Target.Offset(0, 1).Select
Call RechnungsDatei_oeffnen(strName:=Target.Text)
End If
End If
End Sub

Alternativ könnte man beim Erstellen der Dateiliste auch Hyperlinks in die Zelle mit dem Dateinamen einfügen.
Sub DateienAuflistenDB()
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim strDat As String
Dim Zeile As Integer
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder(GesamtPfadDB)
Set fdateien = fVerz.Files
Range("A12:aa1000").Delete
Range("b12").Select
Zeile = 11
For Each fDatei In fdateien
If Right(fDatei, 3) = "xls" Or Right(fDatei, 4) = "xlsx" _
Or Right(fDatei, 4) = "xlsm" Then
If InStr(fDatei, "") > 0 Then
Zeile = Zeile + 1
Cells(Zeile, 2) = fDatei.Name
ActiveSheet.Hyperlinks.Add anchor:=Cells(Zeile, 2), Address:=fDatei.Path
End If
End If
Next fDatei
End Sub
Der Rest ist noch etwas unklar. Es ist auch nicht ganz einfach sicherzustellen, dass die weiteren Eingaben in der Zeile zu der Datei gemacht werden, die zuvor geöffnet/bearbeitet wurde.
Wahrscheinlich muss man hier mit dem Blattschutz arbeiten, um versehentliche Eingaben in einer anderen Zeile zu verhindern.
Wenn ich sie schließe soll der User wieder in der Ursprungsdatei sein.
Das passiert in Excel automatisch, wenn inzwischen nicht andere Dateien geöffnet/aktiviert werden.
Er markiert dann eine Zelle, wenn Bearbeitung abgeschlossen ist.
Welche Zelle, in welcher Zeile/Spalte? Was wird eingetragen?
Dann möchte ich aus diese Datei, vorausgesetzt der Bearbeitungsstand steht auf abgeschlossen, ein Tabellenblatt auf einem anderen Laufwerk als csv-Datei bereitstellen.
diese Datei = Datei mit Name in Spalte B, die zuvor geöffnet/bearbeitet wurde?
Welches Tabellenblatt der Datei (Name oder Indexnummer) soll als CSV-Datei gespeichert werden?
Nach erfolgreicher Bereitstellung soll in der Ursprungsdatei der Vermerk "Bereitstellúng erfolgreich" stehen.
In welcher Spalte soll dies eingetragen werden?
Soll eigentlich wie ein Formular aussehen.
Einfacher wird es, wenn du das was du schon hast als Beispieldatei, ggf. anonymisiert, hier hochladen würdest.
Gruß
Franz

Anzeige
AW: Dateien bereitstellen und umwandeln
12.03.2014 15:07:56
Tom
Hallo,
hier mein upload!
https://www.herber.de/bbs/user/89643.xls
Er markiert dann eine Zelle, wenn Bearbeitung abgeschlossen ist.
Welche Zelle, in welcher Zeile/Spalte? Was wird eingetragen?

-er macht ein "x" in der Spalte "H" für Abgeschlossen!
Dann möchte ich aus diese Datei, vorausgesetzt der Bearbeitungsstand steht auf abgeschlossen, ein Tabellenblatt auf einem anderen Laufwerk als csv-Datei bereitstellen.
diese Datei = Datei mit Name in Spalte B, die zuvor geöffnet/bearbeitet wurde?
Welches Tabellenblatt der Datei (Name oder Indexnummer) soll als CSV-Datei gespeichert werden?

-die Datei in Spalte "B" enthält mehrere Tabellenblätter, die Daten einer Tabelle sollen als csv-
Datei auf einem NetzwerkLW gespeichert werden.
Nach erfolgreicher Bereitstellung soll in der Ursprungsdatei der Vermerk "Bereitstellúng erfolgreich" stehen.
In welcher Spalte soll dies eingetragen werden?

- in Spalte "O" + Datum in Spalte "U" + User in Spalte "AC"
Gruß Tom

Anzeige
AW: Dateien bereitstellen und umwandeln
12.03.2014 21:54:55
fcs
Hallo Tom,
ich hab in deiner Datei mal die erforderlichen Makros eingebaut.
Für Zeilen und Spalten, die mehrfach im Code auftauchen hab ich öffentliche Konstanten deklariert.
Vorschlag:
Verzichte auf die vielen schmalen Spalten und die verbundenen Spalten für "bereitgestellt am".
Mache Spalte O entsprechend breit und auch Spalten U und AC. Dann den Zellverbund in Spalten U:Y auflösen und die überflüssigen Spalten löschen.
Im Code müssen dann die Konstanten der Spalten angepasst und die Zeile, in der die Zellen verbunden werden, gelöscht werden.
Gruß
Franz
https://www.herber.de/bbs/user/89655.xls

Anzeige
AW: Dateien bereitstellen und umwandeln
13.03.2014 08:52:03
Tom
Guten Morgen,
hey, so spät noch am Rechner, Dafür sieht es aber klasse aus. Hab trotzdem noch ne Frage:
Ausgangspunkt: keine Darteien aufgelistet!
Diese Zeile liefert dann die Startposition Z15S2
Zeile = pZeiDatei1
Allerdings wird dann einige Programmzeilen später Zeile um 2 veringert, so daß dann das Einlesen in Z13S2 beginnt!
Zeile = Cells(Rows.Count, pSpaDatei).End(xlUp).Row + 1
Kann nicht genau erkennen was passiert!?
Beste Grüße
Tom

AW: Dateien bereitstellen und umwandeln
13.03.2014 09:05:19
Tom
noch was: in der excel-Datei soll nur der Inhalt des Blattes >Parameter Grüße
Tom

Anzeige
AW: Dateien bereitstellen und umwandeln
13.03.2014 10:43:22
Tom
Hi,
habe alle vorher genannten Probleme selbst lösen können - hurra!
Nun doch noch was anderes:
1)Ich möchte beim Nochmaligen Einlesen der Dateiliste nur die Dateien unten anhängen, die neu
hinzugekommen sind!
2)Bei der Bereitstellung möchte ich nicht, daß die xls-Datei sichtbar geöffnet wird und nach Aktualiesierung fragt, das soll im Hintergrund passieren!
3)Irgendwie klappt das mit der Auflistung aller excel-Dateien nicht, da immer versteckte Dateien dabei sind! Beginnen mit '~$Datei1.xlsx'! Wie kann ich die ausschließen?
4)Das mit dem "x" find ich toll, wußte gar nicht das sowas geht. Kann man das so einstellen, das in den 3 feldern immer nur ein "x" steht? setze ich mein "x" auf gelb, darf in rot und grün keins stehen, usw.!
viiiielen Dank
Beste Grüße
TOM

Anzeige
AW: Dateien bereitstellen und umwandeln
13.03.2014 10:45:37
Tom
HABE DAS HÄKCHEN VERGESSEN FÜR OFFENE FRAGEN!!!
Hi,
habe alle vorher genannten Probleme selbst lösen können - hurra!
Nun doch noch was anderes:
1)Ich möchte beim Nochmaligen Einlesen der Dateiliste nur die Dateien unten anhängen, die neu
hinzugekommen sind!
2)Bei der Bereitstellung möchte ich nicht, daß die xls-Datei sichtbar geöffnet wird und nach Aktualiesierung fragt, das soll im Hintergrund passieren!
3)Irgendwie klappt das mit der Auflistung aller excel-Dateien nicht, da immer versteckte Dateien dabei sind! Beginnen mit '~$Datei1.xlsx'! Wie kann ich die ausschließen?
4)Das mit dem "x" find ich toll, wußte gar nicht das sowas geht. Kann man das so einstellen, das in den 3 feldern immer nur ein "x" steht? setze ich mein "x" auf gelb, darf in rot und grün keins stehen, usw.!
viiiielen Dank
Beste Grüße
TOM

Anzeige
AW: Dateien bereitstellen und umwandeln
13.03.2014 11:09:19
fcs
Hallo Tom,
ich komme erst heute abend dazu was entsprechendes vorzubereiten.
Der Fehler mit der Zeilennummer war auf einen Logikfehler in den IF-Prüfungen zurückzuführen.
1)Ich möchte beim Nochmaligen Einlesen der Dateiliste nur die Dateien unten anhängen, die neu
hinzugekommen sind!

Eine entsprechende Prüfung einzubauen ist kein Problem
2)Bei der Bereitstellung möchte ich nicht, daß die xls-Datei sichtbar geöffnet wird und nach Aktualiesierung fragt, das soll im Hintergrund passieren!
Die Nachfrage kann man vermeiden durch Abschalten der Meldungen oder indem Links beim Öffnen nicht aktualisiert werden. Das öffnen ganz im Hintergrund durchzuführen ist etwas aufwendig, man kann aber die Bildschirmaktualisierung deaktivieren, dann huschen nur noch die Schaltflächen ggf. durch die Taskleiste.
3)Irgendwie klappt das mit der Auflistung aller excel-Dateien nicht, da immer versteckte Dateien dabei sind! Beginnen mit '~$Datei1.xlsx'! Wie kann ich die ausschließen?
Da muss dann beim Einlesen der Dateinamen zusätzlich der Anfang der Dateinamen geprüft werden und die mit "~$" am Anfang übersprungen werden.
4)Das mit dem "x" find ich toll, wußte gar nicht das sowas geht. Kann man das so einstellen, das in den 3 feldern immer nur ein "x" steht? setze ich mein "x" auf gelb, darf in rot und grün keins stehen, usw.!
Grundsätzlich kann man das machen. Aber wäre es dann nicht einfacher, den Bearbeitungsstand in einer Spalte zu kennzeichnen mit den Einträgen O, B oder A und bei A erfolgt dann die Bereitstellung als CSV?
Gruß
Franz

Anzeige
AW: Dateien bereitstellen und umwandeln
13.03.2014 11:46:27
Tom
Hallo Franz,
find ich total super, daß du mir so klasse hilfst.
zu 1) Das wäre wirklich toll!
zu 2) Das Nachfragen soll abgeschaltet werden. Es soll aber aktualisiert werden. Dann reicht es aus die Bildschirmaktualisierung abzustellen!
zu 3) Die Prüfung steht im Code. Bringt nur leider nichts.
If Right(fDatei, 3) = "xls" _
Or Right(fDatei, 4) = "xlsx" _
Or Right(fDatei, 4) = "xlsm" _
Or Left(fDatei, 2) = "~$" Then
If InStr(fDatei, "") > 0 Then
Cells(Zeile, pSpaDatei) = fDatei.Name
Cells(Zeile, pSpaAbgesch - 2) = "x"
End If
Zeile = Zeile + 1
End If
zu 4) Den Vorschlag find ich gut. Soll ja nicht unnötig kompliziert werden!
NEU 5)In der OriginalExcelDatei sollen alle Zellen mit Inhalt des Blattes >Paramter Außerdem ist mir aufgefallen, daß in der CSV-Datei jede Zeile mit 13 ";" endet. Leider hat SAP damit ein Problem. Wie bekomme ich die weg? D.h. am Ende jeder Zeile soll kein ";" stehen und nach der letzten Zeile auch nicht!
Beste Grüße
TOM

Anzeige
AW: Dateien bereitstellen und umwandeln
14.03.2014 07:51:13
fcs
Hallo Tom,
ich hab die Wunschliste in fast vollständig umsetzen können.
https://www.herber.de/bbs/user/89667.xls
  • Der Bearbeitungsstand wird jetzt in einer Spalte mit Eintrag "O", "B" und "A" abgearbeitet
    Es ist eine bedingte Formatierung eingerichtet und eine Datengültigkeitsprüfung mit DropDown-Auswahl.
    Bei der Eingabe von Werten für den Bearbeitungsstand werden im Makro verschiedenste Prüfungen abgearbeitet.
    So werden versehentliche Änderungen verhindert oder erst nach Bestätigung durchgeführt.
    Wird der Stand " von "A" in einen anderen Stand zurückgesetz, dann wird eine bereits bereitgestellte csv-Datei ggf. wieder gelöscht. Der Name der csv-Datei wird dfür in einer weiteren Spalte eingetragen.

  • unnötige Spalten
    Die vielen schmalen Spalten hab ich beseitigt. Es gibt zu jedem Spaltentitel nur noch eine Spalte mit entsprechender Breite. So ist die Tabelle übersichtliche, pflegeleichter und die unter VBA oft hinderlichen verbundenen Zellen werden vermieden.

  • unnöige Zeilen
    Die Zeilen 13 und 14 hab ich gelöscht (sie sind unnötiger Balast) und Zeile 12 entsprechend formatiert, so dass Inhalte ggf. 2-zeilig angezeigt werden.

  • Name csv-Datei
    Der Dateiname der CSV-Datei wird aus Spalte M im Blatt "Parameter" ausgelesen und zwar aus der letzten Zeile mit Daten

  • unerwünschte ";"
    zur Beseitigung von unerwünschten ";" werden vor dem Speichern als CSV alle Spalten mit Daten rechts von Spalte M gelöscht.
    Alle Zeilen unterhalb der letzten Zeile mit Werten &lt&gt "" werden gelöscht.
    Falls die CSV-Datei jetzt immer noch unerwünschte ";" enthält, dann brauche ich mal eine Beispieldatei mit einem Parameter-Tabellenblatt und die dazugehörige CSV-Datei, wie sie nach dem Speichern aussehen soll.
    Das Speichern als CSV müste dann komplett anders erfolgen oder ggf. die CSV nachbearbeitet werden.

  • Gruß
    Franz

    Anzeige
    AW: Dateien bereitstellen und umwandeln
    14.03.2014 10:16:26
    Tom
    Hallo,
    das sieht klasse aus.
    leider wird bei Doppüelclick auf Datei, diese nicht geöffnet. "Datei 123.xls nicht gefunden".
    If Dir(strFilename) "" Then 'hier steht der koplette Pfad richtig drin! nach Prüfung springt es gleich zum ELSE Zweig?
    Application.Workbooks.Open Filename:=strFilename, UpdateLinks:=True
    Else
    MsgBox "Datei """ & strFilename & """ nicht gefunden!", vbOKOnly, "Datei öffnen"
    End If
    Grüße
    Tom

    AW: Dateien bereitstellen und umwandeln
    14.03.2014 11:51:05
    Tom
    hab den "Fehler gefunden, die Datei-Attribute standen auf "versteckt" - jetzt gehts. werde am WE alles testen und mich Montag melden. I.d.S. schönes WE und bis später!
    Grüße
    Tom

    AW: Dateien bereitstellen und umwandeln
    14.03.2014 16:17:00
    Tom
    hallo,
    hab schon mal angefangen zuu testen. Bei den ersten 5 Dateien lief alles glatt. Bei der 6. Kam die Fehlermeldung "Fehler-Nr.: 1004 Anwendungs- oder objektdefinierter Fehler". Kann keinen Unterschied zu den verarbeiteten Excel-Dateien finden?
    Beste Grüße
    Tom

    AW: Dateien bereitstellen und umwandeln
    14.03.2014 16:52:57
    Tom
    hier die Stelle im Code, an der er aussteigt!
    'Spalten mit Werten/Leerstrings rechts von Spalte M löschen
    If lngSpalte_VL > pSpaNameCSV Then
    .Range(.Columns(pSpaNameCSV + 1), .Columns(lngZeile_VL)).Delete shift:=xlShiftToLeft
    End If
    Grüße
    Tom

    AW: Dateien bereitstellen und umwandeln
    14.03.2014 16:53:04
    Tom
    hier die Stelle im Code, an der er aussteigt!
    'Spalten mit Werten/Leerstrings rechts von Spalte M löschen
    If lngSpalte_VL > pSpaNameCSV Then
    .Range(.Columns(pSpaNameCSV + 1), .Columns(lngZeile_VL)).Delete shift:=xlShiftToLeft
    End If
    Grüße
    Tom

    AW: Dateien bereitstellen und umwandeln
    14.03.2014 17:02:09
    Tom
    ... mir ist noch was aufgefallen! nachdem Abruch, bleibt die Excel-Datei offen. ich werde beim schließen gefragt ob ich speichern möchte. Dann sagt er mir, daß die datei schreibgeschützt ist und ich einen neuen namen vergeben muss wenn ich speichern will. Eigentlich sind die Excel-dateien nicht schreibgeschützt. macht da das Makro etwas, ich hab allerdings nichts entdecken können!
    Grüße
    Tom

    AW: Dateien bereitstellen und umwandeln
    14.03.2014 17:40:22
    fcs
    Hallo Tom,
    da hab ich beim Kopieren von Codezeilen etwas übersehen. "lngZeile_VL" muss durch "lngSpalte_VL" ersetzt werden.
    'Spalten mit Werten/Leerstrings rechts von Spalte M löschen
    If lngSpalte_VL > pSpaNameCSV Then
    .Range(.Columns(pSpaNameCSV + 1), .Columns(lngSpalte_VL)).Delete shift:=xlShiftToLeft
    End If
    

    Scheinbar hat die Parameter-Datei mehr als 256 Daten-Zeilen. Da eine Excel-2003er Tabelle max. 256 Spalten hat kommt es hier zu dem Fehler.
    Wenn die CSV-Datei erzeugt wird, dann öffnet das Makro die entsprechende Rechnungsdatei schreibgeschützt.
    Das hat 2 Vorteile:
    1. Die Datei wird für andere Anwender nicht blockiert.
    2. Das Makro löscht ja im Blatt "Parameter" die scheinbar leeren Zeilen und Spalten des benutzten Zellbereichs. Falls dann doch einmal ein Problem auftaucht, wie jetzt bei dir, dann überschreibt man nicht versehentlich die Originaldatei.
    Gruß
    Franz

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige