2016-05-18 7 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

として 薄暗いWkBkあなたは何を意味するか "それは動作しません?" –

+1

1つの可能性ワークシートをロックしてパスワードで保護することは簡単です。 https://msdn.microsoft.com/en-us/library/office/ff840611.aspx –

+0

@MacroMan:エラー400:/ DoktorOSwaldo:エラー400も、私はTest()マクロの最後に配置、それは大丈夫ですか? – Ikanagura

答えて

0
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly 
2

ワークブック非saveableあなたの代わりに次の操作を行うことができますようにしたい場合:

ThisWorkbookモジュールの使用では:

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

Cancel = True 

End Sub 

その後は(イミディエイトウィンドウになりましたCtrl + G)を入力し、次のように入力します。

Application.EnableEvents = Falseは -
Application.EnableEvents = True Enterキーを押し- -
ThisWorkbook.Save
を入力してEnterキーを押し、データを意味し、ユーザーがブックを保存しようとしたときにヒットが、それは単に保存キャンセルさせていただきます今

を入力することはできませんは永久にを上書きしてください。

+1

ありがとう、私は解決策を見つけましたが、私は将来このソリューションが必要になります! :) – Ikanagura

0

読み取り専用エクセル

によって制御されるファイルシステムのアクセス許可ではない1は、読み取り専用推奨であるユーザーとそのエクセルコントロールされているバージョンでは、読み取り専用(ただし、彼らが選択することができますようにそれを開くように要求されていますいいえ)。読み取り専用としてブックのコピーを保存するには

必要に推奨は: -

  1. 保存コピープロパティでSaveAsを使用してコピー
  2. 保存にコピーをSaveCopyAs
  3. 開く]を使用してReadOnlyRecommended trueに設定
  4. 最初の指示で前のコピーを削除します。
以下は10

は、この小さな例である: - ます。Public Sub Make_Copy_ReadOnlyRec()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 
関連する問題