我有一个宏从命名范围中删除一行。
按下按钮运行该宏后,我再也无法编辑单元格了
不在该范围内,也不在我受保护的工作表中的任何可编辑单元格中
似乎具有相同代码的工作簿在Excel 2010中也不起作用。
这是我的宏:
Sub DeleteParameterRow(ByVal tCell As Range)
'''this procedure delete a row from one of the parameters lists
On Error GoTo ErrHandler
Application.EnableEvents = False
Application.DisplayAlerts = False
Dim iRowToDelete As Integer
Call Unprotect_All()
If IsPartOfRange(tCell, NamedRange("Param_ParametersList"), False) Then
tCell.Delete Shift:=xlUp
Else
MsgBox("Please select one of the parameters list", vbInformation, "Error")
End If
EndProc:
Call Protect_All()
Application.DisplayAlerts = True
Application.EnableEvents = True
Exit Sub
ErrHandler:
MsgBox(Err.Description, vbCritical, Err.Number)
GoTo EndProc
End Sub
Function IsPartOfRange(ByVal rSearchRange As Range, ByVal rSearchInRange As Range, ByVal bIsEntireRange As Boolean) As Boolean
'''this function gets a small range, a big range and if it is supposed to be the entire range, and check
'''if the smaller range is part of the bigger one, and if it is the entire range
IsPartOfRange = False
If Not Intersect(rSearchRange, rSearchInRange) Is Nothing Then
If bIsEntireRange = True Then
If rSearchRange.Address = rSearchInRange.MergeArea.Address Then IsPartOfRange = True
Else
IsPartOfRange = True
End If
End If
End Function
答案 0 :(得分:0)
看到我最后的评论,我提到它似乎是一种“刷新”问题
代码运行后,Excel中会堆积一些可防止编辑的内容。 (No way to report bugs to MS... :(
)
为了以编程方式强制“刷新”,我发现清除任意单元格的内容是有用的。
因此,添加行tCell.ClearContents
befor EndProc:
可以完成游戏。
答案 1 :(得分:0)
这个问题困扰了我一段时间,没有明确的答案。您可以选择另一个工作表,然后返回工作表并再次编辑作品,或者使用单元格ClearContents的技巧。
我认为答案,至少就我而言,是在工作表上有一个ActiveX命令按钮(以及其他控件),这些按钮在单击时默认为焦点。在按钮属性中将此功能设置为False可以轻松解决编辑问题,尽管对于组合框,这会导致相同的问题,但是没有“对焦”属性!
该问题与与按钮相关联的宏无关,只要单击没有宏的按钮即可执行,因为以特定的方式聚焦会导致阻止编辑。