日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Excel VBA(宏):添加宏

發(fā)布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Excel VBA(宏):添加宏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
寫在前面: 1、編寫宏,打開VBA,雙擊ThisWorkbook對當前工作薄進行編寫宏;雙擊Sheet1,對整個sheet編寫宏; 或者創(chuàng)建模塊,在模塊里,編寫、調(diào)試代碼。 打開VBA的方法見第一講,結(jié)合常用窗口進行編寫、調(diào)試。 2、部分對象有提示,如Dim a As,敲擊空格后有提示。 3、所有宏要運行,必須啟動宏。(2007版啟動宏,點擊表格左上角 “excel選項” “信任中心” “信任中心設(shè)置” “啟用宏”) 4、“無法在未啟用宏的工作簿中保存以下功能”提示,選是后,宏會整個丟失。 2007版,由于VBA或者宏代碼有一定的危害性,為了提高安全意識,凡是以XLSX為后綴名的文件都不能含有宏代碼,需要將后綴保存為XLSM 5、vba中_表示代碼連接符,注意空格 ================================================================ 運行excel中的VBA代碼時,需要啟用宏。VBA主要操作包含觸發(fā)、指定單元格:1.觸發(fā):選擇不同的觸發(fā)模式。2.指定單元格:指定cells和Range。 ================================================================== VBA代碼調(diào)試技巧 ###################################################################### 第一講:常見錯誤: 1、編譯錯誤:不正確的代碼,編譯工具能提示錯誤 2、運行時錯誤,執(zhí)行不可能完成的錯誤 3、邏輯錯誤打開VBA方法: ALT+F11 == 菜單 工具 宏 == 控件 右鍵 查看代碼 == excel visual basic常用窗口:在“視圖”中依次打開: 立即窗口:可輸入指令運行 本地窗口:中斷過程可查看中間變量值內(nèi)容 查看窗口:查看運行輸出結(jié)果Debug對象:Debug.print ... '打印內(nèi)容Debug.assert ... '暫停點,中斷程序 VBA程序三種狀態(tài):設(shè)計、運行、中斷模式時。調(diào)試工具: 視圖 工具欄 調(diào)試中斷程序的方法(3種):設(shè)置斷點:調(diào)試 切換斷點 == F9使用Debug.Assert方法添加監(jiān)視條件:代碼窗口(或監(jiān)視窗口) 右鍵 添加監(jiān)視實例:'VBA編輯器會根據(jù)自己提供的內(nèi)容及已創(chuàng)建變量等自動調(diào)整大小寫,建議一次寫對,避免類似變量過多時引入問題 'Sub是當前頁面要執(zhí)行的方法,類似main函數(shù),Function為要調(diào)用的方法 '當有多個Sub時,選擇編輯框右上角選擇對應demo名稱 Sub Demo()'Dim 定義變量 As Integer(整數(shù)) Dim i As Integer, iSum As Integer'for 循環(huán)語句For i = 1 To 10'斷言,每次都會被執(zhí)行,開始寫代碼可能會用到,之后,常用斷點方式調(diào)試代碼'Debug.Assert i < 9iSum = iSum + add(i)'vbTab 表示一個table(空字符),不同變量與字符間用","號分割,"'"表示注釋'Debug.Print vbTab, "i=", i, vbTab, "sum", iSumDebug.Print "i= ", i, " sum ", iSumNext i End Sub Function add(num As Integer) As Integer add = num + num End Function ###################################################################### 第二講: shape對象:自選對象圖片藝術(shù)字任意多邊形OLE對象(Object Linking and Embedding對象連接于嵌入) 常用shape對象(集合)Shapes集合:代表文檔中所有圖形對象ShapeRange集合:代表文檔中的圖形對象指定的子集(圖形對象的一部分)Shape:代表單個圖形對象實例: '為了便于看到效果,需要在表格中插入"圖形"等,設(shè)置下輪廓,不要帶填充色 '包含多個Sub時,在當前編輯框右上角選擇執(zhí)行的demo Sub demo1() '選中所有的圖形對象 ActiveSheet.Shapes.SelectAll '選擇第一個和第三個圖像對象,沒有找到圖形對象時報1004錯誤 '代碼按序執(zhí)行,先選中所有,在選中1,3,最終選中效果為后者 ActiveSheet.Shapes.Range(Array(1, 3)).Select End Sub ' 創(chuàng)建的圖像(如:圖形)最好不要帶填充色,設(shè)置下輪廓即可,不然很可能看不出效果 Sub demo2() ActiveSheet.Shapes.Range(Array(1, 2, 3)).Select '設(shè)置背景色為紅色(注意:有些圖形對象沒有屬性Forecolor等或者寫錯了而找不到,報錯438) Selection.ShapeRange(1).Fill.BackColor.RGB = RGB(255, 0, 0) End Sub為Shape對象指定宏代碼手工設(shè)置宏代碼:鼠標有右鍵指定宏即可。vba設(shè)備宏代碼:OnAction為shape指定多個宏,見舉例一:使用全局變量實現(xiàn)相同效果,見舉例二:shape指定多個宏,舉例一: Sub Macro1() 'ActiveSheet.Shapes 獲取所有的圖形對象 Dim i As Integer For Each Shape In ActiveSheet.shapes i = i + 1 '將每一個值圖形對象的值寫入表格(這里表格開始位置為<0,0>) Cells(i, 1).Value = Shape.Name Next 'vbInformation后邊是彈出框title MsgBox "Welcome First!", vbInformation, "hello" '通過獲取的所有對象名稱,點擊某個已知對象 ActiveSheet.shapes("缺角矩形 8").OnAction = "Macro2" End Sub Sub Macro2() MsgBox "Hello!Second!", vbInformation, "Second" ActiveSheet.shapes("缺角矩形 8").OnAction = "Macro1" End Sub '創(chuàng)建私有方法 Private Sub CommandButton1_Click() Dim i As Integer For Each Shape In shapes i = i + 1 Cells(i, 1).Value = Shape.Name Next End Subshape指定多個宏,舉例二: '設(shè)置全局變量 Public iFlag As Boolean '對于私有方法的調(diào)用,1、右鍵圖形對象,指定宏,將私有方法名稱協(xié)商即可點擊 Private Sub CommandButton1_Click() If iFlag ThenMsgBox "first", vbInformation, "one" ElseMsgBox "secondd", vbInformation, "two" End If iFlag = Not iFlag End Sub ###################################################################### 第三講 制作帶自殺功能的工作薄文件自殺功能制作原因:文件保護,限制未授權(quán)的人查看實現(xiàn)步驟:1、用VBA設(shè)置工作薄屬性為只讀2、使用VBA文件操作指令進行自刪除 舉例(手工點擊按鈕刪除); '圖像對象添加這個宏之前,一定備份一份,這個方法會刪除當前文件 Sub KillThisworkBook()With ThisWorkbook'設(shè)置默認保存,不提示是否保存.Saved = True'設(shè)置工作薄只讀 .ChangeFileAccess xlReadOnly'讀寫狀態(tài),寫的密碼,不可被訪問是否提示(默認true)'.ChangeFileAccess(Mode,WritePassword,Notify)'除當前文件,Kill是自帶的方法,FullName表示文件的完整路徑(它們之間有個空格) Kill .FullName.CloseEnd With End Sub 舉例(工作薄打開時刪除,這里宏是針對ThisWorkbook的,不是寫在sheet、模塊里的); '首先點擊編輯框左上角,選擇worksheet,然后選擇open方法 Sub KillThisWorkbook()With ThisWorkbook'設(shè)置默認保存,不提示是否保存.Saved = True'設(shè)置工作薄只讀 .ChangeFileAccess xlReadOnly'讀寫狀態(tài),寫的密碼,不可被訪問是否提示(默認true)'.ChangeFileAccess(Mode,WritePassword,Notify)'除當前文件,Kill是自帶的方法,FullName表示文件的完整路徑(它們之間有個空格) Kill .FullName.CloseEnd With End Sub Private Sub Workbook_Open() '調(diào)用刪除方法 Call KillThisWorkbook End Sub '2007版,由于VBA或者宏代碼有一定的危害性,為了提高安全意識,凡是以XLSX為 '后綴名的文件都不能含有宏代碼,需要將后綴保存為XLSM,執(zhí)行正確 刪除條件,列:非指定用戶,計算機,路徑,時間,打開次數(shù)讀寫注冊表讀寫指定文件讀寫指定單元格讀寫隱藏名稱讀寫文檔屬性 打開次數(shù)舉例--隱藏名稱: '2003是在插入-名稱-自定義 '2007使用默認快捷鍵(與2003一樣):Ctrl+F3 '在文檔中Ctrl+F3插入名稱:引用名稱,opentimes;位置,工作薄;引用,=0(表常量) Sub ReadOpentimer()Dim OTimer As Integer'opentimes為表格文檔中插入的名稱'Evaluate將名稱獲取對應值OTimer = Evaluate(ThisWorkbook.Names("opentimes").RefersTo)OTimer = OTimer + 1If OTimer > 3 Then'Call KillThisWorkbookMsgBox "這里調(diào)用要執(zhí)行的刪除操作:KillThisWorkbook!!!"ElseThisWorkbook.Names("opentimes").RefersTo = "-" & OTimerEnd If End Sub Sub HideNames()'設(shè)置名稱不可見'ThisWorkbook.Names("opentimes").Visible = FalseThisWorkbook.Names("opentimes").Visible = True End Sub Sub AddHiddenNames() '添加引用的名稱,并且設(shè)置為0 ThisWorkbook.Names.Add Name:="opentimes", RefersTo:="=0", Visible:=flase End Sub'調(diào)用 Private Sub Workbook_Open()Call ReadOpentimer End Sub Sub KillThisWorkbook()With ThisWorkbook.Save = True.ChangeFileAccess xlReadOnlyKill .FullName.CloseEnd With End Sub打開次數(shù)舉例--文檔屬性: '2003 文件 屬性 自定義 名稱,opentimes;取值,0 '2007 準備 屬性 (左側(cè)小三角) 高級屬性 自定義 名稱,opentimes;取值,0 Sub ReadOpentimer()Dim opentimes As IntegerWith Meopentimes = .CustomDocumentProperties("opentimes").Value + 1opentimes = opentimes + 1If opentimes > 3 Then'Call KillThisWorkbookMsgBox "這里調(diào)用要執(zhí)行的刪除操作:KillThisWorkbook!!!"Else.CustomDocumentProperties("opentimes").Value = opentimes.SaveEnd IfEnd With End Sub Private Sub Workbook_Open()Call ReadOpentimer End Sub Sub KillThisWorkbook()With ThisWorkbook.Saved = True.ChangeFileAccess xlReadOnlyKill .FullName.CloseEnd With End Sub '代碼添加文檔屬性 Sub AddCustomDocumentProperties()ThisWorkbook.CustomDocumentProperties.Add _Name:="opentimes_1", _LinkToContent:=False, _Type:=msoPropertyTypeNumber, _Value:=8888 End Sub ###################################################################### 第四講加載宏的概念和分類加載宏是一類程序,他們可以擴張Excel的功能,為Excel提供可用于公式 中的新的工作表函數(shù)(自定義函數(shù))、提那家可選指令和功能宏的加載方式3中,Excel、com加載宏和自動化加載宏Excel加載宏:是Excel編寫VBA編寫的程序是Excel文檔 Excel加載宏特點:共享性,便于擴張;隱藏性,運行時是隱藏的;不受宏安全級限制 場合:多個工作薄使用使用步驟:1、制作Excel加載宏文檔,結(jié)合舉例看1.1、創(chuàng)建普通Excel文檔1.2、將上步普通Excel另存為xls(加載宏的默認格式)。2003版,格式后綴加載宏xls;2007版后綴加載宏xla保存時,便于查看,最好是將宏和要使用改宏的文檔放在同一目錄下2、加載Excel加載宏文檔3、卸載加載宏,工具 加載宏,去掉宏的選中狀態(tài)宏不想保留,修改注冊表法和刪除宏文檔法(立即窗口輸入AddIns("文檔宏名稱").FullName) 加載方式步驟:1、手工加載: 工具 加載宏2、安裝加載:瀏覽 添加自定義的宏 選中(2007 Excel選項 加載項 轉(zhuǎn)到 瀏覽) 自動加載保存在特定的位置,會自動讀取 舉例: '新建空文檔創(chuàng)建宏方法 'Function xxx 括號里的是傳入?yún)?shù)及類型,括號是返回值類型 Function CustomDefineAdd(char As Integer) As Integer'將最終結(jié)果返回到CustomDefineAddCustomDefineAdd = char + char End Function定制加載宏:創(chuàng)建加載宏信息在創(chuàng)建加載宏文檔時定義信息,文檔屬性(準備 屬性) 摘要(標題 和 備注)修改已存在的宏信息需要在VBA視圖修改可編輯的狀態(tài)值,編輯完代碼后,在改成不可編輯的 ###################################################################### 第5講ADO應用技巧制作相片的學生證1、制作學生證常規(guī) 方法常規(guī)方法獲取數(shù)據(jù)庫中國的圖片步驟:獲取數(shù)據(jù)庫中的圖片資料的二進制數(shù)組使用open語句把二進制數(shù)組寫入臨時文件使用LoadPicture函數(shù)把圖片顯示在控件上使用kill語句刪除臨時文件2、制作學生證 api自編函數(shù)API(應用程序編程接口)將二進制數(shù)組轉(zhuǎn)換為可以是Image控件接受的Picture對象把Picture對象顯示在Image控件中 此節(jié),需要單獨了解把圖片保存到數(shù)據(jù)庫(mdb,ldb)以及實現(xiàn)步驟中用到的方法 ###################################################################### 第6講 Access數(shù)據(jù)庫中的鏈接表鏈接表:類似快捷方式手工創(chuàng)建鏈接表:文件|空白右鍵選擇鏈接表代碼創(chuàng)建鏈接表: Catalog對象建立table對象設(shè)置ParentCatalog屬性值和Properties集合的各項值把Table對象添加到Catalog對象的Tables集合中 略。 ###################################################################### 第7講 Excel VBA類的初步應用子類化實現(xiàn)控件數(shù)組控件數(shù)組是指具有相同名稱和類型并且具有相同的事件過程的一個或者多個控件 查詢窗體實例任務(wù)背景常規(guī)設(shè)計方法(處理重復的內(nèi)容時,需要寫很多遍,如:很多個按鈕)子類化方法:通過使用類技術(shù),把相同的時間過程寫在一個類模塊中,使多個相同類型的控件可以共同調(diào)用改事件的過程的方法子類化實現(xiàn)控件數(shù)組類:類是一個模塊;類是對象的模板,可以被多次調(diào)用,生成相同性質(zhì)的對象子類化的步驟:1、創(chuàng)建類:插入 類(name:CommandWithEw)2、編寫類代碼:3、調(diào)用類代碼WithEvents變量說明:1、withEvents變量不能是派生對象變量,即不能把它聲明為As Object--當聲明該變量時必須制定類名2、不能把WithEvents聲明為As New,必須明確地創(chuàng)建事件源對象,并把它賦給WithEvents變量3、不能在標準模塊中聲明WithEvents變量,只能在類模塊、窗體模塊以及其他定義類的模塊中聲明類模塊中的公共變量--添加類屬性Public WithEvents cmd As MSForms.CommandButton 界面實現(xiàn)步驟:1、打開VBA,右鍵工作薄,創(chuàng)建form;修改名稱:userQuery;2、添加組件:A,顯示提示信息;ab,文本輸入框;其他,將鼠標放在“Toolbox”上懸停,即可看到相關(guān)組件提示信息。界面顯示大致效果:要查詢的ID: "這里是輸入框(name:txbID)""按鈕,顯示1(name:cmd1)" "按鈕,顯示2(name:cmd2) ..."按鈕,顯示6(name:cmd6)" "按鈕,顯示7(name:cmd7)" ..."按鈕,顯示查詢(name:cmdQuery)" "按鈕,顯示取消(name:cmdCancel)"說明:通過按Ctrl+鼠標左鍵拖動,可復制一個或多個(選中多個拖動),按鈕修改顯示字符,先選中按鈕組件,過1秒,在點擊按鈕一次。 常規(guī)方法舉例: '將name為cmd0組件的caption頭,追加到txbID組件中 'txbID.Text = txbID.Text & cmd0.Caption '點擊運行,每點擊一個按鈕,輸入框中都會多一個數(shù)字 Private Sub cmd0_Click() txbID.Text = txbID.Text & cmd0.Caption End SubPrivate Sub cmd1_Click() txbID.Text = txbID.Text & cmd1.Caption End SubPrivate Sub cmd2_Click() txbID.Text = txbID.Text & cmd2.Caption End SubPrivate Sub cmd3_Click() txbID.Text = txbID.Text & cmd3.Caption End SubPrivate Sub cmd4_Click() txbID.Text = txbID.Text & cmd4.Caption End SubPrivate Sub cmd5_Click() txbID.Text = txbID.Text & cmd5.Caption End SubPrivate Sub cmd6_Click() txbID.Text = txbID.Text & cmd6.Caption End SubPrivate Sub cmd7_Click() txbID.Text = txbID.Text & cmd7.Caption End SubPrivate Sub cmd8_Click() txbID.Text = txbID.Text & cmd8.Caption End SubPrivate Sub cmd9_Click() txbID.Text = txbID.Text & cmd9.Caption End SubPrivate Sub cmdCancel_Click()'本節(jié)不處理 Unload Me End SubPrivate Sub cmdQuery_Click()MsgBox "這是一個測試!" End Sub子類化方法舉例: '創(chuàng)建一個類(name:CommandWithEvents) Option Explicit 'WithEvents變量可以被公共調(diào)用,類屬性cmd Public WithEvents cmd As MSForms.CommandButton '在對象列表(編輯框左上角)選擇cmd,過程列表(編輯框右上角)選擇click事件 Private Sub cmd_Click()'按鈕被點擊時,將點擊內(nèi)容添加都輸入框userQuery.txbID.Text = userQuery.txbID.Text & cmd.Caption End Sub'在窗體userQuery中填寫如下代碼 '添加聲明,模塊級變量 Option Explicit '與按鈕組件數(shù)一致,注意arrCmd和cmdb對應的i保持一致 Dim arrCmd(0 To 9) As CommandWithEventsPrivate Sub cmdCancel_Click()'不處理 Unload Me End SubPrivate Sub cmdQuery_Click()MsgBox "這是一個測試!" End SubPrivate Sub UserForm_Click()End Sub '選擇userform窗體對象后,右上角選擇Initialize方法 Private Sub UserForm_Initialize()Dim i As IntegerDim cmdb As CommandWithEventsFor i = 0 To 9'創(chuàng)建新對象Set cmdb = New CommandWithEventsSet cmdb.cmd = Me.Controls("cmd" & i)Set arrCmd(i) = cmdb'釋放變量Set cmdb = NothingNext i End Sub子類化方法舉例--代碼循環(huán)創(chuàng)建組件: '將所有的組件,剪貼掉,然后添加組件frame(name:frame1), '第一次創(chuàng)建默認是frame1,通過循環(huán)就不需要在關(guān)注內(nèi)部按鈕名稱了 '添加聲明,模塊級變量 Option Explicit '與按鈕組件數(shù)一致,注意arrCmd和cmdb對應的i保持一致 Dim arrCmd(0 To 9) As CommandWithEventsPrivate Sub cmdCancel_Click()'不處理 Unload Me End SubPrivate Sub cmdQuery_Click()MsgBox "這是一個測試!" End SubPrivate Sub UserForm_Click()End Sub '選擇userform窗體對象后,右上角選擇Initialize方法 Private Sub UserForm_Initialize()Dim i As IntegerDim cmdb As CommandWithEventsFor i = 0 To Me.Frame1.Controls.Count - 1 '9,注意取值范圍'創(chuàng)建新對象Set cmdb = New CommandWithEventsSet cmdb.cmd = Me.Frame1.Controls(i) 'Me.Controls("cmd" & i)Set arrCmd(i) = cmdb'釋放變量Set cmdb = NothingNext i End Sub '舉例測試--控件事件本身的運行,先于子類化: '在上邊代碼的基礎(chǔ)上,添加 Private Sub cmd1_Click() MsgBox "控件事件本身的運行,先于子類化!" End Sub ###################################################################### 第八講控件的應用輸入時逐步提示信息(下拉菜單等)作用,提供輸入效率和正確率實現(xiàn),在工作薄中建立基礎(chǔ)數(shù)據(jù)表1、將中文轉(zhuǎn)換為拼音首字母2、輸入時自動轉(zhuǎn)換使用文本框控件和列表框控件控件的顯示和隱藏輸入時逐步提示將提示信息寫入工作表步驟; 產(chǎn)品名稱 輔助列 食品 sp ... ...需要方法:將中文轉(zhuǎn)換為拼音首字母、輸入時自動轉(zhuǎn)換(發(fā)生時間,工作薄內(nèi)容 發(fā)生改變時)###################################################################### 參考網(wǎng)址: http://video.1kejian.com/video/?67331-0-1.html http://www.feiesoft.com/vba/word/ 其他參考: 文檔打開時,工作薄最大化 '對Thisworkbook添加open時事件 Private Sub Workbook_Open()Application.WindowState = xlMaximizedActiveWindow.WindowState = xlMaximizedWorksheets("Sheet1").ActivateRange("A1").Select End Sub

?

轉(zhuǎn)載于:https://www.cnblogs.com/leonlipfsj/p/6361147.html

總結(jié)

以上是生活随笔為你收集整理的Excel VBA(宏):添加宏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。