簡(jiǎn)明Excel VBA
本文集同步于GitHub倉(cāng)庫(kù):# bluetata/concise-excel-vba
5.2 打開(kāi)Excel兩種方式
- 利用
GetObject方法打開(kāi)Excel文檔
Sub GetWorkbook()
Dim wbWorkFile As Workbook
Set wbWorkFile = GetObject("D:\test.xlsx")
' wbWorkFile.Windows(1).Visible = True ' 這種方法打開(kāi)的文件是隱藏的,如果需要顯示,則設(shè)置Visible值為ture
wbWorkFile.Close False
Set wbWorkFile = Nothing
End Sub
- 利用
Open方法打開(kāi)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
延伸其擴(kuò)展方法:
- GetObject封裝方法,可以作為共通Function
Sub GetWorkbook()
Dim objExcel As Object ' 用于存放Microsoft Excel 引用的變量。
Dim blnExcelWasNotRunning As Boolean ' 用于最后釋放的標(biāo)記。
' 測(cè)試 Microsoft Excel 的副本是否在運(yùn)行。
On Error Resume Next ' 延遲錯(cuò)誤捕獲。
' 不帶第一個(gè)參數(shù)調(diào)用 Getobject 函數(shù)將返回對(duì)該應(yīng)用程序的實(shí)例的引用。如果該應(yīng)用程序不在運(yùn)行,則會(huì)產(chǎn)生錯(cuò)誤。
Set objExcel = Getobject(, "Excel.Application")
If Err.Number <> 0 Then blnExcelWasNotRunning = True
Err.Clear ' 如果發(fā)生錯(cuò)誤則要清除 Err 對(duì)象。
Set objExcel = Getobject("C:\excel.xlsx") ' 將對(duì)象變量設(shè)為對(duì)要看的文件的引用。
' 設(shè)置其 Application 屬性,顯示 Microsoft Excel。然后使用 objExcel 對(duì)象引用的 Windows 集合顯示包含該文件的實(shí)際窗口。
objExcel.Application.Visible = True
objExcel.Parent.Windows(1).Visible = True
' 在此處對(duì)文件進(jìn)行操作。
' ...
' 如果在啟動(dòng)時(shí),Microsoft Excel 的這份副本不在運(yùn)行中,則使用 Application 屬性的 Quit 方法來(lái)關(guān)閉它。
' 注意,當(dāng)試圖退出 Microsoft Excel 時(shí),標(biāo)題欄會(huì)閃爍,并顯示一條消息詢(xún)問(wèn)是否保存所加載的文件。
If blnExcelWasNotRunning = True Then
objExcel.Application.Quit
End IF
Set objExcel = Nothing ' 釋放對(duì)該應(yīng)用程序
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 移動(dòng)工作表
移動(dòng)工作表是指將工作表移到工作簿中的其他位置。
在VBA中,可以使用WorkSheet.Move方法來(lái)移動(dòng)工作表。
語(yǔ)法:表達(dá)式.Move(Before, After)
其中,在Move方法中,主要包含兩個(gè)參數(shù),其功能如下:
Before 在其之前放置移動(dòng)工作表的工作表。如果指定了After,則不能指定Before。
After 在其之后放置移動(dòng)工作表的工作表。如果指定了Before,則不能指定After。
例如:移動(dòng) "工資表" 至Sheet3工作表之后,可以輸入以下代碼:
Sub 移動(dòng)工作表()
Sheets("工資表").Select
Sheets("工資表").Move After:=Sheets(3)
End Sub
另外,如果既不指定Before也不指定After,Microsoft Excel將新建一個(gè)工作簿,
其中包含所移動(dòng)的工作表。例如,輸入以下代碼,即可新建一個(gè)工作簿,
且該工作表中包含有 "工資表" 工作表。
Sub A()
Sheets("工資表").Move
End Sub
5.3.2 復(fù)制工作表
復(fù)制工作表是指將工作表進(jìn)行備份,以便于用戶(hù)對(duì)備份文件進(jìn)行操作時(shí),不會(huì)損壞原有文件。
在VBA中,使用Sheets.Copy方法可以將工作表復(fù)制到工作簿的另一位置。
語(yǔ)法:
表達(dá)式.Copy(Before, After)
其中,在Copy方法中,包含的兩個(gè)參數(shù)與在Move方法中的參數(shù)相似,其參數(shù)功能如下:
Before 將要在其之前放置所復(fù)制工作表的工作表。如果指定了After,則不能指定Before。
After 將要在其之后放置所復(fù)制工作表的工作表。如果指定了Before,則不能指定After。
例如:復(fù)制 "工資表" 表格至Sheet3工作表之后,可以輸入以下代碼:
Sub 復(fù)制工作表()
Sheets("工資表").Select
Sheets("工資表").Copy After:=Sheets(3)
End Sub
另外,用戶(hù)還可以在不同的工作簿之間進(jìn)行復(fù)制。
例如:將當(dāng)前工作簿中的“工資表”工作表復(fù)制到打開(kāi)的Book1工作表中,可以輸入以下代碼:
Sub 復(fù)制工作表至Book1中()
Sheets("工資表").Copy After:=Workbooks("Book1").Sheets(1)
End Sub