Vba 条件锁单元格,无法排序
我正在尝试编写一个宏来锁定任何大于0的单元格。当我运行下面的代码时,它会工作,但会锁定第一行,在那里我有一个下拉箭头,可以进行排序和数字筛选。有没有办法添加到这个代码中,这样第一行就不会被锁定Vba 条件锁单元格,无法排序,vba,excel,Vba,Excel,我正在尝试编写一个宏来锁定任何大于0的单元格。当我运行下面的代码时,它会工作,但会锁定第一行,在那里我有一个下拉箭头,可以进行排序和数字筛选。有没有办法添加到这个代码中,这样第一行就不会被锁定 Sub Test() Dim Cell As Range Dim MyPlage As Range With ThisWorkbook.ActiveSheet .Unprotect .Cells.Locked = False Set
Sub Test()
Dim Cell As Range
Dim MyPlage As Range
With ThisWorkbook.ActiveSheet
.Unprotect
.Cells.Locked = False
Set MyPlage = .Range("J2:AA1074")
For Each Cell In MyPlage
If Not IsError(Cell) Then
If Cell.Value > "0" Then
Cell.Locked = True
End If
End If
Next
.Protect
End With
End Sub
最简单的方法是定义不包括顶行的范围:) 改变
.Range("J2:AA1074")
到
此外,您可以直接使用SpecialCells
,而不是循环遍历范围内的每个单元格并检查该单元格是否有错误。例如(经过尝试和测试)
要确保自动筛选和排序工作正常,请在中指定它。请像我上面所做的那样保护
在运行上述代码之前,还需要执行一个额外的步骤
如果工作表已受保护,请取消对其的保护
在“审阅”选项卡下,单击“允许用户编辑范围”
添加“新”范围
选择允许用户排序的范围
屏幕截图
最简单的方法是定义不包括顶行的范围:)
改变
.Range("J2:AA1074")
到
此外,您可以直接使用SpecialCells
,而不是循环遍历范围内的每个单元格并检查该单元格是否有错误。例如(经过尝试和测试)
要确保自动筛选和排序工作正常,请在中指定它。请像我上面所做的那样保护
在运行上述代码之前,还需要执行一个额外的步骤
如果工作表已受保护,请取消对其的保护
在“审阅”选项卡下,单击“允许用户编辑范围”
添加“新”范围
选择允许用户排序的范围
屏幕截图
最简单的方法是定义不包括顶行的范围:)
改变
.Range("J2:AA1074")
到
此外,您可以直接使用SpecialCells
,而不是循环遍历范围内的每个单元格并检查该单元格是否有错误。例如(经过尝试和测试)
要确保自动筛选和排序工作正常,请在中指定它。请像我上面所做的那样保护
在运行上述代码之前,还需要执行一个额外的步骤
如果工作表已受保护,请取消对其的保护
在“审阅”选项卡下,单击“允许用户编辑范围”
添加“新”范围
选择允许用户排序的范围
屏幕截图
最简单的方法是定义不包括顶行的范围:)
改变
.Range("J2:AA1074")
到
此外,您可以直接使用SpecialCells
,而不是循环遍历范围内的每个单元格并检查该单元格是否有错误。例如(经过尝试和测试)
要确保自动筛选和排序工作正常,请在中指定它。请像我上面所做的那样保护
在运行上述代码之前,还需要执行一个额外的步骤
如果工作表已受保护,请取消对其的保护
在“审阅”选项卡下,单击“允许用户编辑范围”
添加“新”范围
选择允许用户排序的范围
屏幕截图
您可以将以下代码添加到工作表模块中(使用自动过滤器将范围(“J1:AA1”)
更改为范围):
您可以将以下代码添加到工作表模块中(使用自动过滤器将范围(“J1:AA1”)
更改为范围):
您可以将以下代码添加到工作表模块中(使用自动过滤器将范围(“J1:AA1”)
更改为范围):
您可以将以下代码添加到工作表模块中(使用自动过滤器将范围(“J1:AA1”)
更改为范围):
那么为什么不相应地定义您的范围呢?不要使用.Range(“J2:AA1074”)
,而是使用.Range(“J3:AA1074”)
@SiddharthRout,我刚刚发现,如果排序范围中有任何锁定的单元格(当工作表受到保护时),我无法使用自动筛选对列进行排序。因此,这没有帮助。您的问题是什么<代码>1
确保第1行未锁定?或者2
如果有一个锁定的单元格或两者都有,则无法排序?@SiddharthRout,据我所知,OP希望取消第一行的锁定,然后能够使用autofilter@simoco例如我想是的。只是想在发布之前确认一下,因为我的答案已经准备好了:)那么为什么不相应地定义你的范围呢?不要使用.Range(“J2:AA1074”)
,而是使用.Range(“J3:AA1074”)
@SiddharthRout,我刚刚发现,如果排序范围中有任何锁定的单元格(当工作表受到保护时),我无法使用自动筛选对列进行排序。因此,这没有帮助。您的问题是什么<代码>1
确保第1行未锁定?或者2
如果有一个锁定的单元格或两者都有,则无法排序?@SiddharthRout,据我所知,OP希望取消第一行的锁定,然后能够使用autofilter@simoco例如我想是的。只是想在发布之前确认一下,因为我的答案已经准备好了:)那么为什么不相应地定义你的范围呢?不要使用.Range(“J2:AA1074”)
,而是使用.Range(“J3:AA1074”)
@SiddharthRout,我刚刚发现,如果排序范围中有任何锁定的单元格(当工作表受到保护时),我无法使用自动筛选对列进行排序。因此,这没有帮助。您的问题是什么<代码>1
确保第1行未锁定?或者2
如果有一个锁定的单元格或两者都有,则无法排序?@SiddharthRout,据我所知,OP希望取消第一行的锁定,然后能够使用autofilter@simoco例如我想是的。只是想在发布之前确认一下,因为我的答案已经准备好了:)那么为什么不相应地定义你的范围呢?不要使用.Range(“J2:AA1074”)
,而是使用.Range(“J3:AA1074”)
@SiddharthRout,我刚刚发现我无法对列进行排序