- Excel VBA范例大全
- 羅剛君編著
- 4454字
- 2018-12-29 15:15:31
第13章 其他應用
本章講解一些與單元格或者區域數據運算無關的程序,但在工作中卻有一定的實用性。
● 實例95發郵件及開啟網址
● 實例96放大單元格數據
● 實例97產生不重復隨機數
● 實例98將含有分隔符之數據轉為下拉列表
● 實例99生成帶圈之編號
● 實例100單元格動態顯示時間
● 實例101根據指定最大值和最小值求所有數據之和
● 實例102根據勾股求弦長
● 實例103輸入三邊長求三角形面積
● 實例104指定時間出現“會議時間到”的提示
實例95 發郵件及開啟網址
【技巧說明】 發郵件及開啟網址。
【案例介紹】 在編寫一個程序給用戶使用時,為了體現作者與用戶的互動,一般需要設定一個信息反饋的渠道。因此,讓用戶遇到問題時可以通過Excel程序訪問指定網頁或者向指定地址發送郵件就顯得有必要了。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub發郵件及開啟網址() If MsgBox("現在發送郵件!"&Chr(10)&"選是發送,選否退出!",vbYesNo+64, "郵件")=vbYes Then ActiveWorkbook.FollowHyperlink "maiLTo:andy_qc@163.com" End If If MsgBox("現在登錄163網頁!" & Chr(10) & "選是登錄,選否退出!", vbYesNo ActiveWorkbook.FollowHyperlink "http://news.163.com" End If End Sub
+64, "網頁")=vbYes Then
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,程序將先后彈出兩個對話框,選“是”則發送郵件并開啟網頁,如圖2.117所示。

圖2.117 發送郵件及登錄網址對話框
提示
本實例參見光盤樣本:..\第2部分\實例95.xlsm。
【相關知識說明】
FollowHyperlink:如果已經下載指定文檔,則顯示緩沖區中的該文檔。否則,本方法對指定超鏈接進行處理以下載目標文檔,然后將該文檔在適當的應用程序中顯示出來。
用FollowHyperlink方法鏈接網址時只需要FollowHyperlink后跟引號引上的網址即可;而用FollowHyperlink方法啟動郵件,則需要在郵件地址前加“mailto:”才行。
實例96 放大單元格數據
【技巧說明】 將單元格數據放大指定倍數顯示。
【案例介紹】 選擇工作表中任意單元格或者區域,將選區中的數據放大3倍顯示。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 使用快捷鍵Ctrl+R,顯示工程資源管理器。
[3] 雙擊左邊列表中的“Sheet1”,打開工作表代碼窗口。
[4] 在右邊代碼窗口輸入以下代碼:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents=False '禁用事件 On Error Resume Next '出錯時繼續執行 ActiveSheet.DrawingObjects.Delete '刪除產生的對象 Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture '將選項復制為圖片 Target.Cells(1, 1).Offset(0, 2).Select '將光標移到后兩列 ActiveSheet.Pictures.Paste.Select With Selection.ShapeRange .ScaleWidth 2, msoFalse, msoScaleFromTopLeft '將圖片增大三倍,可以自己調整 .ScaleHeight 2, msoFalse, msoScaleFromTopLeft .Fill.ForeColor.SchemeColor=3 '設置前景填充色 End With Target.Activate '激活單元格 Application.EnableEvents=True '恢復事件 End Sub
[5] 關閉VBE窗口返回到工作表。
[6] 在“Sheet1”工作表中選擇空白單元格,程序將忽略;選擇非空單元格后則放大3倍顯示,如圖2.118所示。

圖2.118 放大單元格數據
提示
本實例參見光盤樣本:..\第2部分\實例96.xlsm。
【相關知識說明】
(1)DrawingObjects:工作表中的圖形對象。
(2)WorksheetFunction.CountA:計算非空單元格及參數列表中值的個數。
(3)Selection.CopyPicture:將所選對象作為圖片復制到剪貼板。
實例97 產生不重復隨機數
【技巧說明】 產生不重復隨機數。
【案例介紹】 制作抽獎號碼等時需要隨機數,且所有數據不能重復,本例將產生1~10000之間的不重復隨機數據。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub不重復隨機數() Dim arr1&(1 To 10000, 1 To 1), arr2(1 To 10000) As Boolean, k&, m& [a:a].Clear Randomize m=0 Do While m < 10000 k=Int(10000 * Rnd)+1 If Not arr2(k) Then m=m+1 arr1(m, 1)=k arr2(k)=True End If Loop [a:a]=arr1 [a:a].NumberFormatLocal="0000" End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,A列將產生不重復隨機數據。可以利用以下數組公式來驗證:
=SUM(1/COUNTIF(A1:A10000,A1:A10000))
此公式計算A1∶A10000的不重復數據個數,如果結果等于10000,則表示結果正確。
提示
本實例參見光盤樣本:..\第2部分\實例97.xlsm。
【相關知識說明】
Randomize:初始化隨機數生成器。
實例98 將含有分隔符之數據轉為下拉列表
【技巧說明】 將含有分隔符之數據轉為下拉列表。
【案例介紹】 單元格中同類型數據用“/”符號分隔,現需轉換格式為下拉列表,以分隔符為基準,每一單元產生一個下拉項目。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub將有分隔樣式之數據轉為下拉列表() For i=3 To [b1048576].End(xlUp).Row x=Replace(Cells(i, 2), "/", ",") '將分隔符/替換為逗號 Cells(i, 3).Clear '清除第三列所有數據信息 With Cells(i, 3).Validation '為第三列添加數據有效性下拉列表 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=_ xlBetween, Formula1:=x End With Next i End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,C列將產生下拉列表,如圖2.119。

圖2.119 轉換后的下拉列表
提示
本實例參見光盤樣本:..\第2部分\實例98.xlsm。
【相關知識說明】
Validation:代表工作表區域的數據有效性規則。將其Type參數設為xlValidateList可以產生下拉列表。
實例99 生成帶圈之編號
【技巧說明】 生成帶圈之編號。
【案例介紹】 Excel自帶1~10的帶圈字符,若需要超過10的帶圈字符時只好手工操作,在橢圓形中添加數字。本例將使用代碼批量產生帶圈數字編號。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub帶圈編號() Dim row1 As Integer, row2 As Integer, fontsize As Byte, ZT As String On Error GoTo err If Selection.Cells.Count=1 Then row1=InputBox("請輸入填充起始號", "序號", 1) row2=InputBox("請輸入填充終止號", "序號", 10) fontsize=InputBox("請輸入序號之字體大小", "字號", 10) ZT=InputBox("請輸入序號之字體" & Chr(10) & "若單元格較小,請用宋體!", "字體", "Impact") Application.ScreenUpdating=False For i=row1 To row2 ActiveSheet.Shapes.AddShape(msoShapeOval, Selection.Left, Selection.Top, Selection.Width, Selection.Height).Select Selection.Characters.Text=i With Selection.Characters(Start:=1, Length:=Len(i)).Font .Name=ZT .Size=fontsize End With With Selection .ShapeRange.Fill.Visible=False .Font.ColorIndex=1 .ShapeRange.Line.ForeColor.SchemeColor=8 .ShapeRange.Line.Visible=msoTrue .HorizontalAlignment=xlCenter .VerticalAlignment=xlCenter .Orientation=xlHorizontal End With ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate Next Else MsgBox "請選擇單個單元格再啟用本程式", vbDefaultButton1+64, "提示" End If Application.ScreenUpdating=True Exit Sub err: MsgBox "請選擇單個單元格再啟用本程式", vbDefaultButton1+64, "提示" End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 將光標定位于需要產生編號的第一個單元格,利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,將分別彈出輸入起始號、終止號、字體大小及選擇字體之對話框,如圖2.120至圖2.123所示。逐個輸入后,目標列將產生帶圈編號,如圖2.124所示。

圖2.120 輸入起始號

圖2.121 輸入終止號

圖2.122 輸入字體大小

圖2.123 輸入字體

圖2.124 代碼生成的帶圈編號
提示
本實例參見光盤樣本:..\第2部分\實例99.xlsm。
【相關知識說明】
(1)Shapes.AddShape:返回一個Shape對象,該對象表示工作表中的新自選形狀,一般用它來生成新的自選圖形。
(2)Characters:代表包含文本的對象中的字符。本例中表示橢圓中的數字。
(3)Selection.Orientation=xlHorizontal:表示水平方向放置。
實例100 單元格動態顯示時間
【技巧說明】 在單元格中動態顯示時間。
【案例介紹】 在一個單元格中顯示時間,且與系統時間同步。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub與系統時間同步() [a1]=WorksheetFunction.Text(Now(), "yyyy-mm-dd h:mm:ss") Application.OnTime Now+TimeValue("00:00:01"), "與系統時間同步" End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,單元格A1中立即產生動態的時間,且與任務欄時間同步,如圖2.125所示。

圖2.125 單元格中動態顯示時間
提示
本實例參見光盤樣本:..\第2部分\實例100.xlsm。
【相關知識說明】
(1)Now():表示計算機控制面板中設定的當前時間。
(2)Application.OnTime:安排一個過程在將來的特定時間運行(既可以是具體指定的某個時間,也可以是指定的一段時間之后)。語法為:表達式.OnTime(EarliestTime, Procedure, LatestTime, Schedule)。OnTime的各個參數含義見表2.7。
表2.7 OnTime參數表

(3)從表2.7中可以看到,若要停止本例程序的繼續執行,則將OnTime的Schedule參數設為False。參見以下代碼:
Sub停止() Application.OnTime Now+TimeValue("00:00:01"),"與系統時間同步",,False End Sub
實例101 根據指定最大值和最小值求所有數據之和
【技巧說明】 根據指定最大值和最小值求所有整數之和。
【案例介紹】 輸入一個最大值和一個最小值,返回從最小值到最大值之間的整數序列之和。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub求范圍之和() Dim iMin As Long, iMax As Long, i As Long, temp As Long iMin=Application.InputBox("請輸入最小值", "起始值", "0", Type:=1) iMax=Application.InputBox("請輸入最大值", "終止值", "100", Type:=1) For i=iMin To iMax temp=temp+i Next MsgBox temp End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,程序將提示輸入最小值和最大值,如圖2.126所示。
[6] 輸入起止值后,將返回兩個數據之間整數之和,如圖2.127所示。

圖2.126 輸入最小值和最大值

圖2.127 最后結果
提示
本實例參見光盤樣本:..\第2部分\實例101.xlsm。
實例102 根據勾股定理求弦長
【技巧說明】 根據勾長和股長返回弦長。
【案例介紹】 勾股定理又叫做畢氏定理:在一個直角三角形中,斜邊邊長的平方等于兩條直角邊邊長平方之和。本例輸入勾和股計算弦長。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub利用勾股定理求弦長() Dim勾As Integer, 股As Integer 勾=Application.InputBox("勾", "數據", 3, 10, 10, , , 1) 股=Application.InputBox("股", "數據", 4, 10, 10, , , 1) If勾 <=0 Or股 <=0 Then MsgBox "勾和股必須大于0!": Exit Sub MsgBox "弦為:" & WorksheetFunction.Power(勾 ^ 2+股 ^ 2, 0.5) End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,程序將提示輸入勾長和股長,如圖2.128所示。
[6] 輸入勾股后,將返回弦長,如圖2.129所示。

圖2.128 輸入勾長和股長

圖2.129 最后結果弦長
提示
本實例參見光盤樣本:..\第2部分\實例102.xlsm。
【相關知識說明】
(1)WorksheetFunction.Power:返回某數的乘冪結果。
(2)^:表示N次方。A^2即表示A的2次方,B^10即為B的10次方。
實例103 輸入三邊長求三角形面積
【技巧說明】 輸入三邊長求三角形面積。
【案例介紹】 數學中經常遇到根據三邊長求三角形面積的問題,利用公式手工計算較復雜,本例可以輸入三邊后瞬間計算面積。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub輸入三邊長求三角形面積() Dim A, B, C, temp A=Application.InputBox("請輸入邊一長度:", "數據", 3, 10, 10, , , 1) B=Application.InputBox("請輸入邊二長度:", "數據", 4, 10, 10, , , 1) C=Application.InputBox("請輸入邊三長度:", "數據", 5, 10, 10, , , 1) temp=(A+B+C) / 2 If A <=0 Or B <=0 Or C <=0 Then MsgBox "所有邊長都必須大于0": Exit Sub If A <=Abs(B-C) Or B <=Abs(A-C) Or C <=Abs(A-B) Then MsgBox "兩邊之差不能小于第三邊": Exit Sub MsgBox "面積為:" & WorksheetFunction.Power(temp * (temp-A) * (temp-B) * (temp-C), 0.5) End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,程序將提示輸入三邊長度,如圖2.130所示。
[6] 輸入邊長后,將返回三角形面積,如圖2.131所示。

圖2.130 輸入三邊長度

圖2.131 返回三角形面積
提示
1.本實例參見光盤樣本:..\第2部分\實例103.xlsm。
2.三角形三邊的特點是每邊都大于0且兩邊之差大于第三邊,故程序中需進行限制。
實例104 指定時間出現“會議時間到”的提示
【技巧說明】 讓Excel在指定時間提示自己“會議時間到”。
【案例介紹】 用Excel可以做一些日程表,讓Excel在設定時間里彈出相應提示。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub提示() MsgBox "會議時間到,請早做準備!", 64, "提示" End Sub
[4] 使用快捷鍵Ctrl+R,顯示工程資源管理器。
[5] 雙擊左邊“Thisworkbook”,在右邊代碼窗口輸入以下代碼:
Private Sub Workbook_Open() Application.OnTime #09:00:00 AM#, "提示" End Sub
[6] 關閉工作簿再開啟,到了每天9∶00時自動彈出提示,如圖2.132所示。

圖2.132 信息提示
提示
本實例參見光盤樣本:..\第2部分\實例104.xlsm。
【相關知識說明】
(1)Private Sub Workbook_Open():工作簿事件的一種,可以使程序在開啟工作簿時自動運行。
(2)#09:00:00 AM#:日期/時間表示法,需要前后各有一個#符號,其中AM表示上午,PM表示下午。
- Word/Excel/PPT 2007辦公技巧
- 完全掌握Office 2010高效辦公超級手冊
- 和秋葉一起學:秒懂Excel(全彩版)
- Excel 2010使用詳解
- 漫!動作!人體動態漫畫素描技法超級大全
- Power BI零售數據分析實戰
- PowerPoint 2010辦公應用實戰從入門到精通
- Matlab R2016a從入門到精通 (CAX工程應用叢書)
- Word Excel PPT2016 高效辦公一本通
- Excel 2013實戰應用超級手冊
- Flash CS6核心應用案例教程(全彩慕課版)
- Excel數據透視表應用之道(雙色板)
- 辦公自動化教程(第2版)
- Office 2016辦公應用實戰從入門到精通(超值版)
- Word Excel PPT 2013:辦公應用從入門到精通