Viele Dateien zusammenfassen
#21
(15.01.2018, 22:16)Phi.VBA schrieb: @Igelbauer

der cmd: dir - Code benötigt Ergänzungen, wenn

- Leerzeichen
- Umlaute

im Pfad- bzw Dateinamen enthalten sind.

So, da bin ich mal wieder. Ganz schön stressig heute gewesen.
Jetzt kann ich weiterfragen.
Da ich die Ordner unmöglich umbenennen kann (greifen viele drauf zu und unzählige Verknüpfungen wären hinfällig)
wäre es interessant zu wissen welche Ergänzungen der Code benötigt. (siehe oben).
Ferner - vielleicht hat der eine oder andere in meinem geänderten Code die Zeile " 'Scheiss UFo " gesehen.
Die ganzen Dateien haben im Workbook_open ein UserForm.Show, leider modal, so dass ich erst jedesmal die UFo
wegdrücken muss, damit der Code weiterläuft. VbModeless hilft auch nicht, weil er dann die Werte aus den Zellen nicht übernimmt. Ich vermute das liegt evtl. daran dass die UFo den Focus hat.
Kann man die UFo irgendwie unterdrücken ?
Und das letzte Problem, das I-Tüpfelchen.
Ich bekomme es absolut nicht hin, dass er mir wenn merere Änderungen stattgefunden haben, er mir die auch alle in den Kommentar schreibt. Ich habe im Einzelschritt, im Überwachungsfenster die schon existierenden Kommentare gesucht wie blöd - ich find sie einfach nicht.
Ich bin ganz schön anspruchsvoll, oder ? Wink
Und weil der Kopf noch nicht voll genug ist geh ich jetzt gleich auch noch zum Tschechischkurs.

Bis morgen
Igel
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top
#22
@Igelbauer,

hier ein Versuch, deinen und snb's Code zu kombinieren:


Code:
option explizit

Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
     
Public Function F_ASC_ANS(ByVal Text As String) As String
 OemToCharA Text, Text
 F_ASC_ANS = Text
End Function


Sub Igel()
Dim iPath As String
Dim WB As Workbook
Dim lc As Range
Dim fi As Variant
Dim f As Integer
Dim i As Integer
Dim j As Integer

iPath = ThisWorkbook.Path & "\"

With ActiveSheet
  Set lc = .UsedRange.SpecialCells(11)
  fi = Filter(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c Dir """ & Thisworkbook.path & "\*.xlsx "" /b/s/o-d").stdout.readall), vbCrLf), ".")
  For f = 1 to  UBound(fi)  '######## Reihenfolge umgetret
        Set WB = Workbooks.Open(fi(f))
'Scheiss UFo
        If .UsedRange.Address = WB.Sheets(2).UsedRange.Address Then
              For i = 1 To lc.Row
                  For j = 1 To lc.Column
                      If .Cells(i, j) <> WB.Sheets(2).Cells(i, j) Then
                .Cells(i, j).ClearComments
                            .Cells(i, j).Value = WB.Sheets(2).Cells(i, j).Text
                          If .Cells(i, j).Comment Is Nothing Then
                              .Cells(i, j).AddComment Left(Right(fi(f), 21), 17) & ": " & WB.Sheets(2).Cells(i, j)
'                 Else: .Cells(i, j).Comment.Text = .Cells(i, j).Comment.Text & Left(Right(fi(f), 21), 17) & ": " & WB.Sheets(2).Cells(i, j)
                          End If
                      End If
                  Next j
              Next i
        End If
        WB.Close 0
'       WB.Kill '############# nicht anschalten
  Next f
End With
End Sub


Die Engpässe des Codes sind, dass nur jeweils die letzte Änderung dokumentiert wird. Falls alle dokumentiert werden müssen, dürfte es besser sein, nicht Kommentare sondern ein Sheet as "log" zu nutzen.

Der zweite Engpass ist, dass nur wenn UsedRange gleich ist, geprüft wird. Hier dürfte ein Fallunterscheidung (mit neuem Code) nötig werden. Dann bleibt das Makro auch  nicht  "schlank".
[-] Folgende(r) 1 Nutzer sagt Danke an Phi.VBA für diesen Beitrag:
  • Igelbauer
Top
#23
Wunderschönen guten Morgen
Ist das Wetter bei euch auch so besch...?

Hab heute morgen erstmal ins Forum reingeschaut - Smile Nachricht von Phi.
Hab das versucht umzusetzen, aber klappt überhaupt nicht.
Zuerst Fehlermeldung "Erwartet Anweisungsende" - Lag vermutlich an einer Klammer zuviel - entfernt
dann "Fehler beim Kompilieren   Falsche Anzahl an Argumenten ..." markiert ist dass F_ASC_ANS.
Erstmal wieder Ende des Lateins.
:22:
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top
#24
So, jetzt komm ich bis zur Zeile
  fi = Filter(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c Dir " & iPath & "*.xlsm /b/s/o-d").stdout.readall), vbCrLf, ".")
----Laufzeitfehler 13   Typen unverträglich
:22:
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top
#25
Bitte, verwende Code Tags !.

Und gut lesen:

fi = Filter(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c Dir """ & iPath & "*.xlsm"" /b/s/o-d").stdout.readall), vbCrLf, ".")

Und studieren warum es ohne  nicht geht.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Igelbauer
Top
#26
@Igel

zuerst:

mit einer txt-Datei mit Umlauten und Leerzeichen habe ich diesen Code erfolgreich getestet:


Code:
Sub T1()
sPath = ThisWorkbook.Path

 sn = Split(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c Dir """ & sPath & "\*.txt"" /b/o-d").stdout.readall), vbCrLf)
For i = 0 To UBound(sn)
   Debug.Print sn(i)
Next i
End Sub

beache bitte die doppelten und dreifachen Anführungszeichen.

Grundsätzliches:

Das angefragte Projekt kann recht umfangreich werden und am ersten Schritt hängen zu bleiben, zingt zur Frage, was in einem Forum möglich ist. M.M.n. kann Hilfe zur Selbsthilfe schon geleistet werden, auch einige Ideen zum konzeptionellen Ansatz. Aber die Details, insbesondere das Debugging, muss der Fragesteller leisten können.

Es macht mir sicher Spaß, hin und wieder eine viertel Stunde zu programmieren, aber ein Komplettpaket zur Zufriedenheit deines Managers ist eine Arbeit, die jeseits eines Forums ist.

Also: wenn der gezeigte Code aus irgendeinem Grund nicht läuft, ersetze ihn entweder durch eine VBA "Dir"- oder eine FSO-Konstruktion.
[-] Folgende(r) 1 Nutzer sagt Danke an Phi.VBA für diesen Beitrag:
  • Igelbauer
Top
#27
Hi SNB
Sorry, aber das hier ist für mich ja nur eine Nebenbaustelle.
Im eigentlichen Job hab ich noch ganz andere Probleme, bei denen mir kaum einer helfen kann.
Deswegen bin ich auch wahnsinnig dankbar, wenn mir hier geholfen wird.
Nichtsdestotrotz
Auch mit deiner Zeile - Typen unverträglich
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top
#28
Und an Phi erstmal Moin und Danke
Ich gebe dir voll und ganz recht.
Das ist hier etwas ausgeartet.
Ich nehme mir nochmal alle Teile dieses Projekt mit nach Hause.
Ofen an, Katze und Läppi auf den Schoss, neben mir etwas zu knabbern und zu trinken.
Und alles wird gut.
Ich kann dir hier immer nur 1 Danke schön einfügen
Verdient hast du tausend

Gruss Igel
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top
#29
@Igelbauer

politisch habe ich Probleme mit "Datenkraken", aber in VBA hilft vielleicht dies:


Code:
Debug.Print ActiveWorkbook.BuiltinDocumentProperties("last Author").Value
Top
#30
@Phi
Das braucht es nicht
Es geht ja eigentlich nur darum nachvollziehen zu können wann welche Änderung stattgefunden hat.
Egal von wem.
Und so wie es aussieht liegt das Problem in einem Leerzeichen im Ordner.
Muss schauen, dass ich das ganze woanders hin auslagere, weil diesen Ordner kann ich unmöglich umbenennen.
Alles wird gut

Igel
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste