简明Excel VBA
本文集同步于GitHub仓库:# bluetata/concise-excel-vba
5.2 打开Excel两种方式
- 利用
GetObject
方法打开Excel文档
Sub GetWorkbook()
Dim wbWorkFile As Workbook
Set wbWorkFile = GetObject("D:\test.xlsx")
' wbWorkFile.Windows(1).Visible = True ' 这种方法打开的文件是隐藏的,如果需要显示,则设置Visible值为ture
wbWorkFile.Close False
Set wbWorkFile = Nothing
End Sub
- 利用
Open
方法打开Excel文档
Sub OpenWorkbook()
Dim wbWorkFile As Workbook
Set wbWorkFile = Workbooks.Open("D:\test.xlsx")
wbWorkFile.Windows(1).Visible = False
wbWorkFile.Close False
Set wbWorkFile = Nothing
End Sub
延伸其扩展方法:
- GetObject封装方法,可以作为共通Function
Sub GetWorkbook()
Dim objExcel As Object ' 用于存放Microsoft Excel 引用的变量。
Dim blnExcelWasNotRunning As Boolean ' 用于最后释放的标记。
' 测试 Microsoft Excel 的副本是否在运行。
On Error Resume Next ' 延迟错误捕获。
' 不带第一个参数调用 Getobject 函数将返回对该应用程序的实例的引用。如果该应用程序不在运行,则会产生错误。
Set objExcel = Getobject(, "Excel.Application")
If Err.Number <> 0 Then blnExcelWasNotRunning = True
Err.Clear ' 如果发生错误则要清除 Err 对象。
Set objExcel = Getobject("C:\excel.xlsx") ' 将对象变量设为对要看的文件的引用。
' 设置其 Application 属性,显示 Microsoft Excel。然后使用 objExcel 对象引用的 Windows 集合显示包含该文件的实际窗口。
objExcel.Application.Visible = True
objExcel.Parent.Windows(1).Visible = True
' 在此处对文件进行操作。
' ...
' 如果在启动时,Microsoft Excel 的这份副本不在运行中,则使用 Application 属性的 Quit 方法来关闭它。
' 注意,当试图退出 Microsoft Excel 时,标题栏会闪烁,并显示一条消息询问是否保存所加载的文件。
If blnExcelWasNotRunning = True Then
objExcel.Application.Quit
End IF
Set objExcel = Nothing ' 释放对该应用程序
End Sub
- OpenWorkbook封装方法,可以作为共通Function
Function OpenWorkbook(ByVal strWorkbookFilePath As String)
Dim wb As Workbook
Dim fileName As String
fileName = Dir(strWorkbookFilePath)
On Error Resume Next
Set wb = Workbooks(fileName)
On Error GoTo 0
If wb Is Nothing Then
Set wb = Workbooks.Open(strWorkbookFilePath)
End If
Set OpenWorkbook = wb
End Function
<a name="5.2"></a>
5.3 操作Excel工作表(Worksheet)
5.3.1 移动工作表
移动工作表是指将工作表移到工作簿中的其他位置。
在VBA中,可以使用WorkSheet.Move方法来移动工作表。
语法:表达式.Move(Before, After)
其中,在Move方法中,主要包含两个参数,其功能如下:
Before 在其之前放置移动工作表的工作表。如果指定了After,则不能指定Before。
After 在其之后放置移动工作表的工作表。如果指定了Before,则不能指定After。
例如:移动 "工资表" 至Sheet3工作表之后,可以输入以下代码:
Sub 移动工作表()
Sheets("工资表").Select
Sheets("工资表").Move After:=Sheets(3)
End Sub
另外,如果既不指定Before也不指定After,Microsoft Excel将新建一个工作簿,
其中包含所移动的工作表。例如,输入以下代码,即可新建一个工作簿,
且该工作表中包含有 "工资表" 工作表。
Sub A()
Sheets("工资表").Move
End Sub
5.3.2 复制工作表
复制工作表是指将工作表进行备份,以便于用户对备份文件进行操作时,不会损坏原有文件。
在VBA中,使用Sheets.Copy方法可以将工作表复制到工作簿的另一位置。
语法:
表达式.Copy(Before, After)
其中,在Copy方法中,包含的两个参数与在Move方法中的参数相似,其参数功能如下:
Before 将要在其之前放置所复制工作表的工作表。如果指定了After,则不能指定Before。
After 将要在其之后放置所复制工作表的工作表。如果指定了Before,则不能指定After。
例如:复制 "工资表" 表格至Sheet3工作表之后,可以输入以下代码:
Sub 复制工作表()
Sheets("工资表").Select
Sheets("工资表").Copy After:=Sheets(3)
End Sub
另外,用户还可以在不同的工作簿之间进行复制。
例如:将当前工作簿中的“工资表”工作表复制到打开的Book1工作表中,可以输入以下代码:
Sub 复制工作表至Book1中()
Sheets("工资表").Copy After:=Workbooks("Book1").Sheets(1)
End Sub