Excel VBA - 使用受保护的行和列进行排序

时间:2017-09-18 20:47:59

标签: vba excel-vba excel

我是普通/中级VBA开发人员,主要能够修改现有代码并重复使用代码来扩展Excel项目。

我们遇到了某人在Excel 2013中录制了一些Macro但他们在Excel 2003中无法工作的情况。他们必须在Excel 2003中工作,因为该工作表的遗留性质主要的。

所以,我做了一些研究并重新编写了宏的代码,所以它将在2003年。但是,在这个工作簿中的4个工作表中,它只在第一页上工作。它让我疯狂地试图找出原因。最后注意到,在其他3个工作表中,第一列和第一行都是PROTECTED。如果我取消保护它们,重写的宏将起作用。

因此,需要一些关于如何使这些重写的宏与第一行和列保护一致的建议。

这是宏的一个示例(有多个像这样只有范围差异):

Sub KA24()

' Had to Convert Macro to work with the older version of Excel 2003 in the 
 shop - BW - 8/31/2017

Dim Ws As Worksheet
Set Ws = Worksheets("24 GA KY")
Application.ScreenUpdating = False
Ws.Range("D2:J9").Sort Key1:=Ws.Range("G2"), Order1:=xlAscending, 
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, 
DataOption1:=xlSortNormal
Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:0)

您可以使用UserInterFaceOnly方法取消保护工作表以在VBA代码中使用。这假设您的工作表使用密码“Something”进行密码保护,如果不是只留下密码部分。

Dim Ws As Worksheet
Set Ws = Worksheets("24 GA KY")
Ws.Protect Password:="Something", UserInterFaceOnly:=True
...