小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Excel宏與VB編輯器

 超越夢想之上 2016-03-05

Excel宏與VB編輯器

(有關(guān)常用的宏代碼,參見《EXCEL宏.XLS》)

(有關(guān)宏與VB,參見《EXCE_VB.XLS》)

宏與VB編輯器

執(zhí)行宏的幾種方法

自定義函數(shù)(小寫金額轉(zhuǎn)換為大寫)

輸入或修改某一單元格數(shù)據(jù)時,執(zhí)行指定的宏

EXCEL中VBA系統(tǒng)常量的命名規(guī)則

用宏從數(shù)據(jù)清單中查找、獲取數(shù)據(jù)

用LOOKUP函數(shù)從數(shù)據(jù)清單中查找、獲取數(shù)據(jù)

密碼驗證

用Selection.Offset(ROW, COL)訪問單元格

用Selection.Offset(ROW, COL)在單元格中寫入計算公式

用ActiveCell.Offset(ROW,COL)在單元格中寫入數(shù)據(jù)、公式

為單元格(或區(qū)域)命名并運用到計算公式中

在指定區(qū)域查找指定Value的單元格

不顯示宏代碼對數(shù)據(jù)的更新過程(只顯示最后結(jié)果)

用代碼設(shè)置條件公式

 

 

宏與VB編輯器

如果經(jīng)常在 Microsoft Excel 中重復(fù)某項任務(wù),可以通過“工具>宏>錄制宏”取得宏(代碼)。然后再用它來自動執(zhí)行該任務(wù)。

除了通過“錄制宏”,還可以通過“工具>宏>VB編輯器”,在VB編輯器菜單中選“插入>模塊”來創(chuàng)建宏。

 

從某種角度看,一個EXCEL文件就是一個Visual Basic工程,通過“工具>宏>VB編輯器”可以打開此工程(VBAProject),并可看到工程資源管理器(如看不到,可通過“視圖>工程資源管理器”打開它)。

工程資源管理器界面與VB6.0很相似。在這里可以看到VBAProject所包含的對象:

一個工作簿對象(ThisWorkBook);

若干個工作表對象(Sheet1,Sheet2……,類似于VB6.0中的窗體).

一個含有宏的EXCEL文件的VBAProject還有一個或若干個模塊。宏就存儲在這些模塊中。可以通過VB編輯器菜單中“插入>模塊”添加新的模塊,還可以通過VB編輯器菜單中“插入>窗體”、 “插入>類模塊”來添加所需的窗體與類模塊。

 

 

執(zhí)行宏的幾種方法

1)直接運行宏,方法:

菜單: 工具>宏…宏>執(zhí)行

2)通過單擊按鈕運行宏.方法:

a)菜單: 視圖>工具欄>窗體,在窗體中選按鈕,拖到工作表適當(dāng)位置.

b)鼠標(biāo)移到按鈕,出現(xiàn)十字箭頭時,按右鍵,在彈出的菜單中選"指定宏"……..

C)鼠標(biāo)在按鈕上呈"I"形時,可以修改按扭的名稱(CAPTION)

注意:工具欄中有一個控件工具箱,控件工具箱的按鈕不適用于執(zhí)行簡單的宏.(若想用控件工具箱中控件調(diào)用宏,參見第4種方法)

3)通過單擊圖片運行宏.方法:

a)菜單: 插入>圖片>來自文件...,插入一個圖片.

b)右擊圖片,在彈出的菜單中選"指定宏"……..

 

4)利用事件調(diào)用宏

在VB編輯器中,可以看到工程管理視圖中有:EXCEL對象(含工作簿,若干個工作表)及若干個模塊(宏就在模塊中).   [一個工作簿可以看作是一個工程,其結(jié)構(gòu)與一個VB6.0的工程基本相同]        可在對象(工作簿,工作表)中選擇相關(guān)事件(如雙擊單元格,或改變單元格數(shù)值時),并添加調(diào)用宏的代碼(直書宏名即可).

 

又:如果在VB編輯器中創(chuàng)建一FUCTION() 可以在單元格輸入“=宏名”來調(diào)用宏

(參見自定義函數(shù)

 

自定義函數(shù)(小寫金額轉(zhuǎn)換為大寫)

在單元格中輸入計算公式時可以使用自定義函數(shù)(Function)。例如,可以創(chuàng)建一個小寫金額轉(zhuǎn)換為大寫金額的函數(shù)Function DaXie(ByVal Num),在A2單元格填上小寫金額,在B2單元格中輸入“=DaXie(A2)”就可以在B2中顯示大寫金額。(參見《小寫金額轉(zhuǎn)換為大寫.doc》

 

 

輸入或修改某一單元格數(shù)據(jù)時,執(zhí)行指定的宏

(以下摘自“銀行付款NEW”,改變E5單元格數(shù)值時將執(zhí)行宏GetData,該宏將在另一工作表中查找與E5相匹配的收款人代碼,并取得該收款人的賬號與開戶行等資料)

Private Sub Worksheet_Change(ByVal Target As Range)

'MsgBox "單元格:" & Target.Address

If Target.Address = "$E$5" Then

GetData  ’宏名

End If

End Sub

 

EXCEL中VBA系統(tǒng)常量的命名規(guī)則

EXCEL中VBA代碼中常量書寫規(guī)則:以“xl”開頭,如:

LookIn:=xlValue (查找值)

LookIn:=xlFormulas (查找公式)

SearchOrder:=xlByColumns(以列為序查找)

SearchDirection:=xlNext(向后查找)

 

 

用宏從數(shù)據(jù)清單中查找、獲取數(shù)據(jù)

(以下摘自《銀行付款1.xls》,根據(jù)工作表“興行”的E5單元格中收款人代碼,在另一名為“收款人”的工作表[該表有收款人相關(guān)資料的數(shù)據(jù)清單]中查找該收款人開戶行及賬號資料,注意Find變量的使用)

Sub GetData()

    Dim index, name, account, bank, province, city As String

    Find = 0  ‘0:未找到   1:找到

    index = Range("E5")

    Sheets("收款人").Select

    Range("A4").Select  ‘首條記錄的代碼字段

 

Counter = 0

Do Until Selection.Offset(Counter, 0).Value = "" Or Find = 1

  If Selection.Offset(Counter, 0).Value = index Then

  name = Selection.Offset(Counter, 1).Value   ‘注意這里如何訪問單元格

  account = Selection.Offset(Counter, 2).Value

  bank = Selection.Offset(Counter, 3).Value

  province = Selection.Offset(Counter, 4).Value

  city = Selection.Offset(Counter, 5).Value

  Find = 1

  End If

   Counter = Counter + 1

Loop

 

Sheets("興行").Select

 If Find = 1 Then

 Range("h13") = name

 Range("h14") = account

 Range("h15") = bank

 Range("h16") = province

 Range("J16") = city

 Else

 Range("h13") = ""

 Range("h14") = ""

 Range("h15") = ""

 Range("h16") = ""

 Range("J16") = ""

 MsgBox ("找不到收款人!")

 End If

End Sub

 

用LOOKUP函數(shù)從數(shù)據(jù)清單中查找、獲取數(shù)據(jù)

以下取自《銀行存款4.xls》,該文件有兩個工作表:“收款人”、“興行”?!笆湛钊恕惫ぷ鞅頌閿?shù)據(jù)清單,字段分別為:序號(A欄)、收款人名稱(B欄)、賬號(C欄)、開戶行(D欄)、省份(E欄)、縣市(F欄)。

用戶在工作表“興行”的E2單元格輸入收款人序號后,該表的收款人其它資料將自動填列。

實現(xiàn)方法-----

在收款人名稱單元格輸入以下函數(shù):

LOOKUP($E$2,收款人!$A$4:$A$100,收款人!B$4:B$100)

在收款人賬號單元格輸入以下函數(shù):

LOOKUP($E$2,收款人!$A$4:$A$100,收款人!C$4:C$100)

在收款人開戶行單元格輸入以下函數(shù):

LOOKUP($E$2,收款人!$A$4:$A$100,收款人!D$4:D$100)

在收款人所在省區(qū)單元格輸入以下函數(shù):

LOOKUP($E$2,收款人!$A$4:$A$100,收款人!E$4:E$100)

在收款人所在縣市單元格輸入以下函數(shù):

LOOKUP($E$2,收款人!$A$4:$A$100,收款人!F$4:F$100)

 

注意:

1)在輸入收款人名稱的函數(shù)后,可以將該函數(shù)粘貼到賬號、開戶行、省區(qū)、縣市等單元格,而后只要作少量更改即可。(因為函數(shù)中的大多數(shù)單元格是絕對引用“$”)

2)收款人!$A$4:收款人!$A$100 指明數(shù)據(jù)清單所在區(qū)域,可簡化為:收款人!$A$4:$A$100

 

密碼驗證

(以下摘自《基材消耗計算表.XLS》調(diào)用前應(yīng)先聲明一個:nCheck=0。 密碼通過驗證時,nCheck=0;密碼為空時,返回1;密碼不對時,返回9)

Sub MyCheckpass()

Dim PassWords As String

Dim MyMesText As String

MyMesText = "初始化將完成以下工作:1)用期末在產(chǎn)品的數(shù)據(jù)替換期初在產(chǎn)品的數(shù)據(jù)"

MyMesText = MyMesText & "   2)其它數(shù)據(jù)清零  3)月份自動加一  4)自動更改工作表的名稱"

MyMesText = MyMesText & "   初始化后原數(shù)據(jù)將初清除,清慎重!"

MyMesText = MyMesText & "   初始化前輸入密碼:"

 

 

PassWords = InputBox(MyMesText, "皮革基材消耗計算表初始化對話框")

If PassWords <> "8813054" Then

    If PassWords = "" Then

    nCheck = 1

    Else

    nCheck = 9

    End If

End If

Exit Sub

End Sub

 

 

 

用Selection.Offset(ROW, COL)訪問單元格

Selection.Offset(ROW, COL)中的ROW為當(dāng)前激活單元格豎向偏移量(行偏移),COL為當(dāng)前激活單元格橫向偏移量(列偏移),向左、下為正,向右、上為負。

例:

 ……

Range("E5").Activate '以下Selection.Offset(ROW, COL)中的ROW,COL均為相對于E5單元格的偏移量

Selection.Offset(-1, -1).Value = "-1-1" '在D4單元格中寫入"-1-1"

Selection.Offset(1, 2).FormulaR1C1 = "=SUM(R[0]C[-3]:R[0]C[-1])"

'以上在G6單元格中寫入"=SUM(D6:F6)" 其中R[0]C[-3]是相對于公式所在單元格的行偏移與列偏移。

Selection.Offset(3, 2).FormulaR1C1 = "=SUM(R[0]C[-3]:R[0]C[-1])"

'以上在G8單元格中寫入"=SUM(D8:F8)"

 

……

 

用Selection.Offset(ROW, COL)在單元格中寫入計算公式

參見Selection.Offset(ROW, COL)訪問單元格

 

用ActiveCell.Offset(ROW,COL)在單元格中寫入數(shù)據(jù)、公式

……

Range("B2").Activate

ActiveCell.Offset(1, 1).Value = 50 ‘在C3格中寫入50

ActiveCell.Offset(2, 2).FormulaR1C1 = "=SUM(R[0]C[-3]:R[0]C[-1])" ‘在D4格中寫入“=SUM(A4:C4)”

ActiveCell.Offset(2, 2).Range("D3").Value = 100

‘在G6格中寫入100。此處ActiveCell.Offset(0, 0)為B2,ActiveCell.Offset(2, 2)為D4,  將D4作為A1,計算的D3,結(jié)果為G6。 

……

 

為單元格(或區(qū)域)命名并運用到計算公式中

(參見《應(yīng)交稅金賬.xls》)

ActiveWorkbook.Names.Add Name:="_55", RefersToR1C1:="=R12C1:R12C3" '將A12:C12區(qū)域取名為"_12"

 

ActiveWorkbook.Names.Add Name:="_1", RefersToR1C1:="=R1C1" '將A1單元格取名為"_1"

ActiveWorkbook.Names.Add Name:="_2", RefersToR1C1:="=R1C2" '將B1單元格取名為"_2"

 

Range("A1").Activate '以下Selection.Offset(row,col)中的row,col均為相對于A1單元格的偏移量

   Selection.Offset(10, 0).FormulaR1C1 = "=SUM(_1:R[-1]C[0])" '在A11格中寫入"=SUM(_1:A10)", 等同于"=SUM(A1:A10)

Selection.Offset(10, 1).FormulaR1C1 = "=SUM(_2:R[-1]C[0])" '在B11格中寫入"=SUM(_2:A10)", 等同于"=SUM(B1:B10)

注:

在《應(yīng)交稅金賬》中,因為不知道如何在R[]C[]中寫入變量名,所以只好用為單元格命名的方法來。后來發(fā)現(xiàn),在R[]C[0]中定入變量名很簡單,以下就是一例(參見《三欄式賬頁》):

n=15

Selection.Offset(10,10).FormulaR1C1 = "=SUM(R[" & -n & "]C[0]:R[-1]C[0])"

 

 

在指定區(qū)域查找指定Value的單元格

 

(以下摘自《三欄式賬頁.xls》,在工作表左上的一個連續(xù)區(qū)域查找Value = "借方金額"的單元格。區(qū)域大?。簩扢AX_COL(列),高為MAX_ROW(行),找到后,中止查找。注意find變量的使用方法。  調(diào)試中發(fā)現(xiàn):若查找區(qū)域值為“NOVALUE!”的單元格時,將出錯)

……

Range("a1").Activate

find = 0

For n = 0 To MAX_COL

    For m = 0 To MAX_ROW

           If Selection.Offset(m, n).Value = "借方金額" Then

            find = 1

            Exit For

  End If

    Next

         If find = 1 Then

         Exit For

         End If

Next

……

 

 

不顯示宏代碼對數(shù)據(jù)的更新過程(只顯示最后結(jié)果)

(以下摘自《三欄式頁.xls》)

Application.ScreenUpdating = False

 

用代碼設(shè)置條件公式

以下摘自《三欄式賬頁.xls》,當(dāng)余額為貸方時,用紅字顯示“貸”字

(通過菜單“格式>條件格式”可以手工為單元格設(shè)置條件格式)

    ……

     '以下為余額方向欄(借貨平)公式

     Selection.Offset(JFJE_R + n + 1, JFJE_C + 2).FormulaR1C1 = "=if(R[0]C[3]>0,""借"",if(R[0]C[3]<0,""貸"",""平""))"

    '用紅字顯示"貸"字

     Selection.Offset(JFJE_R + n + 1, JFJE_C + 2).FormatConditions.Delete

     Selection.Offset(JFJE_R + n + 1, JFJE_C + 2).FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _

        Formula1:="=""貸"""

     Selection.Offset(JFJE_R + n + 1, JFJE_C + 2).FormatConditions(1).Font.ColorIndex = 3

  ……

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多