Registriert seit: 06.12.2017
Version(en): diverse
(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 ? 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 !
|