Excel-VBA常用宏应用技巧Excel-常用宏技巧本示例为设置密码窗口(1)IfApplication.InputBox(请输入密码:)=1234Then[A1]=1'密码正确时执行Else:MsgBox密码错误,即将退出!'此行与第2行共同设置密码EndIf本示例为设置密码窗口(1)X=MsgBox(是否真的要结帐?,vbYesNo)IfX=vbYesThenClose本示例为设置工作表密码ActiveSheet.ProtectPassword:=641112'保护工作表并设置密码ActiveSheet.UnprotectPassword:=641112'撤消工作表保护并取消密码'本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。ForEachwInWorkbooksIfw.NameThisWorkbook.NameThenw.CloseSaveChanges:=TrueEndIfNextw'每次打开工作簿时,本示例都最大化MicrosoftExcel窗口。Application.WindowState=xlMaximized'本示例显示活动工作表的名称。MsgBoxThenameoftheactivesheetis&ActiveSheet.Name'本示例保存当前活动工作簿的副本。ActiveWorkbook.SaveCopyAsC:\TEMP\XXXX.XLS'下述过程激活工作簿中的第四张工作表。Sheets(4).Activate'下述过程激活工作簿中的第1张工作表。Worksheets(1).Activate'本示例通过将Saved属性设为True来关闭包含本段代码的工作簿,并放弃对该工作簿的任何更改。ThisWorkbook.Saved=TrueThisWorkbook.Close'本示例对自动重新计算功能进行设置,使MicrosoftExcel不对第一张工作表自动进行重新计算。Worksheets(1).EnableCalculation=False'下述过程打开C盘上名为MyFolder的文件夹中的MyBook.xls工作簿。Workbooks.Open(C:\MyFolder\MyBook.xls)'本示例显示活动工作簿中工作表sheet1上单元格A1中的值。MsgBoxWorksheets(Sheet1).Range(A1).Value本示例显示活动工作簿中每个工作表的名称ForEachwsInWorksheetsMsgBoxws.NameNextws本示例向活动工作簿添加新工作表,并设置该工作表的名称?SetNewSheet=Worksheets.AddNewSheet.Name=currentBudget本示例将新建的工作表移到工作簿的末尾'PrivateSubWorkbook_NewSheet(ByValShAsObject)Sh.MoveAfter:=Sheets(Sheets.Count)EndSub本示例将新建工作表移到工作簿的末尾'PrivateSubApp_WorkbookNewSheet(ByValWbAsWorkbook,_ByValShAsObject)Sh.MoveAfter:=Wb.Sheets(Wb.Sheets.Count)EndSub本示例新建一张工作表,然后在第一列中列出活动工作簿中的所有工作表的名称。SetNewSheet=Sheets.Add(Type:=xlWorksheet)Fori=1ToSheets.CountNewSheet.Cells(i,1).Value=Sheets(i).NameNexti本示例将第十行移到窗口的最上面?Worksheets(Sheet1).ActivateActiveWindow.ScrollRow=10当计算工作簿中的任何工作表时,本示例对第一张工作表的A1:A100区域进行排序。'PrivateSubWorkbook_SheetCalculate(ByValShAsObject)WithWorksheets(1).Range(a1:a100).SortKey1:=.Range(a1)EndWithEndSub本示例显示工作表Sheet1的打印预览。Worksheets(Sheet1).PrintPreview本示例保存当前活动工作簿?ActiveWorkbook.Save本示例保存所有打开的工作簿,然后关闭MicrosoftExcel。ForEachwInApplication.Workbooksw.SaveNextwApplication.Quit下例在活动工作簿的第一张工作表前面添加两张新的工作表?Worksheets.AddCount:=2,Before:=Sheets(1)本示例设置15秒后运行my_Procedure过程,从现在开始计时。Application.OnTimeNow+TimeValue(00:00:15),my_Procedure本示例设置my_Procedure在下午5点开始运行。Application.OnTimeTimeValue(17:00:00),my_Procedure本示例撤消前一个示例对OnTime的设置。Application.OnTimeEarliestTime:=TimeValue(17:00:00),_Procedure:=my_Procedure,Schedule:=False每当工作表重新计算时,本示例就调整A列到F列的宽度。'PrivateSubWorksheet_Calculate()Columns(A:F).AutoFitEndSub本示例使活动工作簿中的计算仅使用显示的数字精度。ActiveWorkbook.PrecisionAsDisplayed=True本示例将工作表Sheet1上的A1:G37区域剪下,并放入剪贴板。Worksheets(Sheet1).Range(A1:G37).CutCalculate方法计算所有打开的工作簿、工作簿中的一张特定的工作表或者工作表中指定区域的单元格,如下表所示:'要计算'依照本示例所有打开的工作簿'Application.Calculate(或只是Calculate)指定工作表'计算指定工作表Sheet1Worksheets(Sheet1).Calculate指定区域'Worksheets(1).Rows(2).Calculate本示例对自动重新计算功能进行设置,使MicrosoftExcel不对第一张工作表自动进行重新计算。Worksheets(1).EnableCalculation=False本示例计算Sheet1已用区域中A列、B列和C列的公式。Worksheets(Sheet1).UsedRange.Columns(A:C).Calculate本示例更新当前活动工作簿中的所有链接?ActiveWorkbook.UpdateLinkName:=ActiveWorkbook.LinkSources本示例设置第一张工作表的滚动区域?Worksheets(1).ScrollArea=a1:f10本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿。SetNewBook=Workbooks.AddDofName=Application.GetSaveAsFilenameLoopUntilfNameFalseNewBook.SaveAsFilename:=fName本示例打开Analysis.xls工作簿,然后运行Auto_Open宏。Workbooks.OpenANALYSIS.XLSActiveWorkbook.RunAutoMacrosxlAutoOpen本示例对活动工作簿运行Auto_Close宏,然后关闭该工作簿。WithActiveWorkbook.RunAutoMacrosxlAutoClose.CloseEndWith在本示例中,MicrosoftExcel向用户显示活动工作簿的路径和文件名称。'SubUseCanonical()Displaythefullpathtouser.MsgBoxActiveWorkbook.FullNameURLEncodedEndSub本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)。MsgBoxActiveWorkbook.FullName本示例关闭Book1.xls,并放弃所有对此工作簿的更改。Workbooks(BOOK1.XLS).CloseSaveChanges:=False本示例关闭所有打开的工作簿。如果某个打开的工作簿有改变,MicrosoftExcel将显示询问是否保存更改的对话框和相应提示。Workbooks.Close本示例在打印之前对当前活动工作簿的所有工作表重新计算?'PrivateSubWorkbook_BeforePrint(CancelAsBoolean)ForEachwkInWorksheetswk.CalculateNextEndSub本示例对查询表一中的第一列数据进行汇总,并在数据区域下方显示第一列数据的总和。Setc1=Sheets(sheet1).QueryTables(1).ResultRange.Columns(1)c1.Name=Column1c1.End(xlDown).Offset(2,0).Formula==sum(Column1)本示例取消活动工作簿中的所有更改?ActiveWorkbook.RejectAllChanges本示例在商业问题中使用规划求解函数,以使总利润达到最大值。SolverSave函数将当前问题保存到活动工作表上的某一区域。Worksheets(Sheet1).ActivateSolverResetSolverOptionsPrecision:=0.001SolverOKSetCell:=Range(TotalProfit),_MaxMinVal:=1,_ByChange:=Range(C4:E6)SolverAddCellRef:=Range(F4:F6),_Relation:=1,_FormulaText:=100SolverAddCellRef:=Range(C4:E6),_Relation:=3,_FormulaText:=0SolverAddCellRef:=Range(C4:E6),_Relation:=4SolverSolveUserFinish:=FalseSolverSaveSaveArea:=Range(A33)本示例隐藏Chart1、Chart3和Chart5。Charts(Array(Chart1,Chart3,Chart5)).Visible=False当激活工作表时,本示例对A1:A10区域进行排序。'PrivateSubWorksheet_Activate()Range(a1:a10).SortKey1:=Range(a1),Order:=xlAscendingEndSub本示例更改MicrosoftExcel链接。ActiveWorkbook.ChangeLinkc:\excel\book1.xls,_c:\excel\book2.xls,xlExcelLinks本示例启用受保护的工作表上的自动筛选箭头?ActiveSheet.EnableAutoFilter=TrueActiveSheet.Protectcontents:=True,userInterfaceOnly:=True本示例将活动工作簿设为只读?ActiveWorkbook.ChangeFileAccessMode:=xlReadOnly本示例使共享工作簿每三分钟自动更新一次?ActiveWorkbook.AutoUpdateFrequency=3下述Sub过程清除活动工作簿中Sheet1上的所有单元格的内容。'SubClearSheet()Worksheets(Sheet1).Cells.ClearContentsEndSub本示例对所有工作簿都关