第一篇:word vba常用語句100句
word vba常用語句100句
很好的材料,從google搜索得到。
301)Application.ActivePrinter ‘獲取當前打印機
(302)Application.Height '當前應用程序文檔的高度
(303)Application.Width ‘當前應用程序文檔的寬度
(304)Application.Build ‘獲取Word版本號和編譯序號
(305)Application.Caption ‘當前應用程序名
(306)Application.DefaultSaveFormat '返回空字符串,表示Word文檔(307)Application.DisplayRecentFiles '返回是否顯示最近使用的文檔的狀態(308)Application.Documents.Count '返回當前打開的文檔數
(309)Application.FontNames.Count ‘返回當前可用的字體數
(310)Application.Left ‘返回當前文檔的水平位置
(311)Application.MacroContainer.FullName '返回當前文檔名,包括所在路徑
Application.MacroContainer.pach'返回當前文檔路徑
Application.ActiveDocument.Path‘獲得文件的相對路徑
(312)Application.NormalTemplate.FullName '返回文檔標準模板名稱及所在位置(313)Application.RecentFiles.Count '返回最近打開的文檔數目
(314)Application.System.CountryRegion '返回應用程序所在的地區代碼(315)Application.System.FreeDiskSpace ‘返回應用程序所在磁盤可用空間(316)Application.System.HorizontalResolution '返回顯示器的水平分辨率(317)Application.System.VerticalResolution '返回顯示器的垂直分辨率(318)Application.System.LanguageDesignation '返回系統所使用的語言
(319)Application.System.MathCoprocessorInstalled ‘返回系統是否安裝了數學協處理器(320)Application.System.OperatingSystem ‘返回當前操作系統名
(321)Application.System.ProcessorType '返回計算機處理器名
(322)Application.System.Version ‘返回操作系統的版本號
(323)Application.Templates.Count '返回應用程序所使用的模板數
(324)Application.UserName'返回應用程序用戶名
(325)Application.Version ‘返回應用程序的版本號
Documents/Document對象
-------
(326)ActiveDocument.AttachedTemplate.FullName '返回當前文檔采用的模板名及模板所在位置
(327)ActiveDocument.Bookmarks.Count '返回當前文檔中的書簽數
(328)ActiveDocument.Characters.Count '返回當前文檔的字符數
(329)ActiveDocument.CodeName ‘返回當前文檔的代碼名稱
(330)ActiveDocument.Comments.Count ‘返回當前文檔中的評論數
(331)ActiveDocument.Endnotes.Count '返回當前文檔中的尾注數
(332)ActiveDocument.Fields.Count '返回當前文檔中的域數目
(333)ActiveDocument.Footnotes.Count ‘返回當前文檔中的腳注數
(334)ActiveDocument.FullName '返回當前文檔的全名及所在位置
(335)ActiveDocument.HasPassword '當前文檔是否有密碼保護
(336)ActiveDocument.Hyperlinks.Count '返回當前文檔中的鏈接數
(337)ActiveDocument.Indexes.Count '返回當前文檔中的索引數
(338)ActiveDocument.ListParagraphs.Count '返回當前文檔中項目編號或項目符號數(339)ActiveDocument.ListTemplates.Count '返回當前文檔中使用的列表模板數
(340)ActiveDocument.Paragraphs.Count '返回當前文檔中的段落數
(341)ActiveDocument.Password=XXX '設置打開文件使用的密碼
(342)ActiveDocument.ReadOnly '獲取當前文檔是否為只讀屬性
(343)ActiveDocument.Saved '當前文檔是否被保存
(344)ActiveDocument.Sections.Count '當前文檔中的節數
(345)ActiveDocument.Sentences.Count ‘當前文檔中的語句數
(346)ActiveDocument.Shapes.Count'當前文檔中的形狀數
(347)ActiveDocument.Styles.Count '當前文檔中的樣式數
(348)ActiveDocument.Tables.Count ‘當前文檔中的表格數
(349)ActiveDocument.TablesOfAuthorities.Count ‘返回當前文檔中的引文目錄數
(350)ActiveDocument.TablesOfAuthoritiesCategories.Count ‘返回當前文檔中引文目錄類別數(351)ActiveDocument.TablesOfContents.Count ‘返回當前文檔中的目錄數
(352)ActiveDocument.TablesOfFigures.Count '返回當前文檔中的圖表目錄數
Paragraphs/Paragraph對象
-------
(353)Selection.Paragraphs.Count '返回所選區域的段落數
(354)Selection.Paragraphs.First '返回所選區域中的第一段
(355)ActiveDocument.Paragraphs(1).LeftIndent '返回當前文檔中第一段的左縮進值(356)ActiveDocument.Paragraphs(1).LineSpacing '返回當前文檔中第一段的行距
(357)ActiveDocument.Paragraphs(1).OutlineLevel‘返回或設置當前文檔中第一段的大綱級別
(358)ActiveDocument.Paragraphs(1).RightIndent ‘返回當前文檔中第一段的右縮進量(359)ActiveDocument.Paragraphs(1).SpaceBefore '返回當前文檔中第一段的段前間距(360)ActiveDocument.Paragraphs(1).SpaceAfter ‘返回當前文檔中第一段的段后間距(361)ActiveDocument.Paragraphs(1).Range.Text '返回當前文檔中第一段的內容
(362)ActiveDocument.Paragraphs(1).Range.Style.NameLocal '返回當前文檔中第一段應用的樣式名
(363)ActiveDocument.Paragraphs(1).Range.Style.Description '返回當前文檔中第一段所應用樣
式的詳細描述
(364)ActiveDocument.Paragraphs(1).Range.Style.Font.Name '返回當前文檔中第一段所應用樣式的字體名
(365)ActiveDocument.Paragraphs(1).Range.Style.Font.NameFarEast'返回或設置一種東亞字體名
(366)ActiveDocument.Paragraphs(1).Range.Style.Font.Size '返回或設置當前文檔中第一段所應用樣式的字體大小
(367)ActiveDocument.Paragraphs(1).Range.Style.Font.Spacing '返回或設置字符間距(368)Selection.Words.Count '所選區域的字數
Sentences對象
----
(369)Selection.Sentences.Item(1)'所選區域中的第一句的內容
----
Words對象
----
(371)ActiveDocument.Words(1).Select '選擇當前文檔中的第一個詞
(372)ActiveDocument.Range.Words(1).InsertAfter “我愛你!” '在當前文檔中的第一個詞后插入“我愛你”
----
Characters對象
----
(373)Selection.Characters.Count '當前文檔中所選區域的字符數
(374)ActiveDocument.Paragraphs(1).Range.InsertParagraphAfter'在當前文檔的第一段之后插入一個新段落
------
Sections/Section對象
------
(375)ActiveDocument.Sections.First '當前文檔的第一節
(376)ActiveDocument.Sections.First.PageSetup.BottomMargin '當前文檔第一節所在頁的底邊距
(377)ActiveDocument.Sections.First.PageSetup.LeftMargin '當前文檔第一節所在頁的左邊距(378)ActiveDocument.Sections.First.PageSetup.RightMargin '當前文檔第一節所在頁的右邊距(379)ActiveDocument.Sections.First.PageSetup.TopMargin '當前文檔第一節所在頁的頂邊距
(380)ActiveDocument.Sections.First.PageSetup.PaperSize '返回或設置當前文檔第一節所在頁的大小
(381)ActiveDocument.Sections.First.PageSetup.PageHeight '返回或設置當前文檔第一節所在頁的高度
(382)ActiveDocument.Sections.First.PageSetup.PageWidth '返回或設置當前文檔第一節所在頁的寬度
(383)ActiveDocument.Sections.Add Range:=myRange '在當前文檔中添加新節
(384)ActiveDocument.Sections.Item(2)'當前文檔中的第二節
(385)ActiveDocument.Sections.Last.Range.InsertAfter “文檔結束!” '在當前文檔中最后一節的結尾添加文字“文檔結束!”
----
Range對象
----
(386)ActiveDocument.Range(Start:=0, End:=10)'表示當前文檔前10個字符所組成的一個Range對象
(387)Set myRange = ActiveDocument.Range(_
Start:=ActiveDocument.Paragraphs(2).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End)'將當前文檔第2段至第4段設置為一個Range對象
(388)ActiveDocument.Paragraphs(1).Range.Copy '復制當前文檔中的第一段
(389)Selection.Copy
Documents.Add.Content.Paste '復制所選內容到新文檔中
(390)ActiveDocument.Bookmarks(“Book1”).Copy Name:=“Book2” '將Book2書簽復制Book1書簽標記的位置
(391)Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4 '將所選內容移至文檔中的第4行
(392)Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext '將所選內容移至下一個表格的第1個單元格
(393)Selection.Range.AutoFormat '為所選內容套用格式
(394)ActiveDocument.Content.Font.Name = “Arial” '將當前文檔的字體設置為斜體(395)ActiveDocument.Content.Select
Selection.Delete '將當前文檔中的內容刪除
--
其它
--
(396)Documents.Add '添加一個新文檔
(397)Set myTable = ActiveDocument.Tables.Add(Selection.Range, 2, 2)'在當前文檔所選區域添加一個2行2列的表格
(398)Open “C:my.txt” For Input As #1 '打開一個用于輸入的文件并令其編號為1
(399)Line Input #1, TextLine'讀取被打開用于輸入且編號為1的文件
(400)Close #1 '關閉編號為1的文件
第二篇:Excel之VBA編程常用語句300句之二
ThisWorkbook.ActiveSheet.Rows(1).RowHeight = 10 ‘改變工作表的行1的高度值設置為10(121)ThisWorkbook.Worksheets(1).Activate ‘當前工作簿中的第一個工作表被激活
(122)ThisWorkbook.Worksheets(“Sheet1”).Rows(1).Font.Bold = True ‘設置工作表Sheet1中的行1數據為粗體
(123)ThisWorkbook.Worksheets(“Sheet1”).Rows(1).Hidden = True ‘將工作表Sheet1中的行1隱藏
ActiveCell.EntireRow.Hidden = True ‘將當前工作表中活動單元格所在的行隱藏
注:同樣可用于列。
(124)ActiveSheet.Range(“A:A”).EntireColumn.AutoFit ‘自動調整當前工作表A列列寬
(125)ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues)‘選中當前工作表中常量和文本單元格
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors+xlTextValues)‘選中當前工作表中常量和文本及錯誤值單元格
*******************************************************
公式與函數
(126)Application.MacroOptions Macro:=”SumPro”,Category:=4 ‘將自定義的SumPro函數指定給Excel中的“統計函數”類別
(127)Application.MacroOptions Macro:=”SumPro”, _
Description:=”First Sum,then Product” ‘為自定義函數SumPro進行了功能說明
(128)Application.WorksheetFunction.CountA(Range(“A:A”))+1 ‘獲取A列的下一個空單元格(129)WorksheetFunction.CountA(Cell.EntireColumn)‘返回該單元格所在列非空單元格的數量 WorksheetFunction.CountA(Cell.EntireRow)‘返回該單元格所在行非空單元格的數量(130)WorksheetFunction.CountA(Cells)‘返回工作表中非空單元格數量
(131)ActiveSheet.Range(“A20:D20”).Formula=“=Sum(R*-19]C:R[-1+C”’對A列至D列前19個數值求和
*******************************************************
圖表
(132)ActiveWindow.Visible=False
或 ActiveChart.Deselect ‘使圖表處于非活動狀態
(133)TypeName(Selection)=”Chart” ‘若選中的為圖表,則該語句為真,否則為假
(134)ActiveSheet.ChartObjects.Delete ‘刪除工作表上所有的ChartObject對象
ActiveWorkbook.Charts.Delete ‘刪除當前工作簿中所有的圖表工作表
*******************************************************
窗體和控件
(135)UserForms.Add(MyForm).Show ‘添加用戶窗體MyForm并顯示
(136)TextName.SetFocus ‘設置文本框獲取輸入焦點
(137)SpinButton1.Value=0 ‘將數值調節鈕控件的值改為0
(138)TextBox1.Text=SpinButton1.Value ‘將數值調節鈕控件的值賦值給文本框控件
SpinButton1.value=“/Val(TextBox1.Text)” ‘將文本框控件值賦給數值調節鈕控件
CStr(SpinButton1.Value)=TextBox1.Text ‘數值調節鈕控件和文本框控件相比較
(139)UserForm1.Controls.Count ‘顯示窗體UserForm1上的控件數目
(140)ListBox1.AddItem “Command1” ‘在列表框中添加Command1
(141)ListBox1.ListIndex ‘返回列表框中條目的值,若為-1,則表明未選中任何列表框中的條目(142)RefEdit1.Text ‘返回代表單元格區域地址的文本字符串
RefEdit1.Text=ActiveWindow.RangeSelection.Address ‘初始化RefEdit控件顯示當前所選單元格區域
Set FirstCell=Range(RefEdit1.Text).Range(“A1”)‘設置某單元格區域左上角單元格
(143)Application.OnTime Now + TimeValue(“00:00:15”), “myProcedure” ‘等待15秒后運行myProcedure過程
(144)ActiveWindow.ScrollColumn=ScrollBarColumns.Value ‘將滾動條控件的值賦值給ActiveWindow對象的ScrollColumn屬性
ActiveWindow.ScrollRow=ScrollBarRows.Value ‘將滾動條控件的值賦值給ActiveWindow對象的ScrollRow屬性
(145)UserForm1.ListBox1.AddItem Sheets(“Sheet1”).Cells(1,1)‘將單元格A1中的數據添加到列表框中
ListBox1.List=Product ‘將一個名為Product數組的值添加到ListBox1中
ListBox1.RowSource=”Sheet2!SumP” ‘使用工作表Sheet2中的SumP區域的值填充列表框(146)ListBox1.Selected(0)‘選中列表框中的第一個條目(注:當列表框允許一次選中多個條目時,必須使用Selected屬性)
(147)ListBox1.RemoveItem ListBox1.ListIndex ‘移除列表框中選中的條目
*******************************************************
對象
Application對象
(148)Application.UserName ‘返回應用程序的用戶名
(149)Application.Caller ‘返回代表調用函數的單元格
(150)Application.Caller.Parent.Parent ‘返回調用函數的工作簿名稱
(151)Application.StatusBar=”請等待……” ‘將文本寫到狀態欄
Application.StatusBar=”請等待……” & Percent & “% Completed” ‘更新狀態欄文本,以變量Percent代表完成的百分比
Application.StatusBar=False ‘將狀態欄重新設置成正常狀態
(152)Application.Goto Reference:=Range(“A1:D4”)‘指定單元格區域A1至D4,等同于選擇“編輯——定位”,指定單元格區域為A1至D4,不會出現“定位”對話框
(153)Application.Dialogs(xlDialogFormulaGoto).Show ‘顯示“定位”對話框,但定位條件按鈕無效
(154)Application.Dialogs(xlDialogSelectSpecial).Show ‘顯示“定位條件”對話框
(155)Application.Dialogs(xlDialogFormatNumber).show ‘顯示“單元格格式”中的“數字”選項卡 Application.Dialogs(xlDialogAlignment).show ‘顯示“單元格格式”中的“對齊”選項卡
Application.Dialogs(xlDialogFontProperties).show ‘顯示“單元格格式”中的“字體”選項卡 Application.Dialogs(xlDialogBorder).show ‘顯示“單元格格式”中的“邊框”選項卡
Application.Dialogs(xlDialogPatterns).show ‘顯示“單元格格式”中的“圖案”選項卡
Application.Dialogs(xlDialogCellProtection).show ‘顯示“單元格格式”中的“保護”選項卡 注:無法一次顯示帶選項卡的“單元格格式”對話框,只能一次顯示一個選項卡。
(156)Application.Dialogs(xlDialogFormulaGoto).show Range(“b2”), True ‘顯示“引用位置”的默認單元格區域并顯示引用使其出現在窗口左上角(注:內置對話框參數的使用)
(157)Application.CommandBars(1).Controls(2).Controls(16).Execute ‘執行“定位”話框,相當于選擇菜單“編輯——定位”命令
(158)Application.Transpose(Array(“Sun”,”Mon”,”Tur”,”Wed”,”Thu”,”Fri”,”Sat”))‘返回一個垂直的數組
(159)Application.Version ‘返回使用的Excel版本號
(160)Application.Cursor = xlNorthwestArrow ‘設置光標形狀為北西向箭頭
Application.Cursor = xlIBeam ‘設置光標形狀為Ⅰ字形
Application.Cursor = xlWait ‘設置光標形狀為沙漏(等待)形
Application.Cursor = xlDefault ‘恢復光標的默認設置
(161)Application.WindowState ‘返回窗口當前的狀態
Application.WindowState = xlMinimized ‘窗口最小化
Application.WindowState = xlMaximized ‘窗口最大化
Application.WindowState = xlNormal ‘窗口正常狀態
(162)Application.UsableHeight ‘獲取當前窗口的高度
Application.UsableWidth ‘獲取當前窗口的寬度
(163)Application.ActiveCell.Address ‘返回活動單元格的地址(注:返回的是絕對地址)(164)Application.ActivePrinter ‘返回當前打印機的名稱
(165)Application.ActiveSheet.Name ‘返回活動工作表的名稱
(166)Application.ActiveWindow.Caption ‘返回活動窗口的標題
(167)Application.ActiveWorkbook.Name ‘返回活動工作簿的名稱
(168)Application.Selection.Address ‘返回所選區域的地址
(169)Application.ThisWorkbook.Name ‘返回當前工作簿的名稱
(170)Application.CalculationVersion ‘返回Excel計算引擎版本(右邊四位數字)及Excel版本(左邊兩位數字)
(171)Application.MemoryFree ‘以字節為單位返回Excel允許使用的內存數(不包括已經使用的內存)
(172)Application.MemoryUsed ‘以字節為單位返回Excel當前使用的內存數
(173)Application.MemoryTotal ‘以字節為單位返回Excel可以使用的內存數(包括已使用的內存,是MemoryFree和MemoryUsed的總和)
(174)Application.OperatingSystem ‘返回所使用的操作系統的名稱和版本
(175)Application.OrganizationName ‘返回Excel產品登記使用的組織機構的名稱
(176)Application.FindFormat ‘查找的格式種類
Application.ReplaceFormat ‘替換查找到的內容的格式種類
ActiveSheet.Cells.Replace What:=” “, _
Replacement:=” “,SearchFormat:=True,ReplaceFormat:=True ‘替換查找到的格式
(177)Application.Interactive=False ‘忽略鍵盤或鼠標的輸入
(178)Application.Evaluate(“Rate”)‘若在工作表中定義了常量0.06的名稱為”Rate”,則本語句將返回值0.06
(179)Application.OnUndo “Undo Option”,“Undo Procedure” ‘選擇UndoOption后,將執行Undo Procedure過程
*******************************************************
Range對象
(180)Range(A1:A10).value=“/Application.WorksheetFunction.Transpose(MyArray)” ‘將一個含有10個元素的數組轉置成垂直方向的工作表單元格區域(A1至A10)
注:因為當把一維數組的內容傳遞給某個單元格區域時,該單元格區域中的單元格必須是水平方向的,即含有多列的一行。若必須使用垂直方向的單元格區域,則必須先將數組進行轉置,成為垂直的。
(181)Range(“A65536”).End(xlUp).Row+1 ‘返回A列最后一行的下一行
(182)rng.Range(“A1”)‘返回區域左上角的單元格
(183)cell.Parent.Parent.Worksheets ‘訪問當前單元格所在的工作簿
(184)Selection.Font.Bold=Not Selection.Font.Bold ‘切換所選單元格是否加粗
(185)ActiveSheet.Range(“A:B”).Sort Key1:=Columns(“B”), Key2:=Columns(“A”), _
Header:=xlYes ‘兩個關鍵字排序,相鄰兩列,B列為主關鍵字,A列為次關鍵字,升序排列(186)cell.Range(“A1”).NumberFormat ‘顯示單元格或單元格區域中的第一個單元格的數字格式
(187)cell.Range(“A1”).HasFormula ‘檢查單元格或單元格區域中的第一個單元格是否含有公式 或cell.HasFormula ‘工作表中單元格是否含有公式
(188)Cell.EntireColumn ‘單元格所在的整列
Cell.EntireRow ‘單元格所在的整行
(189)rng.Name.Name ‘顯示rng區域的名稱
(190)rng.Address ‘返回rng區域的地址
(191)cell.Range(“A1”).Formula ‘返回包含在rng區域中左上角單元格中的公式。
注:若在一個由多個單元格組成的范圍內使用Formula屬性,會得到錯誤;若單元格中沒有公式,會得到一個字符串,在公式欄中顯示該單元格的值。
(192)Range(“D5:D10”).Cells(1,1)‘返回單元格區域D5:D10中左上角單元格
(193)ActiveCell.Row ‘活動單元格所在的行數
ActiveCell.Column ‘活動單元格所在的列數
(194)Range(“A1:B1”).HorizontalAlignment = xlLeft ‘當前工作表中的單元格區域數據設置為左對齊
(195)ActiveSheet.Range(“A2:A10”).NumberFormat=”#,##0” ‘設置單元格區域A2至A10中數值格式
(196)rng.Replace “ “,”0” ‘用0替換單元格區域中的空單元格
*******************************************************
Collection與object
(197)Dim colMySheets As New Collection
Public colMySheets As New Collection ‘聲明新的集合變量
(198)Set MyRange=Range(“A1:A5”)‘創建一個名為MyRange的對象變量
(199)
第三篇:Excel VBA常用代碼總結1
Excel VBA常用代碼總結1?
改變背景色
Range(“A1”).Interior.ColorIndex = xlNone ColorIndex一覽
? ? 改變文字顏色 獲取單元格 Range(“A1”).Font.ColorIndex = 1 Cells(1, 2)Range(“H7”)? 獲取范圍
Range(Cells(2, 3), Cells(4, 5))Range(“a1:c3”)'用快捷記號引用單元格
Worksheets(“Sheet1”).[A1:B5] ? 選中某sheet SetNewSheet = Sheets(“sheet1”)NewSheet.Select ? 選中或激活某單元格
'“Range”對象的的Select方法可以選擇一個或多個單元格,而Activate方法可以指定某一個單元格為活動單元格。
'下面的代碼首先選擇A1:E10區域,同時激活D4單元格: Range(“a1:e10”).Select Range(“d4:e5”).Activate '而對于下面的代碼: Range(“a1:e10”).Select Range(“f11:g15”).Activate '由于區域A1:E10和F11:G15沒有公共區域,將最終選擇F11:G15,并激活F11單元格。
? 獲得文檔的路徑和文件名
ActiveWorkbook.Path
'路徑 ActiveWorkbook.Name
'名稱
ActiveWorkbook.FullName '路徑+名稱 '或將ActiveWorkbook換成thisworkbook
? ? ? ? 隱藏文檔 禁止屏幕更新
禁止顯示提示和警告消息 文件夾做成 Application.Visible = False Application.ScreenUpdating = False Application.DisplayAlerts = False strPath = “C:temp” MkDirstrPath ? ? 狀態欄文字表示 雙擊單元格內容變換 Application.StatusBar = “計算中”
PrivateSubWorksheet_BeforeDoubleClick(ByVal Target As Range, Cancel AsBoolean)If(Target.Cells.Row>= 5AndTarget.Cells.Row<= 8)Then IfTarget.Cells.Value = “●”Then Target.Cells.Value = “" Else
Target.Cells.Value = ”●“ EndIf
Cancel = True EndIf End Sub
? 文件夾選擇框方法1
SetobjShell = CreateObject(”Shell.Application“)SetobjFolder = objShell.BrowseForFolder(0, ”文件“, 0, 0)IfNotobjFolderIsNothing
Then path= objFolder.self.Path&”“ endif SetobjFolder = Nothing SetobjShell = Nothing
? 文件夾選擇框方法2(推薦)
PublicFunctionChooseFolder()AsString DimdlgOpenAsFileDialog SetdlgOpen = Application.FileDialog(msoFileDialogFolderPicker)WithdlgOpen.InitialFileName = ThisWorkbook.path&”“ If.Show =-1Then
ChooseFolder =.SelectedItems(1)EndIf EndWith
SetdlgOpen = Nothing End Function
'使用方法例:
Dim path AsString path = ChooseFolder()If path <>”“Then MsgBox”open folder“ EndIf
? 文件選擇框方法
PublicFunctionChooseOneFile(OptionalTitleStrAsString = ”Please choose a file“, OptionalTypesDecAsString = ”*.*“, OptionalExtenAsString = ”*.*“)AsString
DimdlgOpenAsFileDialog SetdlgOpen = Application.FileDialog(msoFileDialogFilePicker)WithdlgOpen.Title = TitleStr.Filters.Clear.Filters.AddTypesDec, Exten.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path If.Show =-1Then
'.AllowMultiSelect = True ' For Each vrtSelectedItemIn.SelectedItems ' MsgBox ”Path name: “ &vrtSelectedItem ' Next vrtSelectedItem
ChooseOneFile =.SelectedItems(1)EndIf EndWith
SetdlgOpen = Nothing End Function
? 某列到關鍵字為止循環方法1(假設關鍵字是end)SetCurrentCell = Range(”A1“)DoWhileCurrentCell.Value<>”end“ ??
SetCurrentCell = CurrentCell.Offset(1, 0)Loop
? 某列到關鍵字為止循環方法2(假設關鍵字是空字符串)i = StartRow DoWhileCells(i, 1)<>”“ ??
i = i + 1 Loop
? ”For Each...Next 循環(知道確切邊界)ForEach c InWorksheets(“Sheet1”).Range(“A1:D10”).Cells
IfAbs(c.Value)<0.01Thenc.Value = 0 Next
? “For Each...Next 循環(不知道確切邊界),在活動單元格周圍的區域內循環
ForEach c InActiveCell.CurrentRegion.Cells IfAbs(c.Value)<0.01Thenc.Value = 0 Next
? 某列有數據的最末行的行數的取得(中間不能有空行)lonRow=1
DoWhileTrim(Cells(lonRow, 2).Value)<>”“ lonRow = lonRow + 1 Loop
lonRow11 = lonRow1164)比如i=A的時候,Asc(it >= num * 1000 DoEvents Loop End Sub
'***************************************************************
使用方法: delay 3'3表示秒數
? 殺掉某程序執行的所有進程
SubKillWord()
Dim Process
ForEach Process InGetObject(”winmgmts:“).ExecQuery(”select * from Win32_Process where name='WINWORD.EXE'“)Process.Terminate(0)Next
End Sub
? 監視某單元格的變化
這里最需要注意的問題就是,如果在這個事件里對單元格進行改變,會繼續出發此事件變成死循環。
所以要在對單元格進行變化之前加上Application.EnableEvents = False,變完之后再改為True。
PrivateSubWorksheet_Change(ByVal Target As Range)OnErrorGoTo Err Application.EnableEvents = False Dim c SetdicKtoW = SetDic(ThisWorkbook.Sheets(”reference“), 3, 1, 2)SetdicKtoX = SetDic(ThisWorkbook.Sheets(”reference“), 3, 1, 3)ForEach c In Target Ifc.Column = 11Then 'MsgBoxc.Value
Me.Range(”W“&c.Row).Value = GetDic(dicKtoW, c.Value)Me.Range(”X“&c.Row).Value = GetDic(dicKtoX, c.Value)EndIf Next SetdicKtoW = Nothing SetdicKtoX = Nothing
Application.EnableEvents = True Exit Sub Err: MsgBox(”Error!Please contact macro developer.“)Application.EnableEvents = True End Sub
? On Error的用法
1.一般用法
OnErrorGoTo Label 各種代碼 exit sub Label: msgboxErr.Description 其他錯誤處理
2.對于某段代碼單獨處理 OnErrorResumeNext 需要監視的代碼
IfErr.Number<>0Then MsgBoxErr.Description EndIf
OnErrorGoTo0
3.上述兩種的結合 OnErrorResumeNext 需要監視的代碼
IfErr.Number<>0Then MsgBoxErr.Description Goto Label EndIf
OnErrorGoTo0 exit sub Label: 其他錯誤處理
? EXCEL的分組功能和展開收縮功能
'將A列到C列進行分組
Range(”A:C“).Columns.Group
'默認情況下,分組后的A到C列會是展開狀態,如果想讓A到C列收縮 Range(”A:C").EntireColumn.Hidden=True
第四篇:實用的EXCEL VBA編程總結
實用的EXCEL VBA編程小結:
最近單位內部的項目里要用到些報表EXCEL的生成,雖說JAVA 的POI可以有這能力,但覺得還是可能比較麻煩,因此還是轉用.net來搞,用Visual Studio2003配合office 2003,用到了一些VBA,因此小結并歸納之,選了些資料歸納在這里,以備今后查考
首先創建 Excel 對象,使用ComObj:
Dim ExcelID as Excel.Application
Set ExcelID as new Excel.Application
1)顯示當前窗口:
ExcelID.Visible := True;
2)更改 Excel 標題欄:
ExcelID.Caption := '應用程序調用 Microsoft Excel';
3)添加新工作簿:
ExcelID.WorkBooks.Add;
4)打開已存在的工作簿:
ExcelID.WorkBooks.Open('C:¥Excel¥Demo.xls');
5)設置第2個工作表為活動工作表:
ExcelID.WorkSheets[2].Activate;
或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;
6)給單元格賦值:
ExcelID.Cells[1,4].Value := '第一行第四列';
7)設置指定列的寬度(單位:字符個數),以第一列為例:
ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
8)設置指定行的高度(單位:磅)(1磅=0.035厘米),以第二行為例:
ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035;// 1厘米
9)在第8行之前插入分頁符:
ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
10)在第8列之前刪除分頁符:
ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
11)指定邊框線寬度:
ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-頂 4-底 5-斜(¥)6-斜(/)
12)清除第一行第四列單元格公式:
ExcelID.ActiveSheet.Cells[1,4].ClearContents;
13)設置第一行字體屬性:
ExcelID.ActiveSheet.Rows[1].Font.Name := '隸書';
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
14)進行頁面設置:
a.頁眉:
ExcelID.ActiveSheet.PageSetup.CenterHeader := '報表演示';b.頁腳:
ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P頁';
c.頁眉到頂端邊距2cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.頁腳到底端邊距3cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.頂邊距2cm:
ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底邊距2cm:
ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左邊距2cm:
ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右邊距2cm:
ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.頁面水平居中:
ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.頁面垂直居中:
ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印單元格網線:
ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
15)拷貝操作:
a.拷貝整個工作表:
ExcelID.ActiveSheet.Used.Range.Copy;
b.拷貝指定區域:
ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.從A1位置開始粘貼:
ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.從文件尾部開始粘貼:
ExcelID.ActiveSheet.Range.PasteSpecial;
16)插入一行或一列:
a.ExcelID.ActiveSheet.Rows[2].Insert;
b.ExcelID.ActiveSheet.Columns[1].Insert;
17)刪除一行或一列:
a.ExcelID.ActiveSheet.Rows[2].Delete;
b.ExcelID.ActiveSheet.Columns[1].Delete;
18)打印預覽工作表:
ExcelID.ActiveSheet.PrintPreview;
19)打印輸出工作表:
ExcelID.ActiveSheet.PrintOut;
20)工作表保存:
If not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview End if
21)工作表另存為:
ExcelID.SaveAs('C:¥Excel¥Demo1.xls');
22)放棄存盤:
ExcelID.ActiveWorkBook.Saved := True;
23)關閉工作簿:
ExcelID.WorkBooks.Close;
24)退出 Excel:
ExcelID.Quit;
25)設置工作表密碼:
ExcelID.ActiveSheet.Protect “123”, DrawingObjects:=True, Contents:=True, Scenarios:=True
26)EXCEL的顯示方式為最大化
ExcelID.Application.WindowState = xlMaximized
27)工作薄顯示方式為最大化
ExcelID.ActiveWindow.WindowState = xlMaximized
28)設置打開默認工作薄數量
ExcelID.SheetsInNewWorkbook = 3
29)'關閉時是否提示保存(true 保存;false 不保存)
ExcelID.DisplayAlerts = False
30)設置拆分窗口,及固定行位置
ExcelID.ActiveWindow.SplitRow = 1
ExcelID.ActiveWindow.FreezePanes = True
31)設置打印時固定打印內容
ExcelID.ActiveSheet.PageSetup.PrintTitleRows = “$1:$1”
32)設置打印標題
ExcelID.ActiveSheet.PageSetup.PrintTitleColumns = “"
33)設置顯示方式(分頁方式顯示)
ExcelID.ActiveWindow.View = xlPageBreakPreview
34)設置顯示比例
ExcelID.ActiveWindow.Zoom = 100
35)讓Excel 響應 DDE 請求
Ex.Application.IgnoreRemoteRequests = False
用VB操作EXCEL
Private Sub Command3_Click()
On Error GoTo err1
Dim i As Long
Dim j As Long
Dim objExl As Excel.Application '聲明對象變量
Me.MousePointer = 11 '改變鼠標樣式
Set objExl = New Excel.Application '初始化對象變量
objExl.SheetsInNewWorkbook = 1 '將新建的工作薄數量設為1
objExl.Workbooks.Add '增加一個工作薄
objExl.Sheets(objExl.Sheets.Count).Name = ”book1“ '修改工作薄名稱
objExl.Sheets.Add , objExl.Sheets(”book1“)‘增加第二個工作薄在第一個之后
objExl.Sheets(objExl.Sheets.Count).Name = ”book2“
objExl.Sheets.Add , objExl.Sheets(”book2“)‘增加第三個工作薄在第二個之后
objExl.Sheets(objExl.Sheets.Count).Name = ”book3“
objExl.Sheets(”book1“).Select '選中工作薄
For i = 1 To 50 '循環寫入數據
For j = 1 To 5
If i = 1 Then
objExl.Selection.NumberFormatLocal = ”@“ '設置格式為文本
objExl.Cells(i, j)= ” E “ & i & j Else
objExl.Cells(i, j)= i & j End If Next Next
objExl.Rows(”1:1“).Select '選中第一行
objExl.Selection.Font.Bold = True '設為粗體
objExl.Selection.Font.Size = 24 '設置字體大小
objExl.Cells.EntireColumn.AutoFit '自動調整列寬
objExl.ActiveWindow.SplitRow = 1 '拆分第一行
objExl.ActiveWindow.SplitColumn = 0 '拆分列
objExl.ActiveWindow.FreezePanes = True '固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = ”$1:$1“ '設置打印固定行
objExl.ActiveSheet.PageSetup.PrintTitleColumns
=
”“
'objExl.ActiveSheet.PageSetup.RightFooter = ”打印時間: “ & _
Format(Now, ”yyyy年mm月dd日 hh:MM:ss“)
objExl.ActiveWindow.View = xlPageBreakPreview '設置顯示方式
objExl.ActiveWindow.Zoom = 100 '設置顯示大小
'給工作表加密碼
objExl.ActiveSheet.Protect ”123", DrawingObjects:=True, _
Contents:=True, Scenarios:=True
objExl.Application.IgnoreRemoteRequests = False
objExl.Visible = True '使EXCEL可見
objExl.Application.WindowState = xlMaximized 'EXCEL的顯示方式為最大化
objExl.ActiveWindow.WindowState = xlMaximized '工作薄顯示方式為最大化
objExl.SheetsInNewWorkbook = 3 '將默認新工作薄數量改回3個
Set objExl = Nothing '清除對象
Me.MousePointer = 0 '修改鼠標
打
印
標
題 Exit Sub err1:
objExl.SheetsInNewWorkbook = 3
objExl.DisplayAlerts = False '關閉時不提示保存
objExl.Quit '關閉EXCEL
objExl.DisplayAlerts = True '關閉時提示保存
Set objExl = Nothing
Me.MousePointer = 0 End Sub
第五篇:vba自定義函數小結
小結:
函數參數前面標記byval,實現的是實參與形參之間的值傳遞,即形參具有了實參的值或者說建立了一個實參的副本給了形參,這樣對形參的操作不會影響實參;
函數參數前面標記byref,實現的是實參與形參之間的引用傳遞,這樣對形參的操作會影響實參,或者說對形參的操作等同于對實參的操作;
在函數內部使用“r=形參”,實現的是把形參的副本給r,在函數中對r操作不會影像形參,如果使用“set r=形參”,那么對r的操作會影響形參,這里實現的效果是r只是形參的一個別名而已,所以對r的操作等同于對形參的操作。
在函數中形參前面不標記byref和byval,默認是引用傳遞byref,但是這種情況下如果實參是excel中worksheet的range區域,則默認是值傳遞。
有時調試結果不符合預期,比如值傳遞,對””r=形參”中的r操作,居然影響形參了,這可能是由于excel一時程序錯亂導致,關閉重啟就好了。
Public Function tjbcf(rng)
r = rng
'Set r = rng'注意帶著set是錯誤的 k = 0 If UBound(r, 1)> 1 And UBound(r, 2)= 1 Then For i = 1 To UBound(r, 1)f = 0 For j = 1 To i1 If r(1, i)= r(1, j)Then f = 1 Exit For End If Next j If f = 0 And r(1, i)<> “" Then k = k + 1 End If Next i End If
If UBound(r, 1)> 1 And UBound(r, 2)> 1 Then For i = 1 To UBound(r, 1)For j = 1 To UBound(r, 2)If r(i, j)= ”“ Then f = 1 GoTo kk End If f = 0 For m = 1 To i1 If r(i, j)= r(i, n)Then f = 1 GoTo kk End If Next n kk: If f = 0 Then k = k + 1 End If Next j Next i End If
tjbcf = k
End Function
Public Function getnum(str, m)ss = ”“ For i = m To Len(str)If InStr(”0123456789.“, Mid(str, i, 1))<> 0 Then ss = ss & Mid(str, i, 1)Else GoTo kk End If Next i kk: getnum = Val(ss)'注意是val不是value,在sheet中是value函數,在vb中則是val函數 End Function Public Function getnum2(str, m)ss = ”“ f = 0 For i = m To Len(str)If InStr(”0123456789.“, Mid(str, i, 1))<> 0 Then ss = ss & Mid(str, i, 1)Else If f = 1 And ss <> ”“ Then GoTo kk End If f = 1 End If Next i kk: getnum2 = Val(ss)End Function
Public Function NewMmult(a, b)
a1 = a
'把range a的值賦給a1,a是幾行幾列的range,a1就是 幾行幾列的數組。注意a1是一個variant數組,即a1中的不同元素可以屬性不同,a1中某個元素是字符,另一個可以是整數。
b1 = b
'把range b的值賦給b1 For i = 1 To UBound(a1, 1)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 For j = 1 To UBound(a1, 2)
' UBound(a1, 2)指的是數組a1第2維度的大小,即a1的列數 If a1(i, j)= ”“ Then
'判斷a1(i,j)是不是空白,如果是,那就賦0值。a1(i, j)= 0 End If Next j Next i
For i = 1 To UBound(b1, 1)For j = 1 To UBound(b1, 2)If b1(i, j)= ”“ Then b1(i, j)= 0 End If Next j Next i
NewMmult = Application.MMult(a1, b1)
End Function
Public Function sim(str1, str2)
If Len(str2)= 0 Then
sim = 0
GoTo kk
End If
sim = 0
For i = 1 To Len(str2)
If InStr(str1, Mid(str2, i, 1))<> 0 Then
sim = sim + 1
End If
Next i
sim = sim / Len(str2)kk: End Function Public Function sima(ByVal str1, ByVal str2)
If Len(str2)= 0 Then
sima = 0
GoTo kk
End If
sima = 0
l = Len(str2)
For i = 1 To Len(str2)
If InStr(str1, Mid(str2, i, 1))<> 0 Then
sima = sima + 1
str1 = Application.WorksheetFunction.Substitute(str1, Mid(str2, i, 1), ”“, 1)
End If
Next i
sima = sima / l kk: End Function
Public Function mcc(rng, rng1, str1, Optional rng2 = ”“, Optional str2, Optional rng3 = ”“, Optional str3, Optional rng4 = ”“, Optional str4, Optional rng5 = ”“, Optional str5)r = rng r1 = rng1 r2 = rng2 r3 = rng3 r4 = rng4 r5 = rng5 mcc = ”“
If Application.CountA(rng2)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(i, 1)= str1)Then mcc = r(i, 1)GoTo kk End If Next i End If
If Application.CountA(rng3)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2)Then mcc = r(i, 1)GoTo kk End If Next i End If
If Application.CountA(rng4)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2, r3(i, 1)= str3)Then mcc = r(i, 1)GoTo kk End If Next i End If
If Application.CountA(rng5)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2, r3(i, 1)= str3, r4(i, 1)= str4)Then mcc = r(i, 1)GoTo kk End If Next i End If
For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2, r3(i, 1)= str3, r4(i, 1)= str4, r5(i, 1)= str5)Then mcc = r(i, 1)GoTo kk End If Next i
kk: End Function
Public Function mccd(rng, rng1, str1, Optional rng2 = ”“, Optional str2, Optional rng3 = ”“, Optional str3, Optional rng4 = ”“, Optional str4, Optional rng5 = ”“, Optional str5)
r = rng r1 = rng1 r2 = rng2 r3 = rng3 r4 = rng4 r5 = rng5 mccd = ”"
If Application.CountA(rng2)= 1 Then
For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(1, i)= str1)Then
mccd = r(1, i)GoTo kk End If Next i End If
If Application.CountA(rng3)= 1 Then For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2)Then mccd = r(1, i)GoTo kk End If Next i End If
If Application.CountA(rng4)= 1 Then For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2, r3(1, i)= str3)Then mccd = r(1, i)GoTo kk End If Next i End If
If Application.CountA(rng5)= 1 Then For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2, r3(1, i)= str3, r4(1, i)= str4)Then mccd = r(1, i)GoTo kk End If Next i End If
For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是數組a1第1維度的大小,即a1的行數 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2, r3(1, i)= str3, r4(1, i)= str4, r5(1, i)= str5)Then mccd = r(1, i)GoTo kk End If Next i
kk: End Function
Public Function nsim(str, rng)'r1 = rng 'r2 = rng 'str1 = str 'str2 = str
v = sima(str, r(1, 1))+ sima(r(1, 1), str2)'str1 = str
‘這里不再需要賦值,因為sima設置的是值傳遞byval,sima調用實參str和r(1,1)不影響實參。'str2 = str k = 1 For i = 2 To UBound(r, 1)m =(sima(str, r(i, 1))+ sima(r(i, 1), str))'str1 = str 'str2 = str If v < m Then k = i v = m End If Next i nsim = r(k, 1)End Function