簡體   English   中英

如何鎖定復制的工作簿的所有單元格?

[英]How do I lock all cells of a copied workbook?

我試圖在保存時創建我的工作簿的副本,但是當我創建該副本時,請鎖定所有單元格,以便無法更改它們。

這是我所擁有的...

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

Dim FName As String
Dim FPath As String
Dim NewBook As Workbook

FPath = ThisWorkbook.Path & "\" '& FName
FName = "Saved File" & Format(Date, "YYMMDD") & ".xlsx"

Set NewBook = Workbooks.Add

Application.DisplayAlerts = False
ThisWorkbook.Sheets.Copy
ActiveWorkbook.SaveAs Filename:=FPath & FName, FileFormat:=51
ActiveWorkbook.Close
Application.DisplayAlerts = True

'NewBook.SaveAs Filename:=FPath & FName, FileFormat:=51

Application.DisplayAlerts = False
NewBook.Close
Application.DisplayAlerts = True


End Sub

任何幫助將非常感激。 提前謝謝了

在您的情況下,您可以使用usedrange.locked來鎖定新工作簿的整個使用范圍。 但是,在工作簿受到保護之前,這不會阻止編輯,因此最好也使用worksheet.protect 完整代碼:

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

Dim FName As String
Dim FPath As String
ThisWorkbook.Activate
FPath = ThisWorkbook.Path & "\" '& FName
FName = "Saved File" & Format(Date, "YYMMDD") & ".xlsx"


Application.DisplayAlerts = False
ThisWorkbook.Sheets.Copy
With ActiveWorkbook
.Sheets(1).UsedRange.Locked = True
.Sheets(1).Protect ""
.SaveAs Filename:=FPath & FName, FileFormat:=51
.Close
End With
Application.DisplayAlerts = True

End Sub

請注意, usedrange通常不是覆蓋整個范圍的最佳做法,因為它有時會變得太大。 但是,在您的情況下,您需要確保工作表中的所有單元格都被覆蓋。 由於默認情況下所有單元格在未更改時都受到保護,因此usedrange將在這里很好地完成其余單元格的工作。

編輯,我掩蓋了大部分代碼,因為只有protect與問題相關。 但是,根據評論,這會導致問題。 發生的情況是您創建一個新工作簿,然后使用您的代碼復制該工作簿。 這也會自動創建一個新工作簿。 這是一個被保存的, newbook被關閉,沒有任何改變。 我刪除了這部分代碼。 復制后的ActiveWorkbook應該是包含復制數據的那個,所以我把它設置為被鎖定和保存的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM