"ReadOnly = True" funktioniert nicht
#1
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?
Top
#2
Hallo,

siehe https://docs.microsoft.com/de-de/office/...parameters

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • MichaLauterbach
Top
#3
Moin und ergänzend!
(14.09.2020, 13: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:
  • MichaLauterbach
Top
#4
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!
Top
#5
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. Huh
Top
#6
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?
Top
#7
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:
  • MichaLauterbach
Top
#8
Hallo Uwe,

das funktioniert leider nicht. strFile hat trotzdem die ~$200921_Dateiname.xlsx als Wert.
Top
#9
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?
Top
#10
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:
  • MichaLauterbach
Top


Gehe zu:


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