Excel VBA代码select所有数据有时工作的数据

我曾经构build过一个VBAbutton来自动locking所有包含数据的单元格。 它完美地工作。 现在我想将该button复制到另一个工作表。 所以我创build了另一个button,复制并粘贴整个VBA,然后编辑工作表名称和范围。 而且,只有5%的时间,剩下的时间,我得到了一个“运行时错误'1004':没有发现细胞。 我已经尝试了一些固定的,更改表格到工作表,或者添加一个“,23”到specialcells参数。 但是,现在没有任何工作。 当我尝试join时,有时会说rng和lckrng都是空的,有时候只显示空格而不显示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 

如果两个参数中的Nothing一个都是Nothing (例如,在范围中没有常量,或者在范围中没有公式),则您尝试的Union将无法工作。

在做Union之前,你应该检查参数是不是Nothing但是,一旦你开始改变你的代码来做到这一点,这将是简单的做locking在两个部分 – 所以我build议你重写代码如下:

 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 

也许这太简单了,但它似乎是做你想做的。 animation的.gif显示它正在“locking所有包含数据的单元格”。 (为了方便,我做了第二个button)。 如果没有别的,从这样的事情开始,可能是好的,它适用于你的需求。

在这里输入图像说明

 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