官术网_书友最值得收藏!

第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表示下午。

主站蜘蛛池模板: 庐江县| 大庆市| 台安县| 达州市| 渭南市| 宁陕县| 环江| 太白县| 邻水| 兴国县| 山阳县| 漠河县| 钟山县| 满洲里市| 若尔盖县| 清远市| 承德市| 涟源市| 兴化市| 兴文县| 龙井市| 布尔津县| 峨山| 梧州市| 南投县| 石台县| 禄丰县| 大兴区| 松桃| 梨树县| 屏南县| 定安县| 达日县| 七台河市| 广水市| 永胜县| 绥德县| 集贤县| 崇明县| 三明市| 广宁县|