Registriert seit: 06.12.2017
Version(en): diverse
(15.01.2018, 21: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 ?
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 !
Registriert seit: 17.11.2017
Version(en): 2016
@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:1 Nutzer sagt Danke an Phi.VBA für diesen Beitrag 28
• Igelbauer
Registriert seit: 06.12.2017
Version(en): diverse
Wunderschönen guten Morgen
Ist das Wetter bei euch auch so besch...?
Hab heute morgen erstmal ins Forum reingeschaut - 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 !
Registriert seit: 06.12.2017
Version(en): diverse
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 !
Registriert seit: 29.09.2015
Version(en): 2030,5
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.
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Igelbauer
Registriert seit: 17.11.2017
Version(en): 2016
@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:1 Nutzer sagt Danke an Phi.VBA für diesen Beitrag 28
• Igelbauer
Registriert seit: 06.12.2017
Version(en): diverse
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 !
Registriert seit: 06.12.2017
Version(en): diverse
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 !
Registriert seit: 17.11.2017
Version(en): 2016
@Igelbauer
politisch habe ich Probleme mit "Datenkraken", aber in VBA hilft vielleicht dies:
Code: Debug.Print ActiveWorkbook.BuiltinDocumentProperties("last Author").Value
Registriert seit: 06.12.2017
Version(en): diverse
@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 !
|