Excel宏與VB編輯器(有關(guān)常用的宏代碼,參見《EXCEL宏.XLS》) (有關(guān)宏與VB,參見《EXCE_VB.XLS》) 輸入或修改某一單元格數(shù)據(jù)時,執(zhí)行指定的宏用宏從數(shù)據(jù)清單中查找、獲取數(shù)據(jù) 用LOOKUP函數(shù)從數(shù)據(jù)清單中查找、獲取數(shù)據(jù) 用Selection.Offset(ROW, COL)訪問單元格 用Selection.Offset(ROW, COL)在單元格中寫入計算公式 用ActiveCell.Offset(ROW,COL)在單元格中寫入數(shù)據(jù)、公式 不顯示宏代碼對數(shù)據(jù)的更新過程(只顯示最后結(jié)果) 宏與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對象(含工作簿,若干個工作表)及若干個模塊(宏就在模塊中). 又:如果在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() Counter = 0 Do Until Selection.Offset(Counter, 0).Value = "" Or Find = 1 Loop Sheets("興行").Select 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 &
" MyMesText = MyMesText &
" MyMesText = MyMesText &
" PassWords = InputBox(MyMesText, "皮革基材消耗計算表初始化對話框") If PassWords <> "8813054" Then 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, …… 為單元格(或區(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, 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變量的使用方法。 …… Range("a1").Activate find = 0 For n = 0 To MAX_COL
Next …… 不顯示宏代碼對數(shù)據(jù)的更新過程(只顯示最后結(jié)果)(以下摘自《三欄式頁.xls》) Application.ScreenUpdating = False 用代碼設(shè)置條件公式以下摘自《三欄式賬頁.xls》,當(dāng)余額為貸方時,用紅字顯示“貸”字 (通過菜單“格式>條件格式”可以手工為單元格設(shè)置條件格式)
|
|
|