[英]Excel VBA code to select all cells with data sometimes working
我曾經構建了一個VBA按鈕來自動鎖定其中包含數據的所有單元格。 它運行得很好。 現在,我想將該按鈕復制到另一個工作表。 因此,我創建了另一個按鈕,復制並粘貼了整個VBA,然后編輯了工作表名稱和范圍。 而且,它僅以5%的時間工作,其余時間,我收到“運行時錯誤'1004':未找到任何單元格”。 我嘗試了一些固定的方法,將工作表更改為工作表,或在specialcells參數中添加“ 23”。 但是,目前沒有任何工作。 當我嘗試介入時,有時會說rng和lckrng都為空,有時只將lockrng顯示為空,而根本不顯示rng。 問題是這曾經是一個可以工作的代碼,現在,它仍然可以在5%的時間內工作。 知道為什么嗎? 非常感謝你!
Private Sub CommandButton1_Click()
Dim rng As Range
Dim lockrng As Range
Sheets("Uploading Checklist (M)").Unprotect Password:="signature"
Set rng = Range("A1:M14")
'Selecting hardcoded data and formulas
Set lockrng = Union(rng.SpecialCells(xlCellTypeConstants), rng.SpecialCells(xlCellTypeFormulas))
lockrng.Locked = True
Sheets("Uploading Checklist (M)").Protect Password:="signature"
End Sub
也許這太簡單了,但是它似乎可以完成您想要的。 動畫的.gif表示它可以“鎖定所有包含數據的單元格”。 (為方便起見,我按下了第二個按鈕)。 如果沒有別的,最好從這樣的東西開始,然后進行修改以適合您的需求。
Dim cell As Range, sh As Worksheet
Sub Button4_Click()
Set sh = Worksheets("Sheet1")
sh.Unprotect Password:="s"
For Each cell In sh.UsedRange
If cell <> "" Then cell.Locked = True Else cell.Locked = False
Next
sh.Protect Password:="s"
End Sub
Sub Button5_Click()
Set sh = Worksheets("Sheet1")
sh.Unprotect Password:="s"
End Sub
該Union
要嘗試如果任一參數是行不通Nothing
(即你要么沒有常數范圍內,或者你有在范圍內沒有公式)。
在執行Union
之前,您應該檢查參數Nothing
但是一旦開始更改代碼以做到這一點,將鎖分為兩部分就一樣簡單-因此,我建議您按以下方式重寫代碼:
Private Sub CommandButton1_Click()
With Sheets("Uploading Checklist (M)")
.Unprotect Password:="signature"
With .Range("A1:M14")
'Lock any constants
If Not .SpecialCells(xlCellTypeConstants) Is Nothing Then
.SpecialCells(xlCellTypeConstants).Locked = True
End If
'Lock any formulas
If Not .SpecialCells(xlCellTypeFormulas) Is Nothing Then
.SpecialCells(xlCellTypeFormulas).Locked = True
End If
End With
.Protect Password:="signature"
End With
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.