2016-05-18 4 views
0

У меня есть макрос, который создает копию книги в VBA. Я хочу эту копию «Только для чтения», но свойство ReadOnly := True не работает. Вы можете мне помочь? Вот код:VBA - Сохранение книги без возможности изменения содержимого

Первый макрос:

Sub SaveXL() 

Dim Nom2 As String 
Dim Jour2 As String 
Dim FPath2 As String 
Jour2 = Format(Now(), "yyyymmdd - h\hmm") 
Nom2 = Jour2 & " Pricelist" 
FPath2 = Sheets("PARAM").Range("B33").Value 
On Error GoTo fin4 
fichier = Application.GetSaveAsFilename(FPath2 & Nom2, "Fichiers Excel (*.xls), *.xls") 
If fichier <> "Faux" Then 
    ActiveWorkbook.SaveCopyAs fichier 
    VBA.SetAttr fichier, vbReadOnly 
    Test GetAName(fichier) 
Else 
    MsgBox "Le fichier n'a pas été enregistré" 
End If 
Exit Sub 
fin4:   MsgBox "La création de l'excel a échoué" 
End Sub 

Второе:

Sub Test(targetWorkbookName As String) 
Dim F As Integer, C As Integer, derniereligne 
Dim targetWorkbook As Workbook 
On Error Resume Next 
Set targetWorkbook = Workbooks(targetWorkbookName) 
On Error GoTo 0 
If (targetWorkbook Is Nothing) Then _ 
    Set targetWorkbook = Workbooks.Open(Filename := targetWorkbookName, ReadOnly := True) 

For F = 1 To Sheets.Count 
    ActiveSheet.Select 
    For C = 15 To 2 Step -1 
     ActiveSheet.Columns(C).Select 
     Selection.End(xlDown).Select 
     derniereligne = ActiveCell.Row 
     If ActiveSheet.Columns(C).Hidden = True Then 
      ActiveSheet.Columns(C).Delete 
     End If 
    Next C 
Next F 
Application.DisplayAlerts = False 
Sheets("PARAM").Delete 
ActiveWorkbook.ActiveSheet.Shapes.Range(Array("Button 2")).Select 
      Selection.Delete 
ActiveWorkbook.ActiveSheet.Shapes.Range(Array("Button 9")).Select 
      Selection.Delete 

targetWorkbook.SaveAs Filename:=targetWorkbookName, FileFormat:=xlOpenXMLWorkbook 
End Sub 

Спасибо!

+0

Что вы имеете в виду –

+1

один из возможных вариантов. Подход ist заблокировать рабочий лист и защитить его паролем. https://msdn.microsoft.com/en-us/library/office/ff840611.aspx –

+0

@MacroMan: Ошибка 400:/ DoktorOSwaldo: ошибка 400 тоже, я поместил ее в конец макроса Test(), it это нормально? – Ikanagura

ответ

2

Если вы хотите, чтобы сделать Рабочие ун-сохраняемыми вы можете сделать следующее вместо:

При использовании в ThisWorkbook модуля:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

Cancel = True 

End Sub 

Затем попал в ближайшее окно (пресс Ctrl + G) и тип:

Application.EnableEvents = False - хит Enter
ThisWorkbook.Save - хит Enter
Application.EnableEvents = True - хит Enter

Теперь, когда пользователь пытается сохранить книгу он будет просто отменить сохранение, то есть данные не могут be постоянно перезаписан.

+1

Спасибо, я нашел решение, но мне понадобится это решение в будущем! :) – Ikanagura

0

только для чтения является разрешение файловой системы не один управляется Excel

только чтение рекомендованной контролируемой версии Excel его в с пользователем запроса, чтобы открыть его, как только для чтения (но они могут выбрать нет).

Чтобы сохранить копию книги, как только для чтения рекомендуется вам нужно: -

  1. Сохранить копию, используя SaveCopyAs
  2. Открыть копию
  3. Сохранить копию, используя SaveAs со свойством ReadOnlyRecommended установлено в true
  4. Удалить предыдущую копию сделанные в соответствии с первоначальной инструкцией

Ниже приведен небольшой пример этого: - "не работает" Public Sub Make_Copy_ReadOnlyRec() Dim WkBk Как Excel.Workbook

'Using SaveCopyAs 
ThisWorkbook.SaveCopyAs Environ("UserProfile") & "\Desktop\Temp.xlsm" 

'Open the copy 
Set WkBk = Application.Workbooks.Open(Environ("UserProfile") & "\Desktop\Temp.xlsm") 

    'Use save as to make it read only recommended 
    WkBk.SaveAs Environ("UserProfile") & "\Desktop\Sample.xlsm", XlFileFormat.xlOpenXMLWorkbookMacroEnabled, , , True 

    'Close the now read only recommended copy 
    WkBk.Close 
Set WkBk = Nothing 

'Delete the original copy 
Kill Environ("UserProfile") & "\Desktop\Temp.xlsm" 

End Sub