版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-宏編碼

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

簡(jiǎn)介

宏編碼,即實(shí)現(xiàn)宏的代碼。所謂宏,就是一些命令組織在一起,作為一個(gè)單獨(dú)命令完成一個(gè)特定任務(wù)。

MicrosoftWord中對(duì)宏定義為:“宏就是能組織到一起作為一獨(dú)立的命令使用的一系列word命令,它能使日常工作變得更容易”。Word使用宏語(yǔ)言VisualBasic將宏作為一系列指令來(lái)編寫(xiě)。

計(jì)算機(jī)科學(xué)里的宏是一種抽象的,根據(jù)一系列預(yù)定義的規(guī)則替換一定的文本模式。Excel辦公軟件自動(dòng)集成了“VBA”高級(jí)程序語(yǔ)言,用此語(yǔ)言編制出的程序可認(rèn)為是一種宏編碼。

宏語(yǔ)言宏語(yǔ)言是一類編程語(yǔ)言,其全部或多數(shù)計(jì)算是由擴(kuò)展宏完成的。宏語(yǔ)言并未在通用編程中廣泛使用,但在文本處理程序中應(yīng)用普遍。

①宏定義

c程序提供的預(yù)處理功能之一。包括帶參數(shù)的宏定義和不帶參數(shù)的宏定義。具體是指用一個(gè)指定的標(biāo)志符來(lái)進(jìn)行簡(jiǎn)單的字符串替換或者進(jìn)行闡述替換。形式為:
#define標(biāo)志符[(參數(shù)表)]字符串

②宏名

在上定義中的標(biāo)志符被稱為“宏名”。

③宏展開(kāi)

在c程序編譯時(shí)將宏名替換成字符串的過(guò)程稱為“宏展開(kāi)”。

常用EXCEL編碼舉例1.本示例為設(shè)置密碼窗口
If Application.InputBox("請(qǐng)輸入密碼:") = 1234 Then
[A1] = 1 '密碼正確時(shí)執(zhí)行
Else: MsgBox "密碼錯(cuò)誤,即將退出!" '此行與第2行共同設(shè)置密碼
End If
2.本示例為設(shè)置工作表密碼
ActiveSheet.Protect Password:=641112 ' 保護(hù)工作表并設(shè)置密碼
ActiveSheet.Unprotect Password:=641112 '撤消工作表保護(hù)并取消密碼
3.本示例關(guān)閉除正在運(yùn)行本示例的工作簿以外的其他所有工作簿,并保存其更改內(nèi)容
For Each w In Workbooks
If w.Name ThisWorkbook.Name Then
w.Close SaveChanges:=True
End If
Next w
4.每次打開(kāi)工作簿時(shí),本示例都最大化 Microsoft Excel 窗口
Application.WindowState = xlMaximized
5.本示例顯示活動(dòng)工作表的名稱
MsgBox "The name of the active sheet is " & ActiveSheet.Name
6.本示例保存當(dāng)前活動(dòng)工作簿的副本
ActiveWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS"
7.下述過(guò)程激活工作簿中的第四張工作表
Sheets(4).Activate
8.下述過(guò)程激活工作簿中的第1張工作表
Worksheets(1).Activate
9.本示例通過(guò)將 Saved 屬性設(shè)為 True 來(lái)關(guān)閉包含本段代碼的工作簿,并放棄對(duì)該工作簿的任何更改
ThisWorkbook.Saved = True
ThisWorkbook.Close
10.本示例對(duì)自動(dòng)重新計(jì)算功能進(jìn)行設(shè)置,使 Microsoft Excel 不對(duì)第一張工作表自動(dòng)進(jìn)行重新計(jì)算
Worksheets(1).EnableCalculation = False
11.下述過(guò)程打開(kāi) C 盤(pán)上名為 MyFolder 的文件夾中的 MyBook.xls 工作簿
Workbooks.Open ("C:\MyFolder\MyBook.xls")
12.本示例顯示活動(dòng)工作簿中工作表 sheet1 上單元格 A1 中的值
MsgBox Worksheets("Sheet1").Range("A1").Value
13.本示例顯示活動(dòng)工作簿中每個(gè)工作表的名稱
For Each ws In Worksheets
MsgBox ws.Name
Next ws
14.本示例向活動(dòng)工作簿添加新工作表 , 并設(shè)置該工作表的名稱
Set NewSheet = Worksheets.Add
NewSheet.Name = "current Budget"
15.本示例將新建的工作表移到工作簿的末尾
'Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Move After:=Sheets(Sheets.Count)
End Sub
16.本示例將新建工作表移到工作簿的末尾
'Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, _
ByVal Sh As Object)
Sh.Move After:=Wb.Sheets(Wb.Sheets.Count)
End Sub
17.本示例新建一張工作表,然后在第一列中列出活動(dòng)工作簿中的所有工作表的名稱
Set NewSheet = Sheets.Add(Type:=xlWorksheet)
For i = 1 To Sheets.Count
NewSheet.Cells(i, 1).Value = Sheets(i).Name
Next i
18.本示例將第十行移到窗口的最上面
Worksheets("Sheet1").Activate
ActiveWindow.ScrollRow = 10
19.當(dāng)計(jì)算工作簿中的任何工作表時(shí),本示例對(duì)第一張工作表的 A1:A100 區(qū)域進(jìn)行排序
'Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Worksheets(1)
.Range("a1:a100").Sort Key1:=.Range("a1")
End With
End Sub
20.本示例顯示工作表 Sheet1 的打印預(yù)覽
Worksheets("Sheet1").PrintPreview
21.本示例保存當(dāng)前活動(dòng)工作簿
ActiveWorkbook.Save
22.本示例保存所有打開(kāi)的工作簿,然后關(guān)閉 Microsoft Excel
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
23.下例在活動(dòng)工作簿的第一張工作表前面添加兩張新的工作表
Worksheets.Add Count:=2, Before:=Sheets(1)
24.本示例設(shè)置 15 秒后運(yùn)行 my_Procedure 過(guò)程,從現(xiàn)在開(kāi)始計(jì)時(shí)
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
25.本示例設(shè)置 my_Procedure 在下午 5 點(diǎn)開(kāi)始運(yùn)行
Application.OnTime TimeValue("17:00:00"), "my_Procedure"
26.本示例撤消前一個(gè)示例對(duì) OnTime 的設(shè)置
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="my_Procedure", Schedule:=False
27.每當(dāng)工作表重新計(jì)算時(shí),本示例就調(diào)整 A 列到 F 列的寬度
'Private Sub Worksheet_Calculate()
Columns("A:F").AutoFit
End Sub
28.本示例使活動(dòng)工作簿中的計(jì)算僅使用顯示的數(shù)字精度
ActiveWorkbook.PrecisionAsDisplayed = True
29.本示例將工作表 Sheet1 上的 A1:G37 區(qū)域剪下,并放入剪貼板
Worksheets("Sheet1").Range("A1:G37").Cut
更多詳見(jiàn)參考。1

Word中的代碼編寫(xiě)行號(hào)首先需要?jiǎng)?chuàng)建一個(gè)宏,如何來(lái)做呢?以Word 2010為例,在工具欄中,選擇“視圖”,點(diǎn)擊“宏”,如下圖所示。2

然后點(diǎn)擊【查看宏】:

在彈出的對(duì)話框中,點(diǎn)擊【創(chuàng)建】。

在VBA的代碼區(qū)寫(xiě)下如下代碼:

Sub HangHao()Dim parag As ParagraphDim nLineNum: nLineNum = 0Dim selRge As RangeSet selRge = Selection.RangeFor Each parag In Selection.ParagraphsnLineNum = nLineNum + 1selRge.Paragraphs(nLineNum).Range.InsertBefore (Format$(nLineNum, "00") & " ")NextEnd Sub寫(xiě)完后,點(diǎn)擊保存,退出VBA代碼區(qū)。

為了經(jīng)常能用到這個(gè)宏,我們就需要在Word【文件】->【選項(xiàng)】中,找到【快速訪問(wèn)工具欄】,把這個(gè)宏取個(gè)好聽(tīng)的名稱,并配一個(gè)圖標(biāo),最后,它就乖乖滴出現(xiàn)在快速啟動(dòng)欄中。過(guò)程如下圖所示。

實(shí)驗(yàn)前,原始代碼是沒(méi)有行號(hào)的:

點(diǎn)擊自己設(shè)計(jì)的宏圖標(biāo),使用宏后的效果如下: