2015-08-07 2 views
0

Просьба сообщить о том, как проверить, если файл будет готов только перед его открытием ...Vba код для проверки файл является только для чтения

Ниже код для используется, чтобы открыть файл ...

myFileNameDir = "H:\Shaikh_Gaus\scratch\VBA\Book16.xlsx" 
Workbooks.Open Filename:=myFileNameDir, UpdateLinks:=0 

Set ws1 = Worksheets("Students") 
+2

Я не знаю ответа, но я сделал немного играть. Возможно, эта информация поможет кому-то понять ответ. Я сохранил книгу как доступную только для чтения, а затем попытался использовать 'FSO' для проверки' file.attributes'. Он показал как [32] (http://www.4guysfromrolla.com/webtech/112600-1.shtml), а не 'ReadOnly'. Открыв его, я предложил открыть его «ReadOnly». Изменение атрибута файла на «Только чтение» сделало «FSO» показать его как 33, и я не получил приглашение открыть его только для чтения. Флаг 'ReadOnly' в методе' Open' игнорируется, если его значение не задано 'TRUE'. Не уверен, что есть способ проверить ДО открытия Wb. :/ – Tim

+0

Такая же проблема здесь. ** Для тех, кто хочет попробовать **: вам нужно указать время выполнения сценариев 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. –

+0

Это также может помочь: http://www.ozgrid.com/forum/showthread.php?t=48890&s=7e7b6a75b9d920235ef3f5dcfcf79b6e&p=249171#post249171 – NickSlash

ответ

0

Способы проверки или изменения атрибутов:

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 
+0

Файл защищен paaword. Пожалуйста, сообщите, где ввести пароль .... –

+0

Это другой вопрос, но, чтобы снять защиту с книги, перейдите на вкладку «Обзор», последний раздел справа («Изменения») и нажмите «Защитить книгу» - здесь вы помещаете пароль. Закройте этот вопрос, если в ответе приведена ваша первоначальная проблема –

Смежные вопросы