分享

VBA常用代码解析(第七讲)

 wdmexcel 2015-08-21


下面应一位粉丝的要求,开始把我以前的一些学习资料整理了一下,然后分20期发给各位有需要的朋友,您也可以索取源文件,邮箱:546039945@qq.com!

038 工作表的保护与解除保护

在实际应用中,Excel编制的报表、表格、程序等,往往在单元格中设置了公式、函数、自定义格式等,为了防止在使用过程中修改或无意中修改这些设置,一般使用Excel的工作表保护功能来保护这些设置。

但是程序中可能会使用代码对受保护的工作表进行操作,此时如果没有解除工作表保护,运行出现错误。

解决方法是在运行操作工作表的代码前先使用代码解除工作表保护,待操作完毕后再保护工作表,如下面的代码所示。

Sub ShProtect()

WithSheet1

.Unprotect Password:='12345'

.Cells(11) = 100

.Protect Password:='12345'

EndWith

End Sub

代码解析:

ShProtect过程在受保护的工作表中对单元格进行操作,其中第3行代码使用Unprotect方法解除工作表的保护。应用于Worksheet 对象的Unprotect方法解除工作表的保护,如果工作表不是受保护的,则此方法不起作用,所以在解除之前无需判断工作表是否受保护,其语法如下:

expression.Unprotect(Password)

参数expression是必需的,该表达式返回一个Worksheet对象。

参数Password是可选的,指定用于解除工作表的保护的密码,此密码是区分大小写的。

45行代码在单元格录入数据后使用Protect方法重新保护工作表。应用于Worksheet对象的Protect方法保护工作表使其不至被修改,语法如下:

expression.Protect(PasswordDrawingObjectsContentsScenariosUserInterfaceOnlyAllowFormattingCellsAllowFormattingColumnsAllowFormattingRowsAllowInsertingColumnsAllowInsertingRowsAllowInsertingHyperlinksAllowDeletingColumnsAllowDeletingRowsAllowSortingAllowFilteringAllowUsingPivotTables)

其中参数expression是必需的,该表达式返回一个Worksheet对象。

参数Password是可选的,为一个字符串,该字符串为工作表指定区分大小写的密码。

其他参数都是可选参数,其功能等同于工作表保护对话框中的各项选项,具体请参阅VBA帮助。如果一个Excel文件使用时间过长,忘记了工作表保护时设置的密码,那么也可以使用VBA解除工作表的保护,代码如下:

Sub RemoveShProtect()

Dimi1 As Integeri2 As Integeri3 As Integer

Dimi4 As Integeri5 As Integeri6 As Integer

Dimi7 As Integeri8 As Integeri9 As Integer

Dimi10 As Integeri11 As Integeri12 As Integer

On ErrorResume Next

If ActiveSheet.ProtectContents= False Then

MsgBox '该工作表没有保护密码!'

Exit Sub

EndIf

Fori1 = 65 To 66: For i2 = 65 To 66: For i3 = 65 To 66

Fori4 = 65 To 66: For i5 = 65 To 66: For i6 = 65 To 66

Fori7 = 65 To 66: For i8 = 65 To 66: For i9 = 65 To 66

Fori10 = 65 To 66: For i11 = 65 To 66: For i12 = 32 To 126

ActiveSheet.Unprotect Chr(i1) & Chr(i2)& Chr(i3) & Chr(i4) & Chr(i5) _

& Chr(i6) & Chr(i7) & Chr(i8)& Chr(i9) & Chr(i10) & Chr(i11) & Chr(i12)

If ActiveSheet.ProtectContents = False Then

MsgBox '已经解除了工作表保护!'

Exit Sub

End If

Next:Next: Next: Next: Next: Next

Next:Next: Next: Next: Next: Next

End Sub

代码解析:

RemoveShProtect过程解除工作表的保护。

其中第7行到第10行代码判断工作表是否受保护,ProtectContents属性返回工作表的保护状态,如果工作表的内容处于保护状态,则该值为True

11行到第22行代码使用For...Next 语句和Chr函数来返回指定字符码所代表的字符串组合不断地尝试解除工作表保护,一旦工作表的ProtectContents属性返回False说明已经解除工作表保护。

039 奇偶页打印

Excel中却没有提供打印奇数页和偶数页的功能,用户可以使用VBAExcel中实现该功能,如下面的代码所示。

Sub PrintOddPage()

DimTotalPg As Integer

TotalPg= ExecuteExcel4Macro('GET.DOCUMENT(50)')

Fori = 1 To TotalPg Step 2

ActiveSheet.PrintOut From:=iTo:=i

Next

End Sub

代码解析:

PrintOddPage过程打印活动工作表的奇数页内容,其中第3行代码使用ExecuteExcel4Macro方法执行Excel 4.0宏表函数获取总页数,通过该函数获取总页数而无需判断分页符。

4行到第6行代码使用For...Next 语句和PrintOut方法逐页打印所有的奇数页,PrintOut方法打印指定对象,语法如下:

expression.PrintOut(FromToCopiesPreviewActivePrinterPrintToFileCollatePrToFileName)

参数expression是必需的,一个有效的对象。

其他参数都是可选的,其中参数From指定打印的开始页号,如果省略该参数,将从起始位置开始打印;参数To指定打印的终止页号,如果省略该参数,将打印至最后一页。

如果需要对活动工作表的偶数页进行打印,只需将第4行代码中的For...Next循环计数器的初值由1改为2即可。

040 工作簿的引用方法

VBA中,在不同的工作簿之间转换需要指定引用的工作簿,通常有下面几种方法。

040-1 使用工作簿的名称

工作簿名称是指Excel文件的文件名,可以使用Workbooks集合引用方式来引用工作簿,如下面的代码所示。

Sub WbQuote_1()

MsgBox'路径为:' & Workbooks('40 工作簿的引用方法.xls').Path

End Sub

代码解析:

WbQuote_1过程显示工作簿“▲40 工作簿的引用方法.xls”的路径。应用于Workbook对象的Path属性将完整路径返回给应用程序,语法如下:

expression.Path

参数expression是必需的,一个有效的对象。

运行WbQuote_1过程结果。

040-2 使用工作簿的索引号

工作簿索引号是指工作簿打开的顺序,Excel根据工作簿打开的顺序以1开始进行编号。下面的代码显示应用程序打开的第一个工作簿的名称。

Sub WbQuote_2()

MsgBox'第一个打开的工作簿名字为:' & Workbooks(1).Name

End Sub

代码解析:

WbQuote_2过程显示应用程序打开的第一个工作簿的名称。应用于Workbook对象的Name属性返回对象的名称,语法如下:

expression.Name

参数expression是必需的,一个有效的对象。

运行WbQuote_2过程,如果本工作簿是第一个打开的,结果。

如果需要返回包含完整路径的工作簿名称则使用Workbook对象的FullName属性,如下面的代码所示。

Sub WbQuote_3()

MsgBox '包括完整路径的工作簿名称为:'& Workbooks(1).FullName

End SubWbQuote_3过程显示应用程序打开的第一个工作簿的完整路径和名称。FullName属性返回对象的名称,包括其磁盘路径的字符串,此属性等价于在Path属性后加上当前文件系统的分隔符,然后加上Name属性。

运行WbQuote_3过程,如果本工作簿是第一个打开的,结果。

040-3 使用ThisWorkbook

使用ThisWorkbook属性返回当前宏代码运行的工作簿,如下面的代码所示。

Sub WbQuote_4()

ThisWorkbook.Save

End Sub

代码解析:

WbQuote_4过程使用Save方法保存当前宏代码运行的工作簿所做的更改。

ThisWorkbook属性返回一个Workbook对象,该对象代表当前宏代码运行的工作簿。

应用于Workbook对象的Save方法保存指定工作簿所做的更改。

注意本属性仅可在 Microsoft Excel内使用。不能使用此属性访问任何其他应用程序的工作簿。

040-4 使用ActiveWorkbook

使用ActiveWorkbook代表活动窗口(最上面的窗口)的工作簿,如下面的代码所示。

Sub WbQuote_5()

MsgBox'当前活动工作簿名字为:' & ActiveWorkbook.Name

End Sub

代码解析:

WbQuote_5过程显示活动工作簿的名称,ActiveWorkbook属性返回一个Workbook对象,该对象代表活动窗口(最上面的窗口)的工作簿。如果没有打开任何窗口或者活动窗口为信息窗口或剪贴板窗口,则返回Nothing

3部分 Wordbook(工作簿)对象


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多