Способы проверки или изменения атрибутов:
Option Explicit
Sub testFileAttributes()
Const FILE_NAME As String = "C:\Test.txt"
If isReadOnly(FILE_NAME) Then MsgBox "File is Read-only"
If isOpenAsReadOnly Then MsgBox "File is open as Read-only"
makeReadWrite FILE_NAME
If Not isReadOnly(FILE_NAME) Then MsgBox "File is not Read-only"
End Sub
.
Public Function isReadOnly(ByVal fName As String) As Boolean
'vbNormal = 0, vbReadOnly = 1, vbHidden = 2, vbDirectory = 16
if Len(fName) > 0 Then isReadOnly = GetAttr(fName) And vbReadOnly
End Function
.
Public Function isOpenAsReadOnly(Optional ByRef wb As Workbook = Nothing) As Boolean
If wb Is Nothing Then Set wb = ActiveWorkbook
isOpenAsReadOnly = wb.ReadOnly 'opened as read-only within Microsoft Excel
End Function
.
Public Sub makeReadWrite(ByVal fName As String)
Const READ_ONLY = 1
Dim fso As Object, fsoFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFile = fso.getFile(fName)
With fsoFile
If .Attributes And READ_ONLY Then .Attributes = .Attributes Xor READ_ONLY
End With
End Sub
Я не знаю ответа, но я сделал немного играть. Возможно, эта информация поможет кому-то понять ответ. Я сохранил книгу как доступную только для чтения, а затем попытался использовать 'FSO' для проверки' file.attributes'. Он показал как [32] (http://www.4guysfromrolla.com/webtech/112600-1.shtml), а не 'ReadOnly'. Открыв его, я предложил открыть его «ReadOnly». Изменение атрибута файла на «Только чтение» сделало «FSO» показать его как 33, и я не получил приглашение открыть его только для чтения. Флаг 'ReadOnly' в методе' Open' игнорируется, если его значение не задано 'TRUE'. Не уверен, что есть способ проверить ДО открытия Wb. :/ – Tim
Такая же проблема здесь. ** Для тех, кто хочет попробовать **: вам нужно указать время выполнения сценариев Microsoft Scripting. ** Замечание ** 33 = 32 + 1, что означает _ Archive_ и _ReadOnly_. Используя побитовый оператор 'And', вы можете написать' isReadOnly = file.Attributes And 1' ** Возможно ** [This post] (http://stackoverflow.com/questions/5651890/using-vba-to-get- extended-file-attributes) может помочь, но я не смог получить объект Shell. –
Это также может помочь: http://www.ozgrid.com/forum/showthread.php?t=48890&s=7e7b6a75b9d920235ef3f5dcfcf79b6e&p=249171#post249171 – NickSlash