[英]How do I copy all data, limiting cells to 72 characters, into a new workbook?
[英]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.