简明Excel VBA(九)操作Excel工作簿和工作表(Worksheet)

简明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

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

你可能感兴趣的:(简明Excel VBA(九)操作Excel工作簿和工作表(Worksheet))