Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

"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?
Antworten 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
Antworten Top
#3
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:
  • MichaLauterbach
Antworten 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!
Antworten 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
Antworten 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?
Antworten 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
Antworten Top
#8
Hallo Uwe,

das funktioniert leider nicht. strFile hat trotzdem die ~$200921_Dateiname.xlsx als Wert.
Antworten 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?
Antworten 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
Antworten Top


Gehe zu:


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