VBA +EXCLE 窗口基本操作應(yīng)用示例
Window對(duì)象代表一個(gè)窗口,約有48個(gè)屬性和14個(gè)方法,能對(duì)窗口特性進(jìn)行設(shè)置和操作。Window對(duì)象是Windows集合中的成員,對(duì)于Application對(duì)象來(lái)說(shuō),Windows集合包含該應(yīng)用程序中的所有窗口;對(duì)于Workbook對(duì)象來(lái)說(shuō),Windows集合只包含指定工作簿中的窗口。下面介紹一些示例,以演示和說(shuō)明Window對(duì)象及其屬性和方法的運(yùn)用。
示例01:激活窗口(Activate方法)
Sub SelectWindow()
Dim iWin As Long,i As Long,bWin
MsgBox"依次切換已打開(kāi)的窗口"
iWin=Windows.Count
MsgBox“您已打開(kāi)的窗口數(shù)量為:”&iWin
For i=1 To iWin
Windows(i).Activate
bWin=MsgBox("您激活了第"&i&"個(gè)窗口,還要繼續(xù)嗎?",vbYesNo)
If bWin=vbNo Then Exit Sub
Next i
End Sub
示例02:窗口狀態(tài)(WindowState屬性)
[示例02-01]
Sub WindowStateTest()
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最小化"
Windows(1).WindowState=xlMinimized
MsgBox"當(dāng)前活動(dòng)工作簿窗口將恢復(fù)正常"
Windows(1).WindowState=xlNormal
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最大化"
Windows(1).WindowState=xlMaximized
End Sub
示例說(shuō)明:使用WindowState屬性可以返回或者設(shè)置窗口的狀態(tài)。示例中,常量xlMinimized、xlNormal和xlMaximized分別代表窗口不同狀態(tài)值,Windows(1)表示當(dāng)前活動(dòng)窗口??梢允褂?span lang="EN-US">Windows(index)來(lái)返回單個(gè)的Window對(duì)象,其中的index為窗口的名稱或編號(hào),活動(dòng)窗口總是Windows(1)。
[示例02-02]
Sub testWindow()
'測(cè)試Excel應(yīng)用程序窗口狀態(tài)
MsgBox"應(yīng)用程序窗口將最大化"
Application.WindowState=xlMaximized
Call testWindowState
MsgBox"應(yīng)用程序窗口將恢復(fù)正常"
Application.WindowState=xlNormal
MsgBox"應(yīng)用程序窗口已恢復(fù)正常"
'測(cè)試活動(dòng)工作簿窗口狀態(tài)
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最小化"
ActiveWindow.WindowState=xlMinimized
Call testWindowState
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最大化"
ActiveWindow.WindowState=xlMaximized
Call testWindowState
MsgBox"當(dāng)前活動(dòng)工作簿窗口將恢復(fù)正常"
ActiveWindow.WindowState=xlNormal
Call testWindowState
MsgBox"應(yīng)用程序窗口將最小化"
Application.WindowState=xlMinimized
Call testWindowState
End Sub
‘*********************************************************
Sub testWindowState()
Select Case Application.WindowState
Case xlMaximized:MsgBox"應(yīng)用程序窗口已最大化"
Case xlMinimized:MsgBox"應(yīng)用程序窗口已最小化"
Case xlNormal:
Select Case ActiveWindow.WindowState
Case xlMaximized:MsgBox"當(dāng)前活動(dòng)工作簿窗口已最大化"
Case xlMinimized:MsgBox"當(dāng)前活動(dòng)工作簿窗口已最小化"
Case xlNormal:MsgBox"當(dāng)前活動(dòng)工作簿窗口已恢復(fù)正常"
End Select
End Select
End Sub
示例說(shuō)明:本示例有兩個(gè)程序,其中testWindow()是主程序,調(diào)用子程序textWindowState(),
演示了應(yīng)用程序窗口和工作簿窗口的不同狀態(tài)。當(dāng)前活動(dòng)窗口一般代表當(dāng)前活動(dòng)工作簿窗口,讀者可以在VBE編輯器中按F8鍵逐語(yǔ)句運(yùn)行testWindow()程序,觀察Excel應(yīng)用程序及工作簿窗口的不同狀態(tài)。此外,在子程序中,還運(yùn)用了嵌套的Select Case結(jié)構(gòu)。
[示例02-03]
Sub SheetGradualGrow()
Dim x As Integer
With ActiveWindow
.WindowState=xlNormal
.Top=1
.Left=1
.Height=50
.Width=50
For x=50 To Application.UsableHeight.Height=x
Next x
For x=50 To Application.UsableWidth.Width=x
Next x.WindowState=xlMaximized
End With
End Sub
示例說(shuō)明:本示例將動(dòng)態(tài)演示工作簿窗口由小到大直至最大化的變化過(guò)程。在運(yùn)行程序時(shí)您可以將VBE窗口縮小,從而在工作簿中查看動(dòng)態(tài)效果,也可以在Excel中選擇菜單中的宏命令執(zhí)行以查看效果。
示例03:切換顯示工作表元素
[示例03-01]
Sub testDisplayHeading()
MsgBox“切換顯示/隱藏行列標(biāo)號(hào)”
ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings
End Sub
示例說(shuō)明:本示例切換是否顯示工作表中的行列標(biāo)號(hào)。運(yùn)行后,工作表中的行標(biāo)號(hào)和列標(biāo)號(hào)將消失;再次運(yùn)行后,行列標(biāo)號(hào)重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消行列標(biāo)號(hào)的顯示,如ActiveWindow.DisplayHeadings=False;而將該屬性設(shè)置為True則顯示行列標(biāo)號(hào)。
[示例03-02]
Sub testDisplayGridline()
MsgBox“切換顯示/隱藏網(wǎng)格線”
ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines
End Sub
示例說(shuō)明:本示例切換是否顯示工作表中的網(wǎng)格線。運(yùn)行后,工作表中的網(wǎng)格線消失,再次運(yùn)行后,網(wǎng)格線重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消網(wǎng)格線顯示如ActiveWindow.DisplayGridlines=False;而將該屬性設(shè)置為True,則顯示網(wǎng)格線。
[示例03-03]
Sub DisplayHorizontalScrollBar()
MsgBox“切換顯示/隱藏水平滾動(dòng)條”
ActiveWindow.DisplayHorizontalScrollBar=_
Not ActiveWindow.DisplayHorizontalScrollBar
End Sub
示例說(shuō)明:本示例切換是否顯示工作表中的水平滾動(dòng)條。運(yùn)行后,工作表中的水平滾動(dòng)條消失,再次運(yùn)行后,水平滾動(dòng)條重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消水平滾動(dòng)條,如ActiveWindow.DisplayHorizontalScrollBar=False;而將該屬性設(shè)置為ExcelVBA>>ExcelVBA編程入門(mén)范例>>窗口(Window對(duì)象)基本操作True,則顯示水平滾動(dòng)條。同理,DisplayVerticalScrollBar屬性將用來(lái)設(shè)置垂直滾動(dòng)條。
[示例03-04]
Sub DisplayScrollBar()
MsgBox"切換顯示/隱藏水平和垂直滾動(dòng)條"
Application.DisplayScrollBars=Not(Application.DisplayScrollBars)
End Sub
示例說(shuō)明:本示例切換是否顯示工作表中的水平和垂直滾動(dòng)條。運(yùn)行后,工作表中的水平和屬性設(shè)置為False,以取消水平和垂直滾動(dòng)條顯示,如application.DisplayScrollBars=False而將該屬性設(shè)置為True,則顯示水平和垂直滾動(dòng)條。
示例04:顯示公式(DisplayFormulas屬性)
Sub DisplayFormula()
MsgBox“顯示工作表中包含公式的單元格中的公式”
ActiveWindow.DisplayFormulas=True
End Sub
示例說(shuō)明:本程序運(yùn)行后,工作表中含有公式的單元格將顯示公式而不是數(shù)值。若要顯示數(shù)值,則將該屬性設(shè)置為False,或者,如果工作表中的公式顯示的是結(jié)果數(shù)值,則該屬性為False。
示例05:顯示/隱藏工作表標(biāo)簽(DisplayWorkbookTabs屬性)
Sub testDisplayWorkbookTab()
MsgBox“隱藏工作表標(biāo)簽”
ActiveWindow.DisplayWorkbookTabs=False
End Sub
示例說(shuō)明:本程序運(yùn)行后,工作表標(biāo)簽消失。將該屬性設(shè)置為True,重新顯示工作表標(biāo)簽
示例06:命名活動(dòng)窗口(Caption屬性)
Sub testCaption()
MsgBox"當(dāng)前活動(dòng)工作簿窗口的名字是:"&ActiveWindow.Caption
ActiveWorkbook.Windows(1).Caption="我的工作簿"
MsgBox"當(dāng)前活動(dòng)工作簿窗口的名字是:"&ActiveWindow.Caption
End Sub
示例說(shuō)明:本程序運(yùn)行后,顯示當(dāng)前活動(dòng)工作簿窗口原先的名稱(即工作簿窗口未處于最大化狀態(tài)時(shí),出現(xiàn)在窗口頂部標(biāo)題欄中的文字),然后設(shè)置當(dāng)前活動(dòng)工作簿窗口名稱,即使用語(yǔ)句ActiveWorkbook.Windows(1).Caption="我的工作簿",最后顯示當(dāng)前活動(dòng)工作簿窗口的新名稱。改變窗口的標(biāo)題并不會(huì)改變工作簿的名稱。
示例07:移動(dòng)窗口到指定位置(ScrollRow屬性和ScrollColumn屬性)
Sub testScroll()
MsgBox“將當(dāng)前窗口工作表左上角單元格移至第10行第3列”
ActiveWindow.ScrollRow=10
ActiveWindow.ScrollColumn=3
End Sub
示例說(shuō)明:本程序運(yùn)行后,當(dāng)前活動(dòng)窗口左上角單元格為第10行第3列??梢酝ㄟ^(guò)設(shè)置這兩個(gè)屬性來(lái)移動(dòng)窗口到指定的位置,也可以返回指定窗格或窗口最左上面的行號(hào)或列號(hào)。
示例08:調(diào)整窗口(EnableResize屬性)
Sub testResize()
MsgBox“設(shè)置窗口大小不可調(diào)整”
ActiveWindow.EnableResize=False
End Sub
示例說(shuō)明:測(cè)試本程序前,將當(dāng)前工作簿窗口恢復(fù)為正常狀態(tài)(即讓工作簿標(biāo)題可見(jiàn)),運(yùn)行程序后,當(dāng)前工作簿窗口將不能調(diào)整其大小,右上角的最小化最大化按鈕將消失(即隱藏最大化和最小化按鈕)。該屬性設(shè)置為True,則能調(diào)整窗口大小。
示例09:拆分窗格
[示例09-01]
Sub SplitWindow1()
Dim iRow As Long,iColumn As Long
MsgBox"以活動(dòng)單元格為基準(zhǔn)拆分窗格"
iRow=ActiveCell.Row
iColumn=ActiveCell.Column
With ActiveWindow
.SplitColumn=iColumn
.SplitRow=iRow
End With
MsgBox"恢復(fù)原來(lái)的窗口狀態(tài)"
ActiveWindow.Split=False
End Sub
[示例09-02]
Sub SplitWindow()
Dim iRow As Long,iColumn As Long
MsgBox"以活動(dòng)單元格為基準(zhǔn)拆分窗格"
iRow=ActiveCell.Row
iColumn=ActiveCell.Column
With ActiveWindow
.SplitColumn=iColumn
.SplitRow=iRow
End With
MsgBox"恢復(fù)原來(lái)的窗口狀態(tài)"
ActiveWindow.SplitColumn=0
ActiveWindow.SplitRow=0
End Sub
示例說(shuō)明:本示例演示了以活動(dòng)單元格為基準(zhǔn)拆分窗格。如果指定窗口被拆分,則Split屬性的值為True;設(shè)置該屬性的值為False則取消窗格拆分。也可以設(shè)置SplitColumn屬性和SplitRow屬性的值來(lái)取消窗格拆分。
示例10:凍結(jié)窗格(FreezePanes屬性)
Sub testFreezePane()
MsgBox“凍結(jié)窗格”
ActiveWindow.FreezePanes=True
End Sub
示例說(shuō)明:運(yùn)行本程序后,將會(huì)凍結(jié)活動(dòng)單元格所在位置上方和左側(cè)的單元格區(qū)域。將該屬性的值設(shè)置為False,將取消凍結(jié)窗格。
示例11:設(shè)置網(wǎng)格線顏色(GridlineColor屬性和GridlineColorIndex屬性)
Sub setGridlineColor()
Dim iColor As Long
iColor=ActiveWindow.GridlineColor
MsgBox"將活動(dòng)窗口的網(wǎng)格線顏色設(shè)為紅色"
ActiveWindow.GridlineColor=RGB(255,0,0)
MsgBox"將活動(dòng)窗口的網(wǎng)格線顏色設(shè)為藍(lán)色"
ActiveWindow.GridlineColorIndex=5
MsgBox“恢復(fù)為原來(lái)的網(wǎng)格線顏色”
ActiveWindow.GridlineColorIndex=iColor
End Sub
示例說(shuō)明:運(yùn)行程序后,當(dāng)前工作表窗口網(wǎng)格線將被設(shè)置為紅色。其中,GridlineColorIndex屬性可以用于返回或設(shè)置網(wǎng)格線的顏色。
[小結(jié)]ActiveWindow屬性返回當(dāng)前激活的工作簿窗口,可以用來(lái)設(shè)置工作表中的元素,也可以顯示特定的單元格,或者用來(lái)調(diào)整窗口的顯示比例,以及設(shè)置窗口。
示例12:設(shè)置工作表標(biāo)簽區(qū)域?qū)挾群退綕L動(dòng)條寬度比例(TabRatio屬性)
Sub test()
MsgBox"設(shè)置工作表標(biāo)簽區(qū)域?qū)挾葹樗綕L動(dòng)條寬度的一半"
ActiveWindow.TabRatio=0.5
End Sub
示例說(shuō)明:TabRatio屬性返回或設(shè)置工作簿中工作表標(biāo)簽區(qū)域的寬度與窗口水平滾動(dòng)條的寬度比例(可為0到1之間的數(shù)字;默認(rèn)值為0.6)。您可以改變上面程序中的數(shù)值進(jìn)行測(cè)試。
示例13:設(shè)置激活窗口時(shí)運(yùn)行的程序(OnWindow屬性)
Sub testRunProcedure()
ThisWorkbook.Windows(1).OnWindow="test"
End Sub
‘*********************************************************
Sub test()
MsgBox"您可以使用本窗口了!"
End Sub
示例說(shuō)明:本示例包括兩個(gè)程序,主程序?yàn)?span lang="EN-US">testRunProcedure(),運(yùn)行后,每當(dāng)激活該窗口時(shí),將會(huì)運(yùn)行test()程序。其中,OnWindow屬性返回或設(shè)置每當(dāng)激活一個(gè)窗口時(shí)要運(yùn)行的過(guò)程的名稱,如本例中的test()程序。
示例14:獲取指定窗口單元格區(qū)域地址(RangeSelection屬性)
Sub testRangeSelection()
MsgBox"顯示所選單元格地址"
MsgBox ActiveWindow.RangeSelection.Address
End Sub
示例說(shuō)明:本示例返回當(dāng)前窗口中所選單元格區(qū)域的地址。RangeSelection屬性返回指定窗口的工作表中的選定單元格(即使指定工作表中有圖形對(duì)象處于活動(dòng)狀態(tài),或者已選定圖形對(duì)象,仍返回在圖形對(duì)象被選定之前選定的單元格區(qū)域,這是該屬性與Selection屬性的區(qū)別)。
示例15:返回指定窗口中所選擇的工作表(SelectedSheets屬性)
Sub testSelectedSheet()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Windows(1).SelectedSheets
MsgBox"工作表"&sh.Name&"被選擇"
Next
End Sub
示例說(shuō)明:SelectedSheets屬性返回代表指定窗口中的所有選定工作表的集合。本示例中,如果您同時(shí)選擇了活動(dòng)工作簿中的工作表Sheet1和Sheet2,那么運(yùn)行程序后,將會(huì)顯示相應(yīng)工作表被選擇的信息。
示例16:排列窗口(Arrange方法)
Sub testArrangeWindows()
MsgBox"請(qǐng)確保應(yīng)用程序至少含有兩個(gè)工作簿,這樣才能看出效果"
MsgBox“窗口將平鋪顯示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled
MsgBox“窗口將層疊顯示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleCascade
MsgBox“窗口將水平排列顯示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleHorizontal
MsgBox“窗口將垂直并排排列顯示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical
End Sub
示例說(shuō)明:運(yùn)行本程序后,將平鋪應(yīng)用程序中的所有窗口。Arrange方法用于對(duì)屏幕上的窗口進(jìn)行排列,其語(yǔ)法為expression.Arrange(ArrangeStyle,ActiveWorkbook,SyncHorizontal,SyncVertical),所有的參數(shù)均為可選參數(shù)。其中,參數(shù)ArrangeStyle代表排列樣式,可為以下常量:常量xlArrangeStyleTiled為缺省值,表示將平鋪窗口;常量xlArrangeStyleCascade表示將窗口進(jìn)行層疊;常量xlArrangeStyleHorizontal表示將水平排列所有窗口;常量xlArrangeStyleVertical表示將垂直并排排列所有窗口。您可以在上面的程序中測(cè)試這些常量,以體驗(yàn)效果。將參數(shù)ActiveWorkbook設(shè)置為True,則只對(duì)當(dāng)前工作簿的可見(jiàn)窗口進(jìn)行排列。如果為False,則對(duì)所有窗口進(jìn)行排列。默認(rèn)值為False。設(shè)置參數(shù)SyncHorizontal為True,在水平滾動(dòng)時(shí)同步滾動(dòng)當(dāng)前工作簿的所有窗口;如果為False,則不同步滾動(dòng)。設(shè)置參數(shù)SyncVertical為True,則在垂直滾動(dòng)時(shí)同步滾動(dòng)當(dāng)前工作簿的所有窗口;如果為False,則不同步滾動(dòng),默認(rèn)值為False。如果參數(shù)ActiveWorkbook為False或者省略,則參數(shù)SyncHorizontal和SyncVertical被忽略。
示例17:窗口尺寸(UsableHeight、UsableWidth、Height、Width屬性)
Sub testActiveWindowSize()
MsgBox"當(dāng)前窗口可用區(qū)域的高度為:"&ActiveWindow.UsableHeight
MsgBox"當(dāng)前窗口的高度為:"&ActiveWindow.Height
MsgBox"當(dāng)前窗口可用區(qū)域的寬度為:"&ActiveWindow.UsableWidth
MsgBox"當(dāng)前窗口的寬度為:"&ActiveWindow.Width
End Sub
示例18:水平排列兩個(gè)窗口
Sub testWindowArrange()
Dim ah As Long,aw As Long
Windows.Arrange xlArrangeStyleTiled
ah=Windows(1).Height
aw=Windows(1).Width+Windows(2).Width
With Windows(1)
.Width=aw
.Height=ah/2
.Left=0
End With
With Windows(2)
.Width=aw
.Height=ah/2
.Top=ah/2
.Left=0
End With
End Sub
示例說(shuō)明:在運(yùn)行本示例前,保證只打開(kāi)了兩個(gè)工作簿窗口。運(yùn)行本示例后,將水平排列第一個(gè)窗口和第二個(gè)窗口,即每個(gè)窗口占用可使用的垂直空間的一半,占用所有水平空間。其中,Top屬性表示從窗口頂端到可用區(qū)域頂端的距離,無(wú)法對(duì)最大化的窗口設(shè)置本屬性;Left屬性表示使用區(qū)域的左邊界至窗口左邊界的距離,如果窗口已最大化,則會(huì)返回一個(gè)負(fù)數(shù);如果該屬性被設(shè)置為0,則窗口的主邊框剛好在屏幕上可見(jiàn)。
示例19:改變窗口的高度和寬度
Sub ChangeHeightAndWidth()
Dim iWinHeight As Long,iWinWidth As Long
ActiveWindow.WindowState=xlNormal
MsgBox"將當(dāng)前窗口的高度和寬度各減一半"
iWinHeight=ActiveWindow.Height
iWinWidth=ActiveWindow.Width
ActiveWindow.Height=iWinHeight/2
ActiveWindow.Width=iWinWidth/2
MsgBox"恢復(fù)原窗口大小"
ActiveWindow.Height=iWinHeight
ActiveWindow.Width=iWinWidth
End Sub
示例說(shuō)明:Height屬性和Width屬性必須在窗口處于正常顯示狀態(tài)(即不是最大化或最小化狀態(tài))時(shí)使用,否則會(huì)出錯(cuò)。
示例20:移動(dòng)窗口
Sub SetWindowPosition()
Dim iTop As Long,iLeft As Long
MsgBox"將當(dāng)前窗口向下移60,向右移90"
ActiveWindow.WindowState=xlNormal
iTop=ActiveWindow.Top
iLeft=ActiveWindow.Left
ActiveWindow.Top=iTop+60
ActiveWindow.Left=iLeft+90
MsgBox"恢復(fù)原來(lái)窗口的位置"
ActiveWindow.Top=iTop
ActiveWindow.Left=iLeft
End Sub
示例說(shuō)明:Top屬性和Left屬性必須在窗口處于正常顯示狀態(tài)(即不是最大化或最小化狀態(tài))時(shí)使用,否則會(huì)出錯(cuò)。
示例 21:并排比較窗口
Sub testCompare()
MsgBox"與工作簿Book2進(jìn)行并排比較"
Windows.CompareSideBySideWith"Book2"
MsgBox"啟動(dòng)窗口滾動(dòng)功能,使兩個(gè)窗口同時(shí)滾動(dòng)"
Windows.SyncScrollingSideBySide=True
MsgBox"將工作簿Book2最小化"
Windows("Book2").WindowState=xlMinimized
MsgBox"重置并排比較顯示,恢復(fù)并排比較"
Windows.ResetPositionsSideBySide
MsgBox"關(guān)閉并排比較"
ActiveWorkbook.Windows.BreakSideBySide
End Sub
示例說(shuō)明:在運(yùn)行本示例前,確保在本窗口外還打開(kāi)了一個(gè)名為Book2的窗口,或者您打開(kāi)了一個(gè)其它命名的窗口,相應(yīng)將上面程序中的Book2更換為您的窗口名。CompareSideBySideWith方法將以并排模式打開(kāi)兩個(gè)窗口,其中一個(gè)是當(dāng)前活動(dòng)窗口,另一個(gè)就是該方法所指定的窗口,如本例中的Book2。SyncScrollingSideBySide屬性設(shè)置是否將兩個(gè)窗口的滾動(dòng)保持同步,如果為True,在對(duì)文檔進(jìn)行并排比較的同時(shí)啟用窗口內(nèi)容的滾動(dòng)功能。若為False,則在對(duì)文檔進(jìn)行并排比較的同時(shí)禁用窗口內(nèi)容的滾動(dòng)功能。ResetPositionsSideBySide方法重置正在進(jìn)行并排比較的兩個(gè)工作表窗口的位置,例如,如果用戶將正在進(jìn)行比較的兩個(gè)工作表窗口中的其中一個(gè)窗框最小化或最大化,就可以使用ResetPositionsSideBySide方法重置顯示,以便這兩個(gè)窗口再次并排顯示。BreakSideBySide方法用來(lái)關(guān)閉并排比較。
示例22:返回或設(shè)置窗口中顯示的視圖(View屬性)
Sub testView()
MsgBox"將視圖切換為分頁(yè)預(yù)覽"
ActiveWindow.View=xlPageBreakPreview
MsgBox"窗口視圖為:"&ActiveWindow.View
MsgBox"將視圖恢復(fù)正常"
ActiveWindow.View=xlNormalView
MsgBox"窗口視圖為:"&ActiveWindow.View
End Sub
示例23:返回窗口中可見(jiàn)單元格區(qū)域(VisibleRange屬性)
Sub testVisibleRange()
MsgBox"當(dāng)前窗口中共有"&Windows(1).VisibleRange.Cells.Count&"個(gè)單元格可見(jiàn)"
End Sub
示例說(shuō)明:如果窗口中有部分行列的單元格可見(jiàn),也包括在可見(jiàn)單元格區(qū)域中。
示例24:創(chuàng)建窗口(NewWindow方法)
Sub testNewWindow()
MsgBox"為活動(dòng)窗口創(chuàng)建一個(gè)副本"
ActiveWindow.NewWindow
MsgBox"所創(chuàng)建窗口的窗口號(hào)為"&ActiveWindow.WindowNumber
End Sub
示例說(shuō)明:本示例中,NewWindow方法為指定窗口(本例中為當(dāng)前活動(dòng)窗口)創(chuàng)建一個(gè)副本,然后顯示該副本窗口的窗口號(hào)。注意,窗口號(hào)與窗口索引(Index屬性)的不同,例如名稱為“Book1.xls:2”的窗口,其窗口號(hào)為2,而窗口索引為該窗口在Windows集合中的位置,可以為窗口名稱或編號(hào)。
示例25:設(shè)置窗口大小(Zoom屬性)
Sub testWindowDisplaySize()
MsgBox"將窗口大小設(shè)置為與選定區(qū)域相適應(yīng)的大小"
ActiveWindow.Zoom=True
MsgBox"以雙倍大小顯示窗口"
ActiveWindow.Zoom=200
MsgBox"以正常大小顯示窗口"
ActiveWindow.Zoom=100
End Sub
示例說(shuō)明:Zoom屬性將以百分?jǐn)?shù)的形式(100表示正常大小,200表示雙倍大小,以此類推)返回或設(shè)置窗口的顯示大小。如果本屬性為True,則可將窗口大小設(shè)置成與當(dāng)前選定區(qū)域相適應(yīng)的大小。本功能僅對(duì)窗口中當(dāng)前的活動(dòng)工作表起作用,若要對(duì)其他工作表使用本屬性,必須先激活該工作表。
示例 26:激活窗口(ActivateNext方法和ActivatePrevious方法)
[示例26-01]
Sub testActivateWindow1()
MsgBox"若已打開(kāi)Book1.xls、Book2.xls和Book3.xls三個(gè)工作簿且Book1.xls為當(dāng)前窗口"&Chr(10)&"則按Book3.xls-Book2.xls-Book1.xls依次激活窗口"
ActiveWindow.ActivateNext
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivateNext
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivateNext
MsgBox"激活工作簿:"&Windows(1).Caption
End Sub
[示例 26-02]
Sub testActivateWindow2()
MsgBox"若已打開(kāi)Book1.xls、Book2.xls和Book3.xls三個(gè)工作簿且Book1.xls為當(dāng)前
窗口"&Chr(10)&"則按Book2.xls-Book3.xls-Book1.xls依次激活窗口"
ActiveWindow.ActivatePrevious
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivatePrevious
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivatePrevious
MsgBox"激活工作簿:"&Windows(1).Caption
End Sub
示例27:滾動(dòng)窗口(LargeScroll方法和SmallScroll方法)
[示例27-01]
Sub testScroll1()
MsgBox"將當(dāng)前窗口向下滾動(dòng)3頁(yè)并向右滾動(dòng)1頁(yè)"
ActiveWindow.LargeScroll Down:=3,ToRight:=1
End Sub
示例說(shuō)明:LargeScroll方法將按頁(yè)滾動(dòng)窗口的內(nèi)容,其語(yǔ)法為expression.LargeScroll(Down,Up,ToRight,ToLeft),帶有4個(gè)可選的參數(shù),其中參數(shù)Down表示將窗口內(nèi)容向下滾動(dòng)的頁(yè)數(shù);參數(shù)Up表示將窗口內(nèi)容向上滾動(dòng)的頁(yè)數(shù);參數(shù)ToRight表示將窗口內(nèi)容向右滾動(dòng)的頁(yè)數(shù);參數(shù)ToLeft表示將窗口內(nèi)容向左滾動(dòng)的頁(yè)數(shù)。如果同時(shí)指定了Down和Up,窗口內(nèi)容上下方向滾動(dòng)的頁(yè)數(shù)由這兩個(gè)參數(shù)的差決定,例如,如果Down為3,Up為6,則窗口向上滾動(dòng)三頁(yè)。如果同時(shí)指定了ToLeft和ToRight,窗口內(nèi)容左右方向滾動(dòng)的頁(yè)數(shù)由這兩個(gè)參數(shù)的差決定,例如,如果ToLeft為3,ToRight為6,則窗口向右滾動(dòng)三頁(yè)。所有這四個(gè)參數(shù)都可以使用負(fù)數(shù)。
[示例27-02]
Sub testScroll2()
MsgBox"將當(dāng)前活動(dòng)窗口向下滾動(dòng)3行"
ActiveWindow.SmallScroll down:=3
End Sub
示例說(shuō)明:SmallScroll方法按行或列滾動(dòng)窗口,其語(yǔ)法為expression.SmallScroll(Down,Up,ToRight,ToLeft),帶有4個(gè)可選的參數(shù),其中參數(shù)Down表示將窗口內(nèi)容向下滾動(dòng)的行數(shù);參數(shù)Up表示將窗口內(nèi)容向上滾動(dòng)的列數(shù);參數(shù)ToRight表示將窗口內(nèi)容向右滾動(dòng)的列數(shù);參數(shù)ToLeft表示將窗口內(nèi)容向左滾動(dòng)的列數(shù)。如果同時(shí)指定了Down和Up,則窗口內(nèi)容滾動(dòng)的行數(shù)由這兩個(gè)參數(shù)的差值決定,例如,如果Down為3,Up為6,則窗口內(nèi)容向上滾動(dòng)三行。如果同時(shí)指定了ToLeft和ToRight,則窗口內(nèi)容滾動(dòng)的列數(shù)由這兩個(gè)參數(shù)的差值決定,例如,如果ToLeft為3,ToRight為6,則窗口內(nèi)容向右滾動(dòng)三列。以上四個(gè)參數(shù)均可取負(fù)值。
示例 28:測(cè)試所選單元格寬度和高度
Sub testWidthOrHeight()
Dim lWinWidth As Long,lWinHeight As Long
With ActiveWindow
lWinWidth=.PointsToScreenPixelsX(.Selection.Width)
lWinHeight=.PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox"當(dāng)前選定單元格寬度為:"&lWinWidth&Chr(10)&_
"當(dāng)前選定單元格高度為:"&lWinHeight
End Sub
示例29:關(guān)閉窗口(Close方法)
Sub CloseWindow()
MsgBox"關(guān)閉當(dāng)前窗口"
ActiveWindow.Close
End Sub
示例說(shuō)明:本示例運(yùn)行后,將關(guān)閉當(dāng)前窗口。如果當(dāng)前窗口未保存,則會(huì)彈出詢問(wèn)是否保存的消息框供選擇。
示例30、顯示窗體
顯示窗體就是把窗體顯示給用戶。
顯示窗體可以調(diào)用窗體的Show方法。
窗體的顯示模式有兩種:
(1)模式窗體:窗體顯示后將停顯示之后的代碼直到退出或隱藏此窗體,并且必須退出或隱藏此窗體后,才可以操作非此窗體的其他界面元素。
也就是說(shuō),當(dāng)你使用模式窗體顯示某窗體的時(shí)候,當(dāng)程序執(zhí)行完“顯示窗體”這條命令后,將暫停執(zhí)行程序里剩余的語(yǔ)句,真正這個(gè)窗體被隱藏或退出。關(guān)且當(dāng)窗體顯示出來(lái)以后,你不能激活該窗體以外的任何區(qū)域。
(2)無(wú)模式窗體:窗體顯示后會(huì)繼續(xù)執(zhí)行程序里余下的語(yǔ)句,而其他的窗體或界面也可以進(jìn)行操作。
顯示窗體的語(yǔ)句:
?。?span lang="EN-US">1)模式窗體的顯示代碼:
窗體名稱.Show vbModal
也可以寫(xiě)成:窗體名稱.Show 1
?。?span lang="EN-US">2)無(wú)模式窗體的顯示代碼:
窗體名稱.Show vbModeless
也可以寫(xiě)成:窗體名稱.Show 0
悄悄告訴你:因?yàn)閷?duì)于Show方法,如果不指定模式,則默認(rèn)為模式窗體,又因?yàn)槲液軕?,所以我的?xí)慣是:當(dāng)我需要用模式窗體的時(shí)候,就直接“窗體.Show”,需要無(wú)模式的時(shí)候就“窗體.Show 0”,多個(gè)0少個(gè)0而已,懶得去記那有模式無(wú)模式的字母,我英文差,反正看了也不一定認(rèn)識(shí)。
示例31關(guān)閉窗體
當(dāng)不再需要使用某個(gè)窗體后,我們需要把它關(guān)閉。當(dāng)然,每一個(gè)窗體上都有“關(guān)閉”按鈕。但這肯定不能滿足我們?cè)诔绦虻脑O(shè)計(jì)過(guò)程中的需求。
我們可以通過(guò)Hide來(lái)隱藏窗體。代碼為:
窗體名稱.Hide
也可以通過(guò)Unload來(lái)卸載窗體。代碼為:
Unload 窗體名稱
聯(lián)系客服