Registriert seit: 17.07.2020
Version(en): 2013
Hallo zusammen,
ich lasse ein Macro nach der neusten Datei suchen auf einem Netzwerklaufwerk, öffnen, kopiere was raus und schließe es wieder.
Funktioniert auch. Aber sobald das neuste File schon von jemand anderes (oder mir selber!) geöffnet ist, öffnert er nix und es kommt eine VBA fehlermeldung wegen dem kopierversuch.
Dim WBPalZiel As Workbook
Dim WBPalQuelle As Workbook, WSPalZiel As Worksheet
Set WBPalZiel = ThisWorkbook
Dim fdr As Scripting.Folder
Dim target As Scripting.file
Dim strFile As String
For Each fdr In CreateObject("Scripting.FileSystemObject").GetFolder("O:\.....\Q3").SubFolders
For Each target In fdr.Files
If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 Then
If target.DateLastModified > dteFile Then
dteFile = target.DateLastModified
strFile = target
End If
End If
Next
Next
If Len(Dir(strFile)) Then
Set WBPalQuelle = Workbooks.Open(strFile)
End If
With WBPalQuelle
WBPalZiel.Sheets("Sheet5").Range("B1:H218").Value = Sheets("Sheet1").Range("A1:G219").Value
.Close savechanges:=False
End With
Nun hab ich aus Set WBPalQuelle = Workbooks.Open(strFile) ein Set WBPalQuelle = Workbooks.Open(strFile, ReadOnly=True) gemacht, hilft aber nix.
Es wird trotzdem nicht geöffnet. Wenn es niemand offen hat geht es.
Hat da jemand eine Idee warum das ReadOnly=True nicht funktioniert? Vielleicht an der falschen Stelle?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• MichaLauterbach
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
15.09.2020, 04:20
(Dieser Beitrag wurde zuletzt bearbeitet: 15.09.2020, 04:20 von RPP63.)
Moin und ergänzend!
(14.09.2020, 12:21)MichaLauterbach schrieb: Nun hab ich aus Set WBPalQuelle = Workbooks.Open(strFile) ein Set WBPalQuelle = Workbooks.Open(strFile, ReadOnly=True) gemacht, hilft aber nix.
[…]
Hat da jemand eine Idee warum das ReadOnly=True nicht funktioniert? Vielleicht an der falschen Stelle?
Ich gehe mal davon aus, dass Du Option Explicit nicht gesetzt hast.
Daher hat die nicht deklarierte Variant-
Variable ReadOnly keinerlei Auswirkung!
Um den
Parameter ReadOnly (siehe den Link von Uwe) zu setzen, braucht man zusätzlich den Doppelpunkt!
Also statt
ReadOnly = True
heißt es
ReadOnly:=True
Um so etwas zu verhindern (und auch andere Annehmlichkeiten zu nutzen), setze grundsätzlich Option Explicit!
https://www.online-excel.de/excel/singsel_vba.php?f=4
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• MichaLauterbach
Registriert seit: 17.07.2020
Version(en): 2013
Hallo Uwe und Ralf,
den Link von Uwe kannte ich schon. Da habe ich aber nix gesehen was mein Fehler erklärt. Das Option Explicit oder einen : benötigt wird steht da nicht.
Das Variant eine Variablentyp ist der ohne explicit keine Auswirkung hat war mir nicht bekannt Ich habe das option explicit nie benutzt, weil ich nicht wusste wozu das gut ist.
Ralf ich danke dir für deine Klarstellung mit option und dem :
Vielen Dank!
Registriert seit: 17.07.2020
Version(en): 2013
Ich habe es jetzt mal getestet, und es geht immer noch nicht. Weder mit Option Explicit, noch mit Readonly:=true, und beides zusammen geht auch nicht.
Registriert seit: 17.07.2020
Version(en): 2013
21.09.2020, 11:24
(Dieser Beitrag wurde zuletzt bearbeitet: 21.09.2020, 11:24 von MichaLauterbach.)
Hab den Fehler jetzt gefunden, weiß aber nicht wie ich ihn behebe.
Wenn die Datei niemand geöffnet hat, findet er die neuste 200921_Dateiname.xlsx und öffnet sie normal
Wenn aber geöffnet, findet er ~$200921_Dateiname.xlsx (versteckt) und will die öffnen, was nicht geht.
Kann ich irgendwie diese temporären ~$ Dateien in die Suche nach der neusten Datei ausschließen?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
z.B. so:
If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 And Left(target, 2) <> "~$" Then
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• MichaLauterbach
Registriert seit: 17.07.2020
Version(en): 2013
Hallo Uwe,
das funktioniert leider nicht. strFile hat trotzdem die ~$200921_Dateiname.xlsx als Wert.
Registriert seit: 17.07.2020
Version(en): 2013
Kuwer schrieb:Hallo,
z.B. so:If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 And Left(target, 2) <> "~$" Then
Gruß Uwe
If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 And Left(target, 2) <> "~$" Then StrFile bekommt wert "O:\Ordner1\Ordner2\2020\Q3\~$200921_Dateiname.xlsx
If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 And Left(target, 2) = "~$" Then StrFile bekommt keinen Wert
If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 And Left(target, 2) = "O:" Then StrFile bekommt wert "O:\Ordner1\Ordner2\2020\Q3\~$200921_Dateiname.xlsx
Ich kann also durch probieren sagen, dass sich das AND Left(target,2) auf den Pfadanfang bezieht, nicht auf den Anfang vom Dateinamen
Hat noch jemand einen Vorschlag wie ich Dateien mit ~$ vorne aus der Suche ausschließen kann?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
If InStr(1, UCase(target), UCase("Dateiname.xls")) > 0 And InStr(1, target, "~$") = 0 Then
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• MichaLauterbach