利用宏命令锁定Excel公式
- 格式:docx
- 大小:115.10 KB
- 文档页数:5
voko007259个常用宏-excelhome(1)2009-08-15 14:10:24目录1、打开全部隐藏工作表2、循环宏3、录制宏时调用“停止录制”工具栏4、高级筛选5列不重复数据至指定表5、双击单元执行宏(工作表代码)6、双击指定区域单元执行宏(工作表代码)7、进入单元执行宏(工作表代码)8、进入指定区域单元执行宏(工作表代码)9、在多个宏中依次循环执行一个(控件按钮代码)10、在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)11、在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)12、根据A1单元文本隐藏/显示按钮(控件按钮代码)13、当前单元返回按钮名称(控件按钮代码)14、当前单元内容返回到按钮名称(控件按钮代码)15、奇偶页分别打印16、自动打印多工作表第一页17、查找A列文本循环插入分页符18、将A列最后数据行以上的所有B列图片大小调整为所在单元大小19、返回光标所在行数20、在A1返回当前选中单元格数量21、返回当前工作簿中工作表数量22、返回光标选择区域的行数和列数23、工作表中包含数据的最大行数24、返回A列数据的最大行数25、将所选区域文本插入新建文本框26、批量插入地址批注27、批量插入统一批注28、以A1单元内容批量插入批注29、不连续区域插入当前文件名和表名及地址30、不连续区域录入当前单元地址31、连续区域录入当前单元地址32、返回当前单元地址33、不连续区域录入当前日期34、不连续区域录入当前数字日期35、不连续区域录入当前日期和时间36、不连续区域录入对勾37、不连续区域录入当前文件名38、不连续区域添加文本39、不连续区域插入文本40、从指定位置向下同时录入多单元指定内容41、按aa工作表A列的内容排列工作表标签顺序42、以A1单元文本作表名插入工作表43、删除全部未选定工作表44、工作表标签排序45、定义指定工作表标签颜色46、在目录表建立本工作簿中各表链接目录47、建立工作表文本目录48、查另一文件的全部表名49、当前单元录入计算机名50、当前单元录入计算机用户名51、解除全部工作表保护52、为指定工作表加指定密码保护表53、在有密码的工作表执行代码54、执行前需要验证密码的宏(控件按钮代码)55、执行前需要验证密码的宏()56、拷贝A1公式和格式到A257、复制单元数值58、插入数值条件格式59、插入透明批注60、添加文本61、光标定位到指定工作表A列最后数据行下一单元62、定位选定单元格式相同的全部单元格63、按当前单元文本定位64、按固定文本定位65、删除包含固定文本单元的行或列66、定位数据及区域以上的空值67、右侧单元自动加5(工作表代码)68、当前单元加269、A列等于A列减B列70、用于光标选定多区域跳转指定单元(工作表代码)71、将A1单元录入的数据累加到B1单元(工作表代码)72、在指定颜色区域选择单元时添加/取消"√"(工作表代码)73、在指定区域选择单元时添加/取消"√"(工作表代码)74、双击指定单元,循环录入文本(工作表代码)75、双击指定单元,循环录入文本(工作表代码)76、单元区域引用(工作表代码)77、在指定区域选择单元时数值加1(工作表代码)78、混合文本的编号79、指定区域单元双击数据累加(工作表代码)80、选择单元区域触发事件(工作表代码)81、当修改指定单元内容时自动执行宏(工作表代码)82、被指定单元内容限制执行宏83、双击单元隐藏该行(工作表代码)84、高亮显示行(工作表代码)85、高亮显示行和列(工作表代码)86、为指定工作表设置滚动范围(工作簿代码)87、在指定单元记录打印和预览次数(工作簿代码)88、自动数字金额转大写(工作表代码)89、将全部工作表的A1单元作为单击按钮(工作簿代码)90、闹钟——到指定时间执行宏(工作簿代码)91、改变Excel界面标题的宏(工作簿代码)92、在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)93、B列录入数据时在A列返回记录时间(工作表代码)94、当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)95、指定单元显示光标位置内容(工作表代码)96、每编辑一个单元保存文件97、指定允许编辑区域98、解除允许编辑区域限制99、删除指定行100、删除A列为指定内容的行101、删除A列非数字单元行102、有条件删除当前行103、选择下一行104、选择第5行开始所有数据行105、选择光标或选区所在行106、选择光标或选区所在列107、光标定位到名称指定位置108、选择名称定义的数据区109、选择到指定列的最后行110、将Sheet1的A列的非空值写到Sheet2的A列111、将名称1的数据写到名称2112、单元反选113、调整选中对象中的文字114、去除指定范围内的对象115、更新透视表数据项116、将全部工作表名称写到A列117、为当前选定的多单元插入指定名称118、删除全部名称119、以指定区域为表目录补充新表120、按A列数据批量修改表名称121、按A列数据批量创建新表(控件按钮代码)122、清除剪贴板123、批量清除软回车124、判断指定文件是否已经打开125、当前文件另存到指定目录126、另存指定文件名127、以本工作表名称另存文件到当前目录128、将本工作表单独另存文件到Excel当前默认目录129、以活动工作表名称另存文件到Excel当前默认目录130、另存所有工作表为工作簿131、以指定单元内容为新文件名另存文件133、以当前日期和时间为新文件名另存文件134、另存本表为TXT文件135、引用指定位置单元内容为部分文件名另存文件136、将A列数据排序到D列137、将指定范围的数据排列到D列138、光标所在行上移一行139、加数据有效限制140、取消数据有效限制141、重排窗口143、回车光标向右144、回车光标向下146、保存并退出Excel147、隐藏/显示指定列空值行148、深度隐藏指定工作表149、隐藏指定工作表150、隐藏当前工作表151、返回当前工作表名称152、获取上一次所进入工作簿的工作表名称153、按光标选定颜色隐藏本列其他颜色行154、打开工作簿自动隐藏录入表以外的其他表155、除最左边工作表外深度隐藏所有表156、关闭文件时自动隐藏指定工作表(ThisWorkbook) 157、打开文件时提示指定工作表是保护状态(ThisWorkbook) 158、插入10行159、全选固定范围内小于0的单元160、全选选定范围内小于0的单元161、固定区域单元分类变色162、A列半角内容变红163、单元格录入数据时运行宏的代码164、根据B列最后数据快速合并A列单元格的控件代码165、在F1单元显示光标位置批注内容的代码166、显示光标所在单元的批注的代码167、使单元内容保持不变的工作表代码168、有条件执行宏169、有条件执行不同的宏170、提示确定或取消执行宏171、提示开始和结束172、拷贝指定表不相邻多列数据到新位置173、选择2至4行174、在当前选区有条件替换数值为文本175、自动筛选全部显示指定列176、自动筛选第2列值为A的行177、取消自动筛选()178、全部显示指定表的自动筛选179、强行合并单元180、设置单元区域格式181、在所有工作表的A1单元返回顺序号182、根据A1单元内容返回C1数值183、根据A1内容选择执行宏184、删除A列空行185、在A列产生不重复随机数186、将A列数据随机排列到F列187、取消选定区域的公式只保留值(假空转真空)188、处理导入的显示为科学计数法样式的身份证号189、返回指定单元的行高和列宽190、指定行高和列宽191、指定单元的行高和列宽与A1单元相同191、填公式192、建立当前工作表的副本为001表193、在第一个表前插入多工作表194、清除A列再插入序号195、反方向文本(自定义函数)196、指定选择单元区域弹出消息197、将B列数据添加超链接到K列198、删除B列数据的超链接199、分离临时表A列数据的文本和超链接并整理到数据库表200、分离临时表A列数据的文本和超链接并会同其他数据整理到数据库表201、返回A列最后一个非空单元行号202、返回表中第一个非空单元地址(行搜索)203、返回表中各非空单元区域地址(行搜索)204、返回第一个数值行号205、返回第1行最右边非空单元的列号206、返回连续数值单元的数量207、统计指定范围和内容的单元数量208、统计不同颜色的数字的和(自定义函数)209、返回非空单元数量210、返回A列非空单元数量211、返回圆周率π212、定义指定单元内容为页眉/页脚213、提示并全部清除当前选择区域214、全部清除当前选择区域215、清除指定区域数值216、对指定工作表执行取消隐藏》打印》隐藏工作表217、打开文件时执行指定宏(工作簿代码)218、关闭文件时执行指定宏(工作簿代码)219、弹出提示A1单元内容220、延时15秒执行重排窗口宏221、撤消工作表保护并取消密码222、重算指定表223、将第5行移到窗口的最上面224、对第一张工作表的指定区域进行排序225、显示指定工作表的打印预览226、用单元格A1的内容作为文件名另存当前工作簿227、[禁用/启用]保存和另存的代码228、在A和B列返回当前选区的名称和公式229、朗读朗读A列,按ESC键中止230、朗读固定语句,请按ESC键终止231、在M和N列的14行以下选择单元时显示调用日历控件(工作表代码)232、添加自定义序列233、弹出打印对话框234、返回总页码235、合并各工作表内容236、合并指定目录中所有文件中相同格式工作表的数据237、隐藏指定工作表的指定列238、把a列不重复值取到e列239、当前选区的行列数240、单元格录入1位字符就跳转(工作表代码)241、当指定日期(每月10日)打开文件执行宏242、提示并清空单元区域243、返回光标所在行号244、按照当前行A列的图片名称插入图片到H列245、当前行下插入1行246、取消指定行或列的隐藏247、复制单元格所在行248、复制单元格所在列249、新建一个工作表250、新建一个工作簿251、选择多表为工作组252、在当前工作组各表中分别执行指定宏253、复制当前工作簿的报表到临时工作簿254、删除指定文件255、合并A1至C1的内容写到D15单元的批注中256、自动重算257、手动重算1、打开全部隐藏工作表Sub 打开全部隐藏工作表()Dim i As IntegerFor i = 1 To Sheets.CountSheets(i).V isible = TrueNext iEnd Sub2、循环宏Sub 循环()AAA = Range("C2")Dim i As LongDim times As Longtimes = AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647) For i = 1 To timesCall 过滤一行If Range("完成标志") = "完成" ThenExit For'如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For'如果某列出现"完成"内容则退出循环Next iEnd Sub3、录制宏时调用“停止录制”工具栏Sub 录制宏时调用停止录制工具栏()mandBars("Stop Recording").V isible = TrueEnd Sub4、高级筛选5列不重复数据至指定表Sub 高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range( _"A1"), Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"), Order1:=xlAscending, Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinEnd Sub5、双击单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByV al Target As Range, Cancel As Boolean) If Range("$A$1") = "关闭" ThenExit SubSelect Case Target.AddressCase "$A$4"Call 宏1Cancel = TrueCase "$B$4"Call 宏2Cancel = TrueCase "$C$4"Call 宏3Cancel = TrueCase "$E$4"Call 宏4Cancel = TrueEnd SelectEnd Sub6、双击指定区域单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByV al Target As Range, Cancel As Boolean) If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then Call 打开隐藏表End Sub7、进入单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByV al Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$5" '单元地址(Target.Address),或命名单元名字()Call 宏1Case "$B$5"Call 宏2Case "$C$5"Call 宏3End SelectEnd Sub8、进入指定区域单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByV al Target As Range)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then Call 打开隐藏表End Sub9、在多个宏中依次循环执行一个(控件按钮代码)Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0End SelectEnd Sub10、在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Private Sub CommandButton1_Click()With CommandButton1If .Caption = "保护工作表" ThenCall 保护工作表.Caption = "取消工作表保护"Exit SubEnd IfIf .Caption = "取消工作表保护" ThenCall 取消工作表保护.Caption = "保护工作表"Exit SubEnd IfEnd WithEnd Sub11、在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Option ExplicitPrivate Sub CommandButton1_Click()With CommandButton1If .Caption = "宏1" ThenCall 宏1.Caption = "宏2"Exit SubEnd IfIf .Caption = "宏2" ThenCall 宏2.Caption = "宏3"Exit SubEnd IfIf .Caption = "宏3" ThenCall 宏3.Caption = "宏1"Exit SubEnd IfEnd WithEnd Sub12、根据A1单元文本隐藏/显示按钮(控件按钮代码)Private Sub Worksheet_SelectionChange(ByV al Target As Range) If Range("A1") > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub13、当前单元返回按钮名称(控件按钮代码)Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub14、当前单元内容返回到按钮名称(控件按钮代码)Private Sub CommandButton1_Click()CommandButton1.Caption = ActiveCellEnd Sub15、奇偶页分别打印Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数MsgBox "现在打印奇数页,按确定开始."For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox "现在打印偶数页,按确定开始."For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub16、自动打印多工作表第一页Sub 自动打印多工作表第一页()Dim sh As IntegerDim xDim yDim syDim syzx = InputBox("请输入起始工作表名字:")sy = InputBox("请输入结束工作表名字:")y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub17、查找A列文本循环插入分页符Sub 循环插入分页符()' Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容Dim i As LongDim times As Longtimes = Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), "分页") 'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647) For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:="分页", After:=ActiveCell, LookIn:=xlV alues, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _.ActivateActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCellEnd SubSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub18、将A列最后数据行以上的所有B列图片大小调整为所在单元大小Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小() Dim Pic As Picture, i&i = [A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing Then Pic.Top = Pic.TopLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub19、返回光标所在行数Sub 返回光标所在行数()x = ActiveCell.RowRange("A1") = xEnd Sub20、在A1返回当前选中单元格数量Sub 在A1返回当前选中单元格数量()[A1] = Selection.CountEnd Sub21、返回当前工作簿中工作表数量Sub 返回当前工作簿中工作表数量()t = Application.Sheets.CountMsgBox tEnd Sub22、返回光标选择区域的行数和列数Sub 返回光标选择区域的行数和列数()x = Selection.Rows.County = Selection.Columns.CountRange("A1") = xRange("A2") = yEnd Sub23、工作表中包含数据的最大行数Sub 包含数据的最大行数()n = Cells.Find("*", , , , 1, 2).RowMsgBox nEnd Sub24、返回A列数据的最大行数Sub 返回A列数据的最大行数()n = Range("a65536").End(xlUp).RowRange("B1") = nEnd Sub25、将所选区域文本插入新建文本框Sub 将所选区域文本插入新建文本框()For Each rag In Selectionn = n & rag.V alue & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, ActiveCell.Left + ActiveCell.Width, ActiveCell.Top + ActiveCell.Height, 250#, 100).SelectSelection.Characters.Text = "问题:" & nWith Selection.Characters(Start:=1, Length:=3).Font.Name = "黑体".FontStyle = "常规".Size = 12End WithEnd Sub26、批量插入地址批注Sub 批量插入地址批注()On Error Resume NextDim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionment.Deleter.AddCommentment.V isible = Falsement.Text Text:="本单元格:" & r.Address & " of " & Selection.Address NextEnd IfEnd Sub27、批量插入统一批注Sub 批量插入统一批注()Dim r As Range, msg As Stringmsg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")If Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.V isible = Falsement.Text Text:=msgNextEnd IfEnd Sub28、以A1单元内容批量插入批注Sub 以A1单元内容批量插入批注()Dim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.V isible = Falsement.Text Text:=[a1].TextNextEnd IfEnd Sub29、不连续区域插入当前文件名和表名及地址Sub 批量插入当前文件名和表名及地址()For Each mycell In Selectionmycell.FormulaR1C1 = "[" + + "]" + + "!" + mycell.AddressNextEnd Sub30、不连续区域录入当前单元地址Sub 区域录入当前单元地址()For Each mycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub31、连续区域录入当前单元地址Sub 连续区域录入当前单元地址()Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"Selection.CopySelection.PasteSpecial Paste:=xlPasteV alues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=FalseEnd Sub32、返回当前单元地址Sub 返回当前单元地址()d = ActiveCell.Address[A1] = dEnd Sub33、不连续区域录入当前日期Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d")End Sub34、不连续区域录入当前数字日期Sub 区域录入当前数字日期()Selection.FormulaR1C1 = Format(Now(), "yyyymmdd")End Sub35、不连续区域录入当前日期和时间Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss") End Sub36、不连续区域录入对勾Sub 批量录入对勾()Selection.FormulaR1C1 = "√"End Sub37、不连续区域录入当前文件名Sub 批量录入当前文件名()Selection.FormulaR1C1 = End Sub38、不连续区域添加文本Sub 批量添加文本()Dim s As RangeFor Each s In Selections = s & "文本内容"NextEnd Sub39、不连续区域插入文本Sub 批量插入文本()Dim s As RangeFor Each s In Selections = "文本内容" & sNextEnd Sub40、从指定位置向下同时录入多单元指定内容Sub 从指定位置向下同时录入多单元指定内容()Dim arrarr = Array("1", "2", "13", "25", "46", "12", "0", "20")[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr) End Sub41、按aa工作表A列的内容排列工作表标签顺序Sub 按aa工作表A列的内容排列工作表标签顺序() Dim I%, str1$I = 1Sheets("aa").SelectDo While Cells(I, 1).V alue <> ""str1 = Trim(Cells(I, 1).V alue)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets("aa").SelectLoopEnd Sub42、以A1单元文本作表名插入工作表Sub 以A1单元文本作表名插入工作表()Dim nm As Stringnm = [a1]Sheets.Add = nmEnd Sub43、删除全部未选定工作表Sub 删除全部未选定工作表()Dim sht As Worksheet, n As Integer, iFlag As BooleanDim ShtName() As Stringn = ActiveWindow.SelectedSheets.CountReDim ShtName(1 To n)n = 1For Each sht In ActiveWindow.SelectedSheetsShtName(n) = n = n + 1NextApplication.DisplayAlerts = FalseFor Each sht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub44、工作表标签排序Sub 工作表标签排序()Dim i As Long, j As Long, nums As Long, msg As Longmsg = MsgBox("工作表按升序排列请选'是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选'否[N]'", vbY esNoCancel, "工作表排序")If msg = vbCancel Then Exit Subnums = Sheets.CountIf msg = vbY es Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iElse 'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEnd IfEnd Sub259个常用宏-excelhome(2)2009-08-15 14:11:4545、定义指定工作表标签颜色Sub 定义指定工作表标签颜色()Sheets("Sheet1").Tab.ColorIndex = 46End Sub46、在目录表建立本工作簿中各表链接目录Sub 在目录表建立本工作簿中各表链接目录()Dim s%, Rng As RangeOn Error Resume NextSheets("目录").ActivateIf Err = 0 ThenSheets("目录").UsedRange.DeleteElseSheets.Add = "目录"End IfFor i = 1 To Sheets.CountIf Sheets(i).Name <> "目录" Thens = s + 1Set Rng = Sheets("目录").Cells(((s - 1) Mod 20) + 1, (s - 1) \ 20 + 1 + 1)Rng = Format(s, " 0") & ". " & Sheets(i).NameActiveSheet.Hyperlinks.Add Rng, "#" & Sheets(i).Name & "!A1", ScreenTip:=Sheets(i).NameEnd IfNextSheets("目录").Range("b:iv").EntireColumn.ColumnWidth = 20End Sub47、建立工作表文本目录Sub 建立工作表文本目录()Sheets.Add before:=Sheets(1)Sheets(1).Name = "目录"For i = 2 To Sheets.CountCells(i - 1, 1) = Sheets(i).Name'Sheets(1).Hyperlinks.Add Cells(i - 1, 1), "#" & Sheets(i).Name & "!A1" '添加超链接NextEnd Sub48、查另一文件的全部表名Sub 查另一文件的全部表名()On Error Resume NextDim i%Dim sh As WorksheetApplication.ScreenUpdating = FalseWorkbooks.Open Filename:=ThisWorkbook.Path & "\2.xls"Windows("1.xls").Activate '当前文件名称Sheets("Sheet1").Select '当前表名称i = 1 '将表名称返回到第1行For Each sh In Workbooks("2.xls").WorksheetsCells(i, 1) = '将表名称返回到第1列i = i + 1 '返回每个表名称向下移动1行Next shWindows("2.xls").Close '关闭对象文件Application.ScreenUpdating = TrueEnd Sub49、当前单元录入计算机名Sub 当前单元录入计算机名()Selection = Environ("COMPUTERNAME")'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub50、当前单元录入计算机用户名Sub 当前单元录入计算机用户名()Selection = Environ("Username")'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub51、解除全部工作表保护Sub 解除全部工作表保护()Dim n As IntegerFor n = 1 To Sheets.CountSheets(n).UnprotectNext nEnd Sub52、为指定工作表加指定密码保护表Sub 为指定工作表加指定密码保护表()Sheet10.Protect Password:="123"End Sub53、在有密码的工作表执行代码Sub 在有密码的工作表执行代码()Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123”打开工作表Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行Sheets("1").Protect Password:=123 '重新用密码保护工作表End Sub54、执行前需要验证密码的宏(控件按钮代码)Private Sub CommandButton1_Click()If InputBox("请输入密码:") <> "123" Then '密码是123MsgBox "密码错误,按确定退出!", 64, "提示"Exit SubEnd IfCells(1, 1) = 10End Sub55、执行前需要验证密码的宏()Sub 执行前需要验证密码的宏()If InputBox("请输入您的使用权限:", "系统提示") = 123 Then重排窗口'要执行的宏代码或宏名称ElseMsgBox "对不起,您没有使用该宏的权限,按确定键后退出!"End IfEnd Sub56、拷贝A1公式和格式到A2Sub 拷贝A1公式到A2()Workbooks("临时表").Sheets("表1").Range("A1").CopyWorkbooks("临时表").Sheets("表2").Range("A2").PasteSpecialEnd Sub57、复制单元数值Sub 复制数值()s = Workbooks("book1").Sheets("Sheet1").Range("A1:A2")Workbooks("book2").Sheets("Sheet1").Range("A1:A2") = sEnd Sub58、插入数值条件格式Sub 插入数值条件格式()Selection.FormatConditions.DeleteSelection.FormatConditions.Add Type:=xlCellV alue, Operator:=xlGreater, _ Formula1:="70"Selection.FormatConditions(1).Interior.ColorIndex = 45Selection.FormatConditions.Add Type:=xlCellV alue, Operator:=xlLess, _ Formula1:="55"Selection.FormatConditions(2).Interior.ColorIndex = 39Selection.FormatConditions.Add Type:=xlCellV alue, Operator:=xlGreater, _ Formula1:="60"Selection.FormatConditions(3).Interior.ColorIndex = 34End Sub59、插入透明批注Sub 插入透明批注()Selection.AddCommentment.Visible = FalseDim XS As WorksheetFor i = 1 To ments.Countments(i).Text "透明批注"ments(i).Shape.Fill.Visible = msoFalseNextEnd Sub60、添加文本Sub 添加文本()Selection = Selection + "×" '不可在数字后添加文本'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub61、光标定位到指定工作表A列最后数据行下一单元Sub 光标定位到指定工作表A列最后数据行下一单元()a = Sheets("数据库").[a65536].End(xlUp).RowSheets("数据库").SelectRange("A" & a + 1).SelectEnd Sub62、定位选定单元格式相同的全部单元格Sub 定位选定单元格式相同的全部单元格()Dim FirstCell As Range, FoundCell As RangeDim AllCells As RangeWith Application.FindFormat.Clear.NumberFormatLocal = Selection.NumberFormatLocal.HorizontalAlignment = Selection.HorizontalAlignment.V erticalAlignment = Selection.V erticalAlignment.WrapText = Selection.WrapText.Orientation = Selection.Orientation.AddIndent = Selection.AddIndent.IndentLevel = Selection.IndentLevel.ShrinkToFit = Selection.ShrinkToFit.MergeCells = Selection.MergeCells = .Font.FontStyle = Selection.Font.FontStyle.Font.Size = Selection.Font.Size.Font.Strikethrough = Selection.Font.Strikethrough.Font.Subscript = Selection.Font.Subscript.Font.Underline = Selection.Font.Underline.Font.ColorIndex = Selection.Font.ColorIndex.Interior.ColorIndex = Selection.Interior.ColorIndex.Interior.Pattern = Selection.Interior.Pattern.Locked = Selection.Locked.FormulaHidden = Selection.FormulaHiddenEnd WithSet FirstCell = edRange.Find(what:="", searchformat:=True)If FirstCell Is Nothing ThenExit SubEnd IfSet AllCells = FirstCellSet FoundCell = FirstCellDoSet FoundCell = edRange.Find(After:=FoundCell, what:="", searchformat:=True)If FoundCell Is Nothing Then Exit DoSet AllCells = Union(FoundCell, AllCells)If FoundCell.Address = FirstCell.Address Then Exit DoLoopAllCells.SelectEnd Sub63、按当前单元文本定位Sub 按当前单元文本定位()ABC = SelectionDim aa As RangeFor Each a In edRangeIf a Like ABC ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub64、按固定文本定位Sub 文本定位()Dim aa As RangeFor Each a In edRangeIf a Like "*合计*" ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub65、删除包含固定文本单元的行或列Sub 删除包含固定文本单元的行或列()DoCells.Find(what:="哈哈").ActivateSelection.EntireRow.Delete '删除行' Selection.EntireColumn.Delete '删除列Loop Until Cells.Find(what:="哈哈") Is Nothing End Sub66、定位数据及区域以上的空值Sub 定位数据及区域以上的空值()Dim aa As RangeFor Each a In edRangeIf a Like 〈0 ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub67、右侧单元自动加5(工作表代码)Private Sub Worksheet_Change(ByV al Target As Range)Application.EnableEvents = FalseTarget.Offset(0, 1) = Target + 5Application.EnableEvents = TrueEnd Sub68、当前单元加2Sub 当前单元加2()Selection = Selection + 2'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub69、A列等于A列减B列Sub A列等于A列减B列()For i = 1 To 23Cells(i, 1) = Cells(i, 1) - Cells(i, 2)NextEnd Sub70、用于光标选定多区域跳转指定单元(工作表代码)Private Sub Worksheet_SelectionChange(ByV al T As Range)a = Array([b6:b7], [e6], [h6])For i = 0 To 2If Not Application.Intersect(T, a(i)) Is Nothing Then[a1].Select: Exit ForEnd IfNextEnd Sub71、将A1单元录入的数据累加到B1单元(工作表代码)Private Sub Worksheet_Change(ByV al Target As Range)Dim t As LongIf Target.Address = "$A$1" Thent = Sheet1.Range("$B$1").V alueSheet1.Range("$B$1").V alue = t + Target.V alueEnd IfEnd Sub72、在指定颜色区域选择单元时添加/取消"√"(工作表代码)Private Sub Worksheet_SelectionChange(ByV al Target As Range)Dim myrg As RangeFor Each myrg In TargetIf myrg.Interior.ColorIndex = 37 Then myrg = IIf(myrg <> "√", "√", "") NextEnd Sub73、在指定区域选择单元时添加/取消"√"(工作表代码)Private Sub Worksheet_SelectionChange(ByV al Target As Range)Dim Rng As RangeIf Target.Count <= 15 ThenIf Not Application.Intersect(Target, Range("D6:D20")) Is Nothing Then For Each Rng In SelectionWith RngIf .V alue = "" Then.V alue = "√"Else.V alue = ""End IfEnd WithNextEnd IfEnd IfEnd Sub74、双击指定单元,循环录入文本(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByV al T As Range, Cancel As Boolean) If T.Address <> "$A$1" Then Exit SubCancel = TrueT = IIf(T = "好", "中", IIf(T = "中", "差", "好"))End Sub75、双击指定单元,循环录入文本(工作表代码)Dim nums As BytePrivate Sub Worksheet_BeforeDoubleClick(ByV al Target As Range, Cancel As Boolean)If Target.Address = "$A$1" Thennums = nums Mod 3 + 1Target = Mid("上中下", nums, 1)Target.Offset(1, 0).SelectEnd IfEnd Sub76、单元区域引用(工作表代码)Private Sub Worksheet_Activate()Sheet1.Range("A1:B3").V alue = Sheet2.Range("A1:B3").V alueEnd Sub77、在指定区域选择单元时数值加1(工作表代码)Private Sub Worksheet_SelectionChange(ByV al Target As Range)If Not Application.Intersect([a1:e10], Target) Is Nothing ThenTarget = V al(Target) + 1End IfEnd Sub259个常用宏-excelhome(3)2009-08-15 14:12:5878、混合文本的编号Sub 混合文本的编号()Worksheets(1).Range("B2").V alue = "北京" & (--(Mid(Worksheets(1).Range("B2"), 3, 100)) + 1) End Sub79、指定区域单元双击数据累加(工作表代码)。
[计算机]利用Excel中宏的功能可以一次性准确地锁定全部公式利用Excel中宏的功能可以一次性准确地锁定全部公式,方法如下: 一、简单制作好一个带有公式的表格,然后用鼠标点击“工具”菜单,在下拉菜单中指向“保护”,单击级连菜单“保护工作表”命令,在出现的对话框中输入密码确定后返回。
二、鼠标点击“工具”菜单,在下拉菜单中指向“宏”,单击级连菜单“录制新宏”,出现录制新宏对话框,在“宏名”下输入“锁定公式”,并将其保存在“新工作簿”,确定后返回。
三、开始宏的操作录制,步骤如下:1、鼠标点击“工具”菜单,在下拉菜单中指向“保护”,单击级连菜单“撤消工作表保护”命令。
2、将光标定位在行号列标的左上角空白处点击,选中整个工作表,然后右击鼠标,在出现的快捷菜单中左击“设置单元格格式”,出现“单元格格式”选项卡,选择“保护”标签卡,清除其中“锁定”前的“?”,确定后返回。
3 、鼠标点击“编辑”菜单,在下拉菜单中左击“定位”命令,在其出现的“定位”对话框中点击“定位条件”按钮,出现“定位条件”对话框,在“选择”下的单选项中选中“公式”,确定后返回,这样凡有公式的地方均被选中。
此时鼠标右击选中区域,设置单元格格式”,出现“单元格格式”选项卡,在出现的快捷菜单中左击“选择“保护”标签卡,选中其中“锁定”前的“?”,确定后返回。
4、鼠标点击“工具”菜单,在下拉菜单中指向“保护”,单击级连菜单“保护命令,在出现的对话框中输入密码,确定后返回。
工作表”5 、鼠标点击“工具”菜单,在下拉菜单中指向“ 宏”,单击级连菜单“ 停止录制”。
6、鼠标点击“工具”菜单,在下拉菜单中指向“宏”,单击级连菜单“宏”,出现“宏”对话框,在其中点击“编辑”按钮,出现 Excel 自带的VB、编程窗口,直接将刚才录制的宏按一定的路径、名称保存(如: C:\锁定公式) 后退出,至此锁定公式的宏录制已完成。
四、定制锁定公式工具按钮,方法如下:1、鼠标右击常用工具栏的空白处,在出现的快捷菜单中点击“自定义”命令,出现“自定义”选项卡,选择其中“命令”标签,在“类别”下选取“宏”,将其右侧对应的“自定义按钮”拖放到常用工具栏中。
各种ExcelVBA的命令2-电脑资料本示例重复最近用户界面命令,。
本示例必须放在宏的第一行。
Application.Repeat下例中,变量counter 代替了行号。
此过程将在单元格区域C1:C20 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。
Sub RoundToZero1()For Counter = 1 To 20Set curCell = Worksheets("Sheet1").Cells(Counter, 3)If Abs(curCell.Value) 0 Then' Application.ActivePRinter = "\\zdserver2\HP LaserJet 5000 PCL 6在 Ne00:" '指定打印机ActiveWindow.SelectedSheets.PrintOutCopies:=myPrintNum,Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数ElseMsgBox "请输入要打印的份数"End IfActiveSheet.ShowAllData '全部显示ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码Sheets("封面").SelectApplication.ScreenUpdating = TrueEnd SubSub 打印余额()Application.ScreenUpdating = FalseSheets("余额表").SelectCall 重算所有表ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码ActiveWindow.ScrollColumn = 10Selection.AutoFilter Field:=1, Criteria1:=""'以下10行弹出窗口输入打印信息Dim myPrintNum As IntegerDim myPrompt, myTitle As StringmyPrompt = "请输入要打印的份数"myTitle = "打印选取范围"myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)If myPrintNum 0 Then' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL 6 在Ne00:" ' '指定打印机ActiveWindow.SelectedSheets.PrintOutCopies:=myPrintNum,Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数ElseMsgBox "请输入要打印的份数"End IfActiveSheet.ShowAllData '全部显示ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码Sheets("封面").SelectApplication.ScreenUpdating = TrueEnd SubSub 备份()Dim y '变量声明-需保存工作表的路径和名称[M1] = ActiveWorkbook.FullName '单元格M1=当前工作簿的路径和名称y = cells(1, 14) 'Y=单元格N1的值,即计算后的需保存工作簿的路径和名称Worksheets("封面").UsedRange.Columns("M:N").Calculate '计算指定区域ActiveWorkbook.SaveCopyAs y '备份到指定路么YEnd SubSub 重算活动表()With Application.Calculation = xlManual.MaxChange = 0.001End WithActiveWorkbook.PrecisionAsDisplayed = TrueActiveWindow.DisplayZeros = TrueActiveSheet.CalculateEnd SubSub 重算指定表()Attribute 重算指定表.VB_ProcData.VB_Invoke_Func = "z\n14"Worksheets("银行帐").CalculateWorksheets("日报表").CalculateEnd Sub单元格数据改变引起计算激活过程Private Sub Worksheet_Change(ByVal Target As Range)Dim irow, icol As Integerirow = Target.Row '变量行irowicol = Target.Column '变量列icolIf irow > 6 And icol = 3 And cells(irow, 3) >= cells(irow - 1, 3)Then '>大于6行,并且第3列,当本行 3列>2行3列Application.EnableEvents = Falsecells(irow, 2) = cells(irow - 1, 2) '本行 2 列=上一行2列Application.EnableEvents = TrueElseIf irow > 6 And icol = 3 And cells(irow, 3) 大于6行,并且第3列,当本行 3列>2行3列Application.EnableEvents = Falsecells(irow, 2) = cells(irow - 1, 2) + 1 '本行 2 列=上行2列+1Application.EnableEvents = TrueElseIf (icol = 3 Or icol = 4 Or icol = 6 Or icol = 8 Or icol = 9 Oricol = 10 Or icol = 12 Or icol = 13) And irow > 6 Then 'And Target""Application.EnableEvents = Falsecells(irow, 5) = "=单位名称"cells(irow, 7) = "=摘要"cells(irow, 11) = "=余额"Range(cells(irow, 14), cells(irow, 16)) = "=预内外收支NOP"cells(irow, 17) = "=审核Q"cells(irow, 18) = "=对帐U"Range(cells(irow, 19), cells(irow, 20)) = "=内转收支XY"cells(irow, 21) = "=政采Z"Application.EnableEvents = TrueEnd IfEnd Sub'计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏=CELL("FILENAME")'改变Excel界面标题的宏Private Sub Workbook_Open()Application.Caption = "吃过了"End Sub'自动刷新单元格A1内显示的日期\时间的宏Sub mytime()Range("a1") = Now()Application.OnTime Now + TimeValue("00:00:01"), "mytime"End Sub'用单元格A1的内容作为文件名保存当前工作簿的宏Sub b()ActiveWorkbook.SaveCopyAs Range("A1") + ".xls"End Sub'激活窗体的宏,此宏写入有窗体的工作表内Private Sub CommandButton1_Click() '点数据录入按钮控件激活窗体Load UserForm3 '激活窗体UserForm3.StartUpPosition = 3 '激活窗体UserForm3.Show '激活窗体End Sub'以下为窗体中点击各按钮运行的宏,写入窗体内Public pos As Integer '声明变量pos'战友确定按钮语句Private Sub CommandButton1_Click()Application.ScreenUpdating = False '此句和最后一句旨在不显示宏的执行过程'On Error GoTo ErrorHandle '可以不要'ErrorHandle: '可以不要'If Err.Number = 13 Then '可以不要'Exit Sub '可以不要'End If '可以不要Call writeToWorkSheet '执行宏writetoworksheetUserForm3.Hide '退出窗体,继续按钮少此句,退出按钮执行此句Unload UserForm3 '退出窗体,继续按钮少此句,退出按钮执行此句Call 批量打印 '[此处到接顺序2][L2] = "" '[到此处结束]Sheets("打印信息").SelectApplication.ScreenUpdating = TrueEnd Sub'退出按钮语句Private Sub CommandButton2_Click()UserForm3.HideUnload UserForm3End Sub'将窗体内的文本框中的数据写进工作表的单元格Private Sub writeT oWorkSheet()ActiveSheet.Range("k2") = TextBox1.Value '将文字框内容写进k列ActiveSheet.Range("l2") = TextBox2.Value '将文字框内容写进l 列TextBox1.Value = "" '清空文字框内容TextBox2.Value = "" '清空文字框内容Worksheets("打印信息").Range("a2").Value = 1 '给指定表的单元格写入数据Worksheets("打印信息").Range("B3:E113").Value = "" '清空指定表的单元格数据End Sub'以下为根据条件打印的宏Sub 打印() '部门明细查询及批星打印Application.ScreenUpdating = False '关闭屏幕更新If Cells(1, 4) = "" And Cells(1, 5) = "" Then '打印条件Cells(3,13) = 1 And' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL6 在 Ne00:" ' '指定打印机ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True'设置默认打印机的打印信息,其中Copies:=myPrint为打印份数ElseCall 打印信息 '打倒为假时执行End IfApplication.ScreenUpdating = True '关闭屏幕更新End Sub'以下的循环过程,也用于批量打印,Z的值可以是Z=1 TO 5(1到5),也可是单元格的内容Sub 批量打印()For Z = Cells(1, 11) To Cells(1, 12) '变量X的值从打印起始号K1到结束号L1之间逐渐递增Cells(1, 13) = Z 'M1的值等于变量XEnd Sub'以下是将打印情况写入工作表的宏Sub 打印信息()Application.ScreenUpdating = False '关闭屏幕更新Dim Y '声明变量Y = '判定活动工作表名称Sheets("打印信息").SelectX = 3 '从第3行开始Do While Not (IsEmpty(Cells(X, 2).Value)) '判断第1列的最后一行(即空行的上一行)X = X + 1 '在最后一行加一行即为空行LoopCells(X, 2) = Cells(2, 1)Cells(X, 3) = Sheets(Y).Cells(4, 3)Cells(2, 1) = Cells(2, 1) + 1Cells(X, 4) = Sheets(Y).Cells(1, 4)Cells(X, 5) = Sheets(Y).Cells(1, 5)[c1] = YSheets(Y).Select '返回上一次打开的工作表Application.ScreenUpdating = True '打开屏幕更新End Sub将文件保存为以某一单元格中的值为文件名的宏怎么写假设你要以Sheet1的A1单元格中的值为文件名保存,则应用命令:ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls"在Excel中,如何用程式控制某一单元格不可编辑修改?thanks Private Sub Workbook_Open()ProtectSpecialRange ("A1")Sub ProtectSpecialRange(RangeAddress As String)On Error Resume NextWith Sheet1.Cells.Locked = False.Range(RangeAddress).Locked = True.Protection.AllowEditRanges.Add Title:="区域1", Range:=Range(RangeAddress) _, Password:="pass".Protect DrawingObjects:=True, Contents:=True, Scenarios:=TrueEnd WithEnd Sub对工作表编程,有时要判断工作表的记录总数,VBA里如何实现?x=1do while not (isempty(sheets("").cells(x,1).value)x=x+1loop在VBA中等同于EXCELE中的求和函数-sum()-的函数是什么?Application.WorksheetFunction.Sum()自定义菜单有三个菜单项,要求手工顺序执行,电脑资料《各种Excel VBA的命令2》(https://www.)。
excel锁定公式Excel是一款非常好用的办公软件,它的出现使很多工作的数据处理、统计和报表的制作变得非常容易,也节省了很多劳动力。
在经常使用Excel的过程中,我们可能会遇到一些比较麻烦的问题,比如:“我写了一个公式,怎么办,让它不被其他人修改?”、“我输入数据时,公式没有及时自动计算,有什么办法解决?”等等。
这其实是一个“Excel锁定公式”的问题。
首先,什么是“Excel锁定公式”。
通俗来说,就是指在Excel表格中,可以让Excel自动计算公式的结果,且把公式的值锁定在某一单元格,不允许其他人更改或删除公式。
其实,锁定Excel公式的方法很多,本文将为大家介绍几种比较常用的方法:1. 使用“单元格保护”功能:单元格保护功能可以防止其他人修改某些单元格。
在Excel中,点击“审阅”按钮,点击“单元格保护”,就可以弹出“单元格保护”对话框。
在此对话框中,勾选“保护细胞”,然后点击“确定”按钮,这时,Excel中的一些单元格就已经锁定,不允许修改或删除。
2. 使用“自动计算”设置:在Excel中,可以通过设置“自动计算”,让Excel自动计算某些单元格中的公式,从而锁定公式,使得公式不能被其他人修改或删除。
设置“自动计算”步骤如下:点击“开发工具”按钮,点击“宏设置”,在“自动计算”选项中,勾选“自动计算”,点击“确定”按钮,这样,Excel中选中的单元格中的公式就被锁定,不能被其他人修改或删除。
3. 使用“冻结面板”设置:如果要将多个单元格的公式锁定,可以使用“冻结面板”设置,从而锁定计算的单元格。
使用“冻结面板”的步骤如下:点击“开发工具”按钮,点击“冻结面板”,然后点击“选择冻结”,选择要锁定单元格所在的行或列,点击“确定”按钮,这时,所选择的单元格就被冻结,不允许其他人修改或删除公式。
如果要对Excel公式进行锁定处理,可以根据自己的实际情况,选取合适的方法,例如上述提到的3种方法中的一种或多种方法。
excel vba锁单元格公式Excel VBA锁定单元格公式的实现方法在Excel中,我们经常需要对一些单元格进行保护,以避免误操作导致公式或数据的错误修改。
然而,在某些情况下,我们可能希望只保护单元格的内容,而不保护公式,从而允许用户修改公式。
在这种情况下,Excel VBA提供了一种锁定单元格公式的实现方法。
以下是实现此功能的步骤:1. 打开Excel,并按下ALT + F11打开Visual Basic for Applications2. 在左侧的"项目浏览"窗格中,双击以打开目标工作簿的VBA项目3. 在左侧的"工程资源管理器"窗格中,找到并双击该工作簿的"这工作簿"对象4. 在新窗口的代码窗口中,粘贴以下代码:```Private Sub Workbook_Open()Sheets("Sheet1").Unprotect ' 如果需要,请将"Sheet1"更改为目标工作表的名称Sheets("Sheet1").Range("A1:B10").Locked = True ' 如果需要,请将"A1:B10"更改为目标单元格的范围Sheets("Sheet1").Protect ' 如果需要,请使用其他的保护选项End Sub```5. 根据需要,修改代码中的工作表名称和目标单元格范围6. 按下F5运行代码,关闭VBA编辑器7. 保存工作簿,并重新打开它运行以上代码后,Excel会在打开工作簿时触发Workbook_Open事件,自动保护指定的工作表,并锁定指定的单元格。
这样,用户将无法修改锁定的单元格,但仍然可以编辑其他未锁定的单元格,包括公式。
需要注意的是,锁定公式的功能只能在工作簿打开时触发,所以用户可能需要重新打开工作簿以使其生效。
保护工作表里的公式
保护工作表里的公式是为了防止公式被修改或删除,可以采取以下几种方法:
1. 锁定公式:在Excel中,可以使用“审阅”选项卡中的“保护工作表”功能,选择“锁定单元格”和“选定锁定单元格”,这样就可以防止公式被修改或删除。
2. 将公式设置为只读:在Excel中,可以使用“文件”选项卡中的“信息”功能,选择“保护工作簿”,然后选择“保护当前工作表”,将公式设置为只读,这样也可以防止公式被修改或删除。
3. 使用VBA宏:在Excel中,可以使用VBA宏来保护工作表里的公式。
例如,可以使用以下代码来保护工作表里的公式:
```vba
Sub ProtectFormulas()
Dim ws As Worksheet
Dim rng As Range
' 遍历工作表中的所有单元格
For Each ws In
For Each rng In
' 如果单元格包含公式,则将其设置为只读
If IsNumeric() And = Then
= True
End If
Next rng
Next ws
End Sub
```
以上方法都可以有效地保护工作表里的公式,防止被修改或删除。
executeexcel4macro function -回复如何使用executeexcel4macro函数进行Excel宏的执行。
本文将介绍executeexcel4macro函数的基本概念、语法和用法,并通过示例详细说明如何使用该函数执行Excel宏。
在Excel中,宏是一种自动化操作的方式,可以通过录制宏或编写宏代码来实现。
有时候,在VBA代码中执行宏可能不太方便或不可行,这时可以使用executeexcel4macro函数来执行Excel宏。
executeexcel4macro函数是Excel4宏语言中的一个函数,用于执行Excel中的宏命令。
它的语法如下:`EXECUTEEXCEL4MACRO("宏命令")`其中,“宏命令”是一个字符串,用于指定要执行的宏命令。
使用executeexcel4macro函数执行Excel宏是一种非常强大和灵活的方式。
下面通过一个示例来详细说明如何使用executeexcel4macro函数执行Excel宏。
假设在Excel中有一个宏,用于实现某个复杂的计算操作。
我们可以通过执行宏来自动执行这个操作。
首先,我们需要将宏命令保存到一个单元格中。
假设我们将宏命令保存在单元格A1中。
然后,在另一个单元格中使用executeexcel4macro函数来执行宏命令。
假设我们将这个函数保存在单元格B1中。
那么,B1单元格的公式将为:`=EXECUTEEXCEL4MACRO(A1)`在输入这个公式后,Excel会自动执行宏命令,并显示执行结果。
需要注意的是,宏命令必须使用Excel4的宏语言编写,而不能使用VBA 语言。
Excel4的宏语言比较简单,但功能也相对有限。
所以,在编写宏命令时需要注意其语法和限制。
另外,executeexcel4macro函数只能执行Excel中已存在的宏,无法创建新的宏。
如果需要创建新的宏,可以使用VBA语言编写宏代码,并通过其他方式来执行。
Excel工作表的保护大法:用宏进行加密Excel表格是我们工作中经常用到的,而它往往涉及统计数据等敏感问题,因此,Excel表格的保护也是经常遇到的问题,如何安全使用Excel呢?我们常用到的是Excel“工具”菜单提供的“保护工作表”和“保护工作簿”功能。
有没有其他方法呢?用宏进行“显式”加密在需要加密的Excel 表中,点击[工具]→[宏]→[Visual Basic编辑器],打开“工程资源管理器”,双击该工作表,在右边的是设置该表属性的编辑窗口,单击该窗口左上方的下拉列表框,选择Worksheet,再从该窗口右上方的列表框中选择Activate(激活)(如图)。
添加如下代码:(假设“123”为密码,Sheet1为限制权限表格,Sheet2为工作簿中为任何适合的工作表)Private Sub Worksheet_Activate()Sheets("sheet1").Cells.Font.ColorIndex = 2 '设置文字颜色为白色If Application.InputBox("请输入密码:") = 123 ThenRange("A1").SelectActiveSheet.Cells.Font.ColorIndex = 56' 设置文字颜色为黑色ElseMsgBox "密码错误,即将退出!"Sheets("sheet2").SelectEnd IfEnd Sub每次当你选择该“加密”表的时候都会弹出对话框要求输入密码,正确则进入该表(Sheet1),否则会选择其他表(Sheet2)。
用宏进行“隐式”加密“显式”加密,虽然可以让没有密码的使用者无法看到“加密”表格,但是每次选择该表格时都会弹出对话框,实在不方便而且给其他用户一种被防范的不舒服感觉。
于是笔者就想出了下面的“隐式”加密方法。
Excel使用技巧如何利用VBA宏实现自动化数据处理在日常的工作中,我们经常需要处理大量的数据。
而Excel作为一款强大的办公软件,提供了丰富的功能和工具,可以帮助我们更高效地处理数据。
其中,VBA宏是Excel的一个重要功能,可以帮助我们实现自动化数据处理。
本文将介绍一些Excel使用技巧,并演示如何利用VBA宏来实现自动化数据处理。
一、Excel使用技巧1. 快速插入数据:在Excel中,我们可以使用快捷键Ctrl+Enter来快速插入一列或一行数据。
只需先选中一列或一行,然后输入数据,按下快捷键即可。
2. 数据筛选与排序:Excel提供了数据筛选和排序功能,可以帮助我们快速找到需要的数据。
在Excel的菜单栏中,选择“数据”-“排序”或“筛选”,即可使用这些功能。
3. 公式的使用:Excel的公式是数据处理中的重要工具。
我们可以使用各种函数来进行数值计算、逻辑判断、日期处理等。
例如,SUM函数可以用于求和,IF函数可以用于条件判断等。
4. 图表的制作:图表可以帮助我们更直观地呈现数据。
在Excel中,我们可以使用图表功能来创建各种类型的图表,如柱状图、折线图、饼图等。
二、利用VBA宏实现自动化数据处理VBA(Visual Basic for Applications)是一种编程语言,可以帮助我们通过编写程序来操作Excel。
下面以一个例子来演示如何利用VBA宏来实现自动化数据处理。
假设我们有一个包含销售数据的Excel表格,其中包括商品名称、销售数量和销售金额等信息。
我们希望根据销售数量和销售金额来计算每个商品的销售额,并将结果显示在另一个表格中。
首先,我们打开Excel,并按下Alt+F11快捷键,打开VBA编辑器。
然后,在左侧的“项目资源管理器”中,双击打开Excel对象。
接下来,我们在VBA编辑器的代码窗口中编写以下代码:```vbaSub CalculateSales()Dim LastRow As LongDim i As LongLastRow = Cells(Rows.Count, 1).End(xlUp).RowFor i = 2 To LastRowCells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).ValueNext iEnd Sub```以上代码中,我们首先声明了两个变量LastRow和i,分别用于记录表格最后一行的行数和循环计数器。
如何锁定EXCEL表格中的公式需要分三大步骤完成:1、全部选中工作表→右击→设置单元格格式→保护→去掉“锁定”前方框中的√→确定(此步骤是为了设置保护后可以编辑其他单元格)2、选中要保护的公式所在单元格→重复以上过程→在“锁定”前方框中加上“√”;(此步骤是为了设置保护公式所在单元格)3、工具→保护→保护工作表→设置密码(两次,也可以不设)→确定。
注:需要修改公式时→工具→保护→撤销工作表保护隔离求和=SUMPRODUCT((MOD(COLUMN(A1:Z1),3)=1)*A1:Z1)给出的公式的范围是A到Z列,隔3列求和。
具体根据你自己的情况修改。
多条件求和一、反复筛选法Excel中通过筛选是可以把符合条件的数据单独显示出来的。
先点击功能区“数据”选项卡中的“筛选”按钮,那么标题栏每一单元格均添加下拉按钮。
点击“班级”(A1)单元格下拉按钮,在弹出的菜单下方取消选择“全选”复选项,然后再选中“5班”复选项。
如图2所示。
确定后显示出来的就只有5班学生的成绩了。
再点击D1单元格下拉按钮,在弹出菜单中选择“数字筛选→小于或等于”命令,如图3所示,打开“自定义自动筛选方式”对话框,在“小于或等于”后的输入框中输入数字“20”,如图4所示。
确定后,显示出来的就是5班中语文名次小于等于20的所有学生了。
用同样的方法再筛选显示数学名次小于等于20的学生,那么在屏幕中显示的就是我们所需要的学生了。
选中显示出来的学生的总分及下方的一个空单元格(放置求和结果),再点击功能区“公式”选项卡中的“自动求和”按钮右侧的小三角,在弹出的菜单中点击“求和”命令,就可以把他们的总分加起来了,如图5所示。
二、条件求和法Excel 2007其实自带了一个多条件求和的工具。
但是默认状态下没有安装。
我们需要自行加载。
先点击左上角“Microsoft Office 按钮”,单击右下方“Excel选项”按钮。
在打开的“Excel选项”对话框中点击左侧的“加载项”按钮,然后在右侧下方“管理”框中,选择“Excel加载项”并点击“转到”按钮,如图6所示。
利用宏命令锁定Excel公式为了防止Excel里面做好的公式误被他人修改,通常大家会通过设置“保护工作表”的方式来锁定,但锁定后别人点击就会弹出对话框,很麻烦。
本文介绍一个通过宏命令来锁定公式的方式,别人根本无法点击锁定后的公式单元格,这样就显得很高大上:)一、录制宏打开Excel2010,在视图里面找到宏图标(2003版本在工具菜单里寻找),如果没有找到,请打开文件菜单,底部进“选项”,点最下“信任中心”,进入“信任中心设置”,点击“宏设置”,启用宏,然后回到Excel就能找到宏图标了。
点击“录制宏”选择保存在个人宏工作簿,确定然后点击右下角的蓝色方块,停止录制二、编辑Vb宏命令按Alt+F11,进入Vb工程界面选择模块1,双击进入编辑模式将代码栏中的所有内容全部删除然后把以下代码复制进去(分割线中间)------------分割线--------------------Sub 保护公式()ActiveSheet.Unprotect ("12345678") '解除对工作表的保护Cells.Select '选中整个表格Selection.Locked = False '解除锁定Selection.SpecialCells(xlCellTypeFormulas, 23).Select '选中包含公式的单元格Selection.Locked = True '添加锁定Selection.FormulaHidden = True '添加隐藏ActiveSheet.Protect ("12345678") '保护工作表,并设置密码ActiveSheet.EnableSelection = xlUnlockedCells '让锁定单元格不能选中End Sub---------------分割线-----------------然后,结果如下图,请核对点击文件菜单,选择“关闭并返回Excel”三、执行宏点击“查看宏”点击“执行”,就可以执行了(提示:无内容的空文档执行时会出错,别担心,打开一个有公式的文档,就可以顺利执行了)四、建立快捷方式点击“自定义快速访问工具栏”从下来菜单中选择宏,这时可以看到保护公式的宏,点“添加”在最顶上就可以看到宏了,以后打开文档后直接点击该按钮,就会自动执行保护公式的宏了。
257个常用Excel宏命令-工具-牧龙在野!展开全文工作的时候用到的,感觉很实用,保存下来。
随时查询学习。
目录:1、打开全部隐藏工作表2、循环宏3、录制宏时调用“停止录制”工具栏4、高级筛选5列不重复数据至指定表5、双击单元执行宏(工作表代码)6、双击指定区域单元执行宏(工作表代码)7、进入单元执行宏(工作表代码)8、进入指定区域单元执行宏(工作表代码)9、在多个宏中依次循环执行一个(控件按钮代码)10、在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)11、在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)12、根据A1单元文本隐藏/显示按钮(控件按钮代码)13、当前单元返回按钮名称(控件按钮代码)14、当前单元内容返回到按钮名称(控件按钮代码)15、奇偶页分别打印16、自动打印多工作表第一页17、查找A列文本循环插入分页符18、将A列最后数据行以上的所有B列图片大小调整为所在单元大小19、返回光标所在行数20、在A1返回当前选中单元格数量21、返回当前工作簿中工作表数量22、返回光标选择区域的行数和列数23、工作表中包含数据的最大行数24、返回A列数据的最大行数25、将所选区域文本插入新建文本框26、批量插入地址批注27、批量插入统一批注28、以A1单元内容批量插入批注29、不连续区域插入当前文件名和表名及地址30、不连续区域录入当前单元地址31、连续区域录入当前单元地址32、返回当前单元地址33、不连续区域录入当前日期34、不连续区域录入当前数字日期35、不连续区域录入当前日期和时间36、不连续区域录入对勾37、不连续区域录入当前文件名38、不连续区域添加文本39、不连续区域插入文本40、从指定位置向下同时录入多单元指定内容41、按aa工作表A列的内容排列工作表标签顺序42、以A1单元文本作表名插入工作表43、删除全部未选定工作表44、工作表标签排序45、定义指定工作表标签颜色46、在目录表建立本工作簿中各表链接目录47、建立工作表文本目录48、查另一文件的全部表名49、当前单元录入计算机名50、当前单元录入计算机用户名51、解除全部工作表保护52、为指定工作表加指定密码保护表53、在有密码的工作表执行代码54、执行前需要验证密码的宏(控件按钮代码)55、执行前需要验证密码的宏()56、拷贝A1公式和格式到A257、复制单元数值58、插入数值条件格式59、插入透明批注60、添加文本61、光标定位到指定工作表A列最后数据行下一单元62、定位选定单元格式相同的全部单元格63、按当前单元文本定位64、按固定文本定位65、删除包含固定文本单元的行或列66、定位数据及区域以上的空值67、右侧单元自动加5(工作表代码)68、当前单元加269、A列等于A列减B列70、用于光标选定多区域跳转指定单元(工作表代码)71、将A1单元录入的数据累加到B1单元(工作表代码)72、在指定颜色区域选择单元时添加/取消'√'(工作表代码)73、在指定区域选择单元时添加/取消'√'(工作表代码)74、双击指定单元,循环录入文本(工作表代码)75、双击指定单元,循环录入文本(工作表代码)76、单元区域引用(工作表代码)77、在指定区域选择单元时数值加1(工作表代码)78、混合文本的编号79、指定区域单元双击数据累加(工作表代码)80、选择单元区域触发事件(工作表代码)81、当修改指定单元内容时自动执行宏(工作表代码)82、被指定单元内容限制执行宏83、双击单元隐藏该行(工作表代码)84、高亮显示行(工作表代码)85、高亮显示行和列(工作表代码)86、为指定工作表设置滚动范围(工作簿代码)87、在指定单元记录打印和预览次数(工作簿代码)88、自动数字金额转大写(工作表代码)89、将全部工作表的A1单元作为单击按钮(工作簿代码)90、闹钟——到指定时间执行宏(工作簿代码)91、改变Excel界面标题的宏(工作簿代码)92、在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)93、B列录入数据时在A列返回记录时间(工作表代码)94、当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)95、指定单元显示光标位置内容(工作表代码)96、每编辑一个单元保存文件97、指定允许编辑区域98、解除允许编辑区域限制99、删除指定行100、删除A列为指定内容的行101、删除A列非数字单元行102、有条件删除当前行103、选择下一行104、选择第5行开始所有数据行105、选择光标或选区所在行106、选择光标或选区所在列107、光标定位到名称指定位置108、选择名称定义的数据区109、选择到指定列的最后行110、将Sheet1的A列的非空值写到Sheet2的A列111、将名称1的数据写到名称2112、单元反选113、调整选中对象中的文字114、去除指定范围内的对象115、更新透视表数据项116、将全部工作表名称写到A列117、为当前选定的多单元插入指定名称118、删除全部名称119、以指定区域为表目录补充新表120、按A列数据批量修改表名称121、按A列数据批量创建新表(控件按钮代码) 122、清除剪贴板123、批量清除软回车124、判断指定文件是否已经打开125、当前文件另存到指定目录126、另存指定文件名127、以本工作表名称另存文件到当前目录128、将本工作表单独另存文件到Excel当前默认目录129、以活动工作表名称另存文件到Excel当前默认目录130、另存所有工作表为工作簿131、以指定单元内容为新文件名另存文件133、以当前日期和时间为新文件名另存文件134、另存本表为TXT文件135、引用指定位置单元内容为部分文件名另存文件136、将A列数据排序到D列137、将指定范围的数据排列到D列138、光标所在行上移一行139、加数据有效限制140、取消数据有效限制141、重排窗口143、回车光标向右144、回车光标向下146、保存并退出Excel147、隐藏/显示指定列空值行148、深度隐藏指定工作表149、隐藏指定工作表150、隐藏当前工作表151、返回当前工作表名称152、获取上一次所进入工作簿的工作表名称153、按光标选定颜色隐藏本列其他颜色行154、打开工作簿自动隐藏录入表以外的其他表155、除最左边工作表外深度隐藏所有表156、关闭文件时自动隐藏指定工作表(ThisWorkbook) 157、打开文件时提示指定工作表是保护状态(ThisWorkbook) 158、插入10行159、全选固定范围内小于0的单元160、全选选定范围内小于0的单元161、固定区域单元分类变色162、A列半角内容变红163、单元格录入数据时运行宏的代码164、根据B列最后数据快速合并A列单元格的控件代码165、在F1单元显示光标位置批注内容的代码166、显示光标所在单元的批注的代码167、使单元内容保持不变的工作表代码168、有条件执行宏169、有条件执行不同的宏170、提示确定或取消执行宏171、提示开始和结束172、拷贝指定表不相邻多列数据到新位置173、选择2至4行174、在当前选区有条件替换数值为文本175、自动筛选全部显示指定列176、自动筛选第2列值为A的行177、取消自动筛选()178、全部显示指定表的自动筛选179、强行合并单元180、设置单元区域格式181、在所有工作表的A1单元返回顺序号182、根据A1单元内容返回C1数值183、根据A1内容选择执行宏184、删除A列空行185、在A列产生不重复随机数186、将A列数据随机排列到F列187、取消选定区域的公式只保留值(假空转真空) 188、处理导入的显示为科学计数法样式的身份证号189、返回指定单元的行高和列宽190、指定行高和列宽191、指定单元的行高和列宽与A1单元相同191、填公式192、建立当前工作表的副本为001表193、在第一个表前插入多工作表194、清除A列再插入序号195、反方向文本(自定义函数)196、指定选择单元区域弹出消息197、将B列数据添加超链接到K列198、删除B列数据的超链接199、分离临时表A列数据的文本和超链接并整理到数据库表200、分离临时表A列数据的文本和超链接并会同其他数据整理到数据库表201、返回A列最后一个非空单元行号202、返回表中第一个非空单元地址(行搜索)203、返回表中各非空单元区域地址(行搜索)204、返回第一个数值行号205、返回第1行最右边非空单元的列号206、返回连续数值单元的数量207、统计指定范围和内容的单元数量208、统计不同颜色的数字的和(自定义函数)209、返回非空单元数量210、返回A列非空单元数量211、返回圆周率π212、定义指定单元内容为页眉/页脚213、提示并全部清除当前选择区域214、全部清除当前选择区域215、清除指定区域数值216、对指定工作表执行取消隐藏》打印》隐藏工作表217、打开文件时执行指定宏(工作簿代码)218、关闭文件时执行指定宏(工作簿代码)219、弹出提示A1单元内容220、延时15秒执行重排窗口宏221、撤消工作表保护并取消密码222、重算指定表223、将第5行移到窗口的最上面224、对第一张工作表的指定区域进行排序225、显示指定工作表的打印预览226、用单元格A1的内容作为文件名另存当前工作簿227、[禁用/启用]保存和另存的代码228、在A和B列返回当前选区的名称和公式229、朗读朗读A列,按ESC键中止230、朗读固定语句,请按ESC键终止231、在M和N列的14行以下选择单元时显示调用日历控件(工作表代码)232、添加自定义序列233、弹出打印对话框234、返回总页码235、合并各工作表内容236、合并指定目录中所有文件中相同格式工作表的数据237、隐藏指定工作表的指定列238、把a列不重复值取到e列239、当前选区的行列数240、单元格录入1位字符就跳转(工作表代码)241、当指定日期(每月10日)打开文件执行宏242、提示并清空单元区域243、返回光标所在行号244、按照当前行A列的图片名称插入图片到H列245、当前行下插入1行246、取消指定行或列的隐藏247、复制单元格所在行248、复制单元格所在列249、新建一个工作表250、新建一个工作簿251、选择多表为工作组252、在当前工作组各表中分别执行指定宏253、复制当前工作簿的报表到临时工作簿254、删除指定文件255、合并A1至C1的内容写到D15单元的批注中256、自动重算257、手动重算命令:1、打开全部隐藏工作表Sub 打开全部隐藏工作表()Dim i AsIntegerFor i = 1To Sheets.CountSheets(i).Visible = TrueNextiEnd Sub2、循环宏Sub 循环()AAA =Range('C2')Dim i AsLongDim timesAs Longtimes =AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1To timesCall 过滤一行If Range('完成标志') = '完成' ThenExit For'如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出'If Sheets('传送参数').Range('A' & i).Text = '完成'Then ExitFor'如果某列出现'完成'内容则退出循环NextiEnd Sub3、录制宏时调用“停止录制”工具栏Sub 录制宏时调用停止录制工具栏()mandBars('Stop Recording').Visible = True End Sub4、高级筛选5列不重复数据至指定表Sub 高级筛选5列不重复数据至Sheet2()Sheets('Sheet2').Range('A1:E65536') = '' '清除Sheet2的A:D 列Range('A1:E65536').AdvancedFilterAction:=xlFilterCopy,CopyT oRange:=Sheet2.Range( _ 'A1'), Unique:=TrueSheet2.Columns('A:E').SortKey1:=Sheet2.Range('A2'),Order1:=xlAscending,Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom,SortMethod _:=xlPinYinEnd Sub5、双击单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)IfRange('$A$1') = '关闭' ThenExit SubSelectCase Target.AddressCase '$A$4'Call 宏1Cancel = TrueCase '$B$4'Call 宏2Cancel = TrueCase '$C$4'Call 宏3Cancel = TrueCase '$E$4'Call 宏4Cancel = TrueEndSelectEnd Sub6、双击指定区域单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)IfRange('$A$1') = '关闭' Then Exit SubIf NotApplication.Intersect(Target, Range('A4:A9', 'C4:C9')) Is NothingThen Call 打开隐藏表End Sub7、进入单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏IfRange('$A$1') = '关闭' Then Exit SubSelectCase Target.AddressCase '$A$5' '单元地址(Target.Address),或命名单元名字()Call 宏1Case '$B$5'Call 宏2Case '$C$5'Call 宏3EndSelectEnd Sub8、进入指定区域单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)IfRange('$A$1') = '关闭' Then Exit SubIf NotApplication.Intersect(Target, Range('A4:A9','C4:C9')) IsNothingThen Call 打开隐藏表End Sub9、在多个宏中依次循环执行一个(控件按钮代码)Private Sub CommandButton1_Click()StaticRunMacro As IntegerSelectCase RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0EndSelectEnd Sub10、在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Private Sub CommandButton1_Click()WithCommandButton1If .Caption = '保护工作表' ThenCall 保护工作表.Caption = '取消工作表保护'End IfIf .Caption = '取消工作表保护' ThenCall 取消工作表保护.Caption = '保护工作表'Exit SubEnd IfEndWithEnd Sub11、在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Option ExplicitPrivate Sub CommandButton1_Click()WithCommandButton1If .Caption = '宏1' ThenCall 宏1.Caption = '宏2'Exit SubEnd IfIf .Caption = '宏2' ThenCall 宏2.Caption = '宏3'Exit SubEnd IfIf .Caption = '宏3' ThenCall 宏3.Caption = '宏1'End IfEndWithEnd Sub12、根据A1单元文本隐藏/显示按钮(控件按钮代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range('A1') > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub13、当前单元返回按钮名称(控件按钮代码)Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub14、当前单元内容返回到按钮名称(控件按钮代码)Private Sub CommandButton1_Click() CommandButton1.Caption = ActiveCellEnd Sub15、奇偶页分别打印Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro('GET.DOCUMENT(50)') '总页数MsgBox '现在打印奇数页,按确定开始.'For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox '现在打印偶数页,按确定开始.'For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub16、自动打印多工作表第一页Sub 自动打印多工作表第一页()Dim sh As IntegerDim xDim yDim syDim syzx = InputBox('请输入起始工作表名字:')sy = InputBox('请输入结束工作表名字:')y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub17、查找A列文本循环插入分页符Sub 循环插入分页符()' Selection = Workbooks('临时表').Sheets('表2').Range('A1')调用指定地址内容Dim i As LongDim times As Longtimes=Application.WorksheetFunction.CountIf(Sheet1.Range('a:a'),'分页')'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:='分页',After:=ActiveCell, LookIn:=xlValues,LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,MatchCase:=False) _.ActivateActiveWindow.SelectedSheets.HPageBreaks.AddBefore:=ActiveCellEnd SubSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub18、将A列最后数据行以上的所有B列图片大小调整为所在单元大小Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim PicAs Picture, i&i =[A65536].End(xlUp).RowFor EachPic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range('B1:B'& i)) Is Nothing ThenPic.Top = Pic.T opLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub19、返回光标所在行数Sub 返回光标所在行数()x =ActiveCell.RowRange('A1') = xEnd Sub20、在A1返回当前选中单元格数量Sub 在A1返回当前选中单元格数量() [A1] =Selection.CountEnd Sub21、返回当前工作簿中工作表数量Sub 返回当前工作簿中工作表数量() t =Application.Sheets.Count MsgBoxtEnd Sub22、返回光标选择区域的行数和列数Sub 返回光标选择区域的行数和列数() x =Selection.Rows.County =Selection.Columns.CountRange('A1') = xRange('A2') = yEnd Sub23、工作表中包含数据的最大行数Sub 包含数据的最大行数()n =Cells.Find('*', , , , 1, 2).RowMsgBoxnEnd Sub24、返回A列数据的最大行数Sub 返回A列数据的最大行数()n =Range('a65536').End(xlUp).RowRange('B1') = nEnd Sub25、将所选区域文本插入新建文本框Sub 将所选区域文本插入新建文本框()For Eachrag In Selectionn = n & rag.Value & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizon tal,ActiveCell.Left + ActiveCell.Width, ActiveCell.Top+ActiveCell.Height, 250#, 100).SelectSelection.Characters.Text = '问题:' & nWithSelection.Characters(Start:=1, Length:=3).Font.Name = '黑体'.FontStyle = '常规'.Size = 12EndWithEnd Sub26、批量插入地址批注Sub 批量插入地址批注()On ErrorResume NextDim r AsRangeIfSelection.Cells.Count > 0 ThenFor Each r In Selectionment.Deleter.AddCommentment.Visible = Falsement.Text Text:='本单元格:' & r.Address& ' of ' & Selection.AddressNextEndIfEnd Sub27、批量插入统一批注Sub 批量插入统一批注()Dim r AsRange, msg As Stringmsg =InputBox('请输入欲批量插入的批注', '提示', '随便输点什么吧')IfSelection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.Visible = Falsement.Text Text:=msgNextEndIfEnd Sub28、以A1单元内容批量插入批注Sub 以A1单元内容批量插入批注()Dim r AsRangeIfSelection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.Visible = Falsement.Text Text:=[a1].TextNextEndIfEnd Sub29、不连续区域插入当前文件名和表名及地址Sub 批量插入当前文件名和表名及地址()For Eachmycell In Selectionmycell.FormulaR1C1 = '[' + + ']' + + '!' + mycell.AddressNextEnd Sub30、不连续区域录入当前单元地址Sub 区域录入当前单元地址()For Eachmycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub31、连续区域录入当前单元地址Sub 连续区域录入当前单元地址()Selection= '=ADDRESS(ROW(),COLUMN(),4,1)'Selection.CopySelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks _:=False, Transpose:=FalseEnd Sub32、返回当前单元地址Sub 返回当前单元地址()d =ActiveCell.Address[A1] =dEnd Sub33、不连续区域录入当前日期Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), 'yyyy-m-d')End Sub34、不连续区域录入当前数字日期Sub 区域录入当前数字日期()Selection.FormulaR1C1 = Format(Now(), 'yyyymmdd')End Sub35、不连续区域录入当前日期和时间Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), 'yyyy-m-d h:mm:ss') End Sub36、不连续区域录入对勾Sub 批量录入对勾()Selection.FormulaR1C1 = '√'End Sub37、不连续区域录入当前文件名Sub 批量录入当前文件名()Selection.FormulaR1C1 = End Sub38、不连续区域添加文本Sub 批量添加文本()Dim s AsRangeFor Eachs In Selections = s & '文本内容'NextEnd Sub39、不连续区域插入文本Sub 批量插入文本()Dim s AsRangeFor Eachs In Selections = '文本内容' & sNextEnd Sub40、从指定位置向下同时录入多单元指定内容Sub 从指定位置向下同时录入多单元指定内容()Dimarrarr =Array('1', '2', '13', '25', '46', '12', '0', '20')[B2].Resize(8, 1) =Application.WorksheetFunction.Transpose(arr)End Sub41、按aa工作表A列的内容排列工作表标签顺序Sub 按aa工作表A列的内容排列工作表标签顺序()Dim I%,str1$I = 1Sheets('aa').SelectDo WhileCells(I, 1).Value <> ''str1 = Trim(Cells(I, 1).Value)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets('aa').SelectLoopEnd Sub42、以A1单元文本作表名插入工作表Sub 以A1单元文本作表名插入工作表()Dim nm AsStringnm =[a1]Sheets.Add = nmEnd Sub43、删除全部未选定工作表Sub 删除全部未选定工作表()Dim shtAs Worksheet, n As Integer, iFlag As Boolean DimShtName() As Stringn =ActiveWindow.SelectedSheets.Count ReDimShtName(1 To n)n = 1For Eachsht In ActiveWindow.SelectedSheets ShtName(n) = n = n + 1NextApplication.DisplayAlerts = FalseFor Eachsht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub44、工作表标签排序Sub 工作表标签排序()Dim i AsLong, j As Long, nums As Long, msg As Longmsg =MsgBox('工作表按升序排列请选'是[Y]'. ' & vbCrLf& vbCrLf & '工作表按降序排列请选 '否[N]'',vbYesNoCancel, '工作表排序')If msg =vbCancel Then Exit Subnums =Sheets.CountIf msg =vbYes Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name)ThenSheets(j).Move Before:=Sheets(i)End IfNext jNextiElse'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name)ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEndIfEnd Sub259个常用宏-excelhome(2)2009-08-15 14:11:4545、定义指定工作表标签颜色Sub 定义指定工作表标签颜色()Sheets('Sheet1').Tab.ColorIndex = 46 End Sub46、在目录表建立本工作簿中各表链接目录Sub 在目录表建立本工作簿中各表链接目录() Dim s%,Rng As RangeOn ErrorResume NextSheets('目录').ActivateIf Err =0 ThenSheets('目录').UsedRange.DeleteElseSheets.Add = '目录'EndIfFor i = 1To Sheets.CountIf Sheets(i).Name <> '目录' Thens = s + 1Set Rng = Sheets('目录').Cells(((s - 1) Mod 20) + 1, (s - 1) \ 20 + 1+ 1)Rng = Format(s, ' 0') & '. ' &Sheets(i).NameActiveSheet.Hyperlinks.Add Rng, '#' &Sheets(i).Name & '!A1',ScreenTip:=Sheets(i).NameEnd IfNextSheets('目录').Range('b:iv').EntireColumn.ColumnWidth = 20 End Sub47、建立工作表文本目录Sub 建立工作表文本目录()Sheets.Add before:=Sheets(1)Sheets(1).Name = '目录'For i = 2To Sheets.CountCells(i - 1, 1) = Sheets(i).Name'Sheets(1).Hyperlinks.Add Cells(i - 1, 1), '#' &Sheets(i).Name &'!A1' '添加超链接NextEnd Sub48、查另一文件的全部表名Sub 查另一文件的全部表名()On ErrorResume NextDimi%Dim sh AsWorksheetApplication.ScreenUpdating = FalseWorkbooks.Open Filename:=ThisWorkbook.Path &'\2.xls' Windows('1.xls').Activate '当前文件名称Sheets('Sheet1').Select '当前表名称i =1 '将表名称返回到第1行For Eachsh In Workbooks('2.xls').WorksheetsCells(i, 1) = '将表名称返回到第1列i = i +1 '返回每个表名称向下移动1行NextshWindows('2.xls').Close '关闭对象文件Application.ScreenUpdating = TrueEnd Sub49、当前单元录入计算机名Sub 当前单元录入计算机名()Selection =Environ('COMPUTERNAME')'Selection = Workbooks('临时表').Sheets('表2').Range('A1')调用指定地址内容EndSub50、当前单元录入计算机用户名Sub 当前单元录入计算机用户名()Selection =Environ('Username')'Selection = Workbooks('临时表').Sheets('表2').Range('A1')调用指定地址内容End Sub51、解除全部工作表保护Sub 解除全部工作表保护()Dim n AsIntegerFor n = 1T o Sheets.CountSheets(n).UnprotectNextnEnd Sub52、为指定工作表加指定密码保护表Sub 为指定工作表加指定密码保护表()Sheet10.Protect Password:='123'End Sub53、在有密码的工作表执行代码Sub 在有密码的工作表执行代码()Sheets('1').Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表Range('C:C').SpecialCells(xlCellTypeBlanks).EntireRow.Hidde n =True '隐藏C列空值行Sheets('1').ProtectPassword:=123 '重新用密码保护工作表54、执行前需要验证密码的宏(控件按钮代码)Private Sub CommandButton1_Click()IfInputBox('请输入密码:') <> '123' Then'密码是123 MsgBox '密码错误,按确定退出!', 64, '提示'Exit SubEndIfCells(1,1) = 10End Sub55、执行前需要验证密码的宏()Sub 执行前需要验证密码的宏()IfInputBox('请输入您的使用权限:', '系统提示') = 123 Then重排窗口 '要执行的宏代码或宏名称ElseMsgBox '对不起,您没有使用该宏的权限,按确定键后退出!' EndIfEnd Sub56、拷贝A1公式和格式到A2Sub 拷贝A1公式到A2()Workbooks('临时表').Sheets('表1').Range('A1').Copy Workbooks('临时表').Sheets('表2').Range('A2').PasteSpecial57、复制单元数值Sub 复制数值()s =Workbooks('book1').Sheets('Sheet1').Range('A1:A2')Workbooks('book2').Sheets('Sheet1').Range('A1:A2') = sEnd Sub58、插入数值条件格式Sub 插入数值条件格式()Selection.FormatConditions.DeleteSelection.FormatConditions.AddType:=xlCellValue,Operator:=xlGreater, _Formula1:='70'Selection.FormatConditions(1).Interior.ColorIndex = 45Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,_Formula1:='55'Selection.FormatConditions(2).Interior.ColorIndex = 39Selection.FormatConditions.AddType:=xlCellValue,Operator:=xlGreater, _Formula1:='60'Selection.FormatConditions(3).Interior.ColorIndex = 34End Sub59、插入透明批注Sub 插入透明批注()Selection.AddCommentment.Visible = FalseDim XS AsWorksheetFor i = 1To ments.Countments(i).Text '透明批注'ments(i).Shape.Fill.Visible = msoFalseNextEnd Sub60、添加文本Sub 添加文本()Selection = Selection + '×''不可在数字后添加文本'Selection = Workbooks('临时表').Sheets('表2').Range('A1')调用指定地址内容EndSub61、光标定位到指定工作表A列最后数据行下一单元Sub 光标定位到指定工作表A列最后数据行下一单元()a =Sheets('数据库').[a65536].End(xlUp).RowSheets('数据库').SelectRange('A'& a + 1).SelectEnd Sub62、定位选定单元格式相同的全部单元格Sub 定位选定单元格式相同的全部单元格()DimFirstCell As Range, FoundCell As RangeDimAllCells As RangeWith Application.FindFormat.Clear.NumberFormatLocal = Selection.NumberFormatLocal.HorizontalAlignment = Selection.HorizontalAlignment.VerticalAlignment = Selection.VerticalAlignment.WrapText = Selection.WrapText.Orientation = Selection.Orientation.AddIndent = Selection.AddIndent.IndentLevel = Selection.IndentLevel.ShrinkT oFit = Selection.ShrinkT oFit.MergeCells = Selection.MergeCells = .Font.FontStyle = Selection.Font.FontStyle.Font.Size = Selection.Font.Size.Font.Strikethrough = Selection.Font.Strikethrough.Font.Subscript = Selection.Font.Subscript.Font.Underline = Selection.Font.Underline.Font.ColorIndex = Selection.Font.ColorIndex.Interior.ColorIndex = Selection.Interior.ColorIndex.Interior.Pattern = Selection.Interior.Pattern.Locked = Selection.Locked.FormulaHidden = Selection.FormulaHiddenEnd WithSetFirstCell =edRange.Find(what:='',searchformat:=True) If FirstCell Is Nothing ThenExit SubEnd IfSetAllCells = FirstCellSetFoundCell =FirstCellDoSet FoundCell = edRange.Find(After:=FoundCell,what:='', searchformat:=True)If FoundCell Is Nothing Then Exit DoSet AllCells = Union(FoundCell, AllCells)If FoundCell.Address = FirstCell.Address Then Exit DoLoopAllCells.SelectEnd Sub63、按当前单元文本定位Sub 按当前单元文本定位()ABC =SelectionDim aa AsRangeFor Eacha In edRangeIf a Like ABC ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub64、按固定文本定位Sub 文本定位()Dim aa AsRangeFor Eacha In edRange If a Like '*合计*' ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub65、删除包含固定文本单元的行或列Sub 删除包含固定文本单元的行或列() DoCells.Find(what:='哈哈').Activate Selection.EntireRow.Delete '删除行' Selection.EntireColumn.Delete '删除列LoopUntil Cells.Find(what:='哈哈') Is NothingEnd Sub66、定位数据及区域以上的空值Sub 定位数据及区域以上的空值()Dim aa As RangeFor Each a In edRangeIf a Like 〈0 ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub67、右侧单元自动加5(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = FalseTarget.Offset(0, 1) = Target + 5Application.EnableEvents = TrueEnd Sub68、当前单元加2Sub 当前单元加2()Selection = Selection +2'Selection = Workbooks('临时表').Sheets('表2').Range('A1')调用指定地址内容EndSub69、A列等于A列减B列Sub A列等于A列减B列()For i = 1 To 23Cells(i, 1) = Cells(i, 1) - Cells(i, 2)NextEnd Sub70、用于光标选定多区域跳转指定单元(工作表代码)Private Sub Worksheet_SelectionChange(ByVal T As Range)a = Array([b6:b7], [e6], [h6])For i = 0 To 2If Not Application.Intersect(T, a(i)) Is Nothing Then[a1].Select: Exit ForEnd IfNextEnd Sub71、将A1单元录入的数据累加到B1单元(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range)Dim t As LongIf Target.Address = '$A$1' Thent = Sheet1.Range('$B$1').ValueSheet1.Range('$B$1').Value = t + Target.ValueEnd IfEnd Sub72、在指定颜色区域选择单元时添加/取消'√'(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim myrgAs RangeFor Eachmyrg In TargetIf myrg.Interior.ColorIndex = 37 Then myrg = IIf(myrg<> '√', '√', '')NextEnd Sub73、在指定区域选择单元时添加/取消'√'(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim RngAs RangeIfTarget.Count <= 15 ThenIf Not Application.Intersect(Target, Range('D6:D20')) IsNothingThenFor Each Rng In SelectionWith RngIf .Value = '' Then.Value = '√'Else.Value = ''End IfEnd WithNextEndIfEndIfEnd Sub74、双击指定单元,循环录入文本(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal T As Range, CancelAs Boolean)If T.Address <> '$A$1' Then ExitSubCancel = TrueT = IIf(T = '好', '中', IIf(T = '中', '差', '好'))End Sub75、双击指定单元,循环录入文本(工作表代码)Dim nums As BytePrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)If Target.Address = '$A$1' Thennums = nums Mod 3 + 1Target = Mid('上中下', nums, 1)Target.Offset(1, 0).SelectEnd IfEnd Sub76、单元区域引用(工作表代码)Private Sub Worksheet_Activate()Sheet1.Range('A1:B3').Value = Sheet2.Range('A1:B3').Value End Sub77、在指定区域选择单元时数值加1(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If NotApplication.Intersect([a1:e10], T arget) Is Nothing Then Target = Val(Target) + 1EndIfEnd Sub259个常用宏-excelhome(3)2009-08-15 14:12:5878、混合文本的编号Sub 混合文本的编号()Worksheets(1).Range('B2').Value = '北京' &(--(Mid(Worksheets(1).Range('B2'), 3, 100)) + 1)End Sub79、指定区域单元双击数据累加(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)If Not Application.Intersect([A1:Y100], Target) Is NothingThenoldvalue = Val(Target.Value)inputvalue = InputBox('请输入数量,按ENTER键确认!', '数值累加器')Target.Value = oldvalue + inputvalueEnd IfEnd Sub80、选择单元区域触发事件(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Address = '$A$1:$B$2' ThenMsgBox'你选择了$A$1:$B$2单元'End IfEnd Sub81、当修改指定单元内容时自动执行宏(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [B3:B4]) Is NothingThen 重排窗口End IfEnd Sub82、被指定单元内容限制执行宏Sub 被指定单元限制执行宏()If Range('$A$1') = '关闭' Then Exit Sub窗口End Sub83、双击单元隐藏该行(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)Rows(Target.Row).Hidden = TrueEnd Sub84、高亮显示行(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target AsRange)Cells.Interior.ColorIndex = 2Rows('1:2').Interior.ColorIndex =40 '保持1至2行的颜色推荐39,22,40,Rows(Target.Row).Interior.ColorIndex =35 '高亮推荐颜色35,20,24,34,37,40,15End Sub85、高亮显示行和列(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNoneRows(Target.Row).Interior.ColorIndex = 34Columns(Target.Column).Interior.ColorIndex = 34End Sub86、为指定工作表设置滚动范围(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range)Sheet1.ScrollArea = 'A1:M30'End Sub87、在指定单元记录打印和预览次数(工作簿代码)Private Sub Workbook_BeforePrint(Cancel As Boolean)Range('A1') = 1 + Range('A1')End Sub88、自动数字金额转大写(工作表代码)Private Sub Worksheet_Change(ByVal M As Range)On Error Resume Nexty = Int(Round(100 * Abs(M)) / 100)j =Round(100 * Abs(M) + 0.00001) - y * 100f = (j /10 - Int(j / 10)) * 10A = IIf(y< 1, '', Application.Text(y, '[DBNum2]')& '元')b = IIf(j> 9.5, Application.Text(Int(j / 10), '[DBNum2]')& '角', IIf(y < 1, '', IIf(f> 1, '零', '')))c = IIf(f< 1, '整', Application.Text(Round(f, 0), '[DBNum2]')& '分')M =IIf(Abs(M) < 0.005, '', IIf(M < 0,'负' & A & b & c, A& b & c))End Sub89、将全部工作表的A1单元作为单击按钮(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range)If Target.Address = '$A$1' ThenCall宏名End IfEnd Sub。
1、查找重复内容公式:=IF(COUNTIF(A:A,A2)>1,"重复","")。
2、用出生年月来计算年龄公式:=TRUNC((DAYS360(H6,"2009/8/30",FALSE))/360,0)。
3、从输入的18位身份证号的出生年月计算公式:=CONCATENATE(MID(E2,7,4),"/",MID(E2,11,2),"/",MID(E2,13,2))。
4、从输入的身份证号码内让系统自动提取性别,可以输入以下公式:=IF(LEN(C2)=15,IF(MOD(MID(C2,15,1),2)=1,"男","女"),IF(MOD(MID(C2,17,1),2)=1,"男","女"))公式内的“C2”代表的是输入身份证号码的单元格。
1、求和:=SUM(K2:K56) ——对K2到K56这一区域进行求和;2、平均数:=AVERAGE(K2:K56) ——对K2 K56这一区域求平均数;3、排名:=RANK(K2,K$2:K$56) ——对55名学生的成绩进行排名;4、等级:=IF(K2>=85,"优",IF(K2>=74,"良",IF(K2>=60,"及格","不及格")))5、学期总评:=K2*0.3+M2*0.3+N2*0.4 ——假设K列、M列和N列分别存放着学生的“平时总评”、“期中”、“期末”三项成绩;6、最高分:=MAX(K2:K56) ——求K2到K56区域(55名学生)的最高分;7、最低分:=MIN(K2:K56) ——求K2到K56区域(55名学生)的最低分;8、分数段人数统计:(1)=COUNTIF(K2:K56,"100") ——求K2到K56区域100分的人数;假设把结果存放于K57单元格;(2)=COUNTIF(K2:K56,">=95")-K57 ——求K2到K56区域95~99.5分的人数;假设把结果存放于K58单元格;(3)=COUNTIF(K2:K56,">=90")-SUM(K57:K58) ——求K2到K56区域90~94.5分的人数;假设把结果存放于K59单元格;(4)=COUNTIF(K2:K56,">=85")-SUM(K57:K59) ——求K2到K56区域85~89.5分的人数;假设把结果存放于K60单元格;(5)=COUNTIF(K2:K56,">=70")-SUM(K57:K60) ——求K2到K56区域70~84.5分的人数;假设把结果存放于K61单元格;(6)=COUNTIF(K2:K56,">=60")-SUM(K57:K61) ——求K2到K56区域60~69.5分的人数;假设把结果存放于K62单元格;(7)=COUNTIF(K2:K56,"<60") ——求K2到K56区域60分以下的人数;假设把结果存放于K63单元格;说明:COUNTIF函数也可计算某一区域男、女生人数。
Excel是一款功能强大的电子表格软件,广泛应用于各个行业和领域。
在使用Excel时,我们经常会遇到需要锁定单元格和编写公式的情况。
本文将针对这两个主题展开讨论,从锁定单元格和编写公式的基本概念入手,逐步深入,帮助读者更好地理解和应用Excel中的锁定单元格和公式。
一、锁定单元格锁定单元格是指固定某个单元格的位置或内容,防止其在拖动或复制时发生改变。
在实际使用中,我们经常会遇到需要锁定单元格的情况,以保护重要数据或公式不被误操作或更改。
下面我们将介绍在Excel中如何实现单元格的锁定。
1. 设置单元格保护我们需要打开Excel表格,选中需要锁定的单元格或区域。
依次点击“开始”→“格式”→“单元格”,在弹出的对话框中选择“保护”选项,并勾选“锁定单元格”复选框。
最后点击“确定”按钮,即可完成对选定单元格的锁定设置。
2. 解除单元格保护如果需要解除单元格的保护,只需重复上述步骤,取消“锁定单元格”复选框的勾选状态,然后点击“确定”按钮即可。
3. 设置工作表保护除了单元格保护外,我们还可以对整个工作表进行保护,防止他人对表格的结构和内容进行更改。
方法是依次点击“审阅”→“保护工作表”,在弹出的对话框中设置工作表的保护密码和相关选项,最后点击“确定”按钮完成工作表的保护设置。
二、编写公式在Excel中,公式是非常重要的部分,它可以对数据进行计算、分析和汇总,帮助我们快速准确地得出结果。
下面我们将介绍在Excel中如何编写公式,以及一些常用的公式示例。
1. 基本公式的编写在Excel中,公式通常以等号“=”开头,然后是运算符和参与运算的单元格或数值。
如果我们需要计算A1单元格和B1单元格的和,只需在C1单元格输入“=A1+B1”,然后按下回车键即可得到结果。
2. 使用函数除了基本的运算符外,Excel还提供了丰富的函数库,可以进行更复杂和多样化的计算。
比如SUM函数可以对一列或多列数字进行求和,AVERAGE函数可以计算一组数字的平均值,IF函数可以进行条件判断并返回不同的数值,VLOOKUP函数可以进行查找和匹配等。
利用Excel的宏编辑器进行宏代码的调用和引用Excel作为一款功能强大的电子表格软件,其宏编辑器提供了便捷的编程工具,可以方便地调用和引用宏代码。
通过宏编辑器,我们可以将常用的代码片段进行封装,以便在需要时进行调用,提高工作效率和代码的复用性。
本文将介绍如何利用Excel的宏编辑器进行宏代码的调用和引用,以帮助读者更好地应用Excel宏编程技巧。
一、了解宏编辑器在开始介绍具体的宏调用和引用方法之前,我们先来了解一下Excel中的宏编辑器。
宏编辑器可通过Excel的开发工具中找到,它提供了一个编写和编辑宏代码的环境。
在宏编辑器中,我们可以创建和修改宏代码,并将其保存在Excel工作簿中。
二、宏代码的调用1. 创建宏代码首先,我们需要创建一段宏代码。
在宏编辑器中,可以使用VBA (Visual Basic for Applications,即Visual Basic应用程序设计)语言来编写宏代码。
例如,我们可以创建一个简单的宏代码,用于在Excel中插入当前日期:Sub InsertDate()Range("A1").Value = DateEnd Sub上述代码的功能是将当前日期插入到单元格A1中。
2. 调用宏代码在Excel中,我们可以通过多种方式来调用宏代码。
以下是几种常见的调用方法:(1)使用快捷键可以为宏代码设置一个快捷键,通过按下快捷键来调用该宏。
具体的设置方法是:在宏编辑器中,选择“工具”->“宏”->“宏”菜单,在弹出的对话框中选择需要设置快捷键的宏名,点击“选项”按钮,在“快捷键”栏中选择一个快捷键,如Ctrl+Shift+D,然后点击“确定”按钮。
(2)使用按钮我们可以在Excel的工具栏或自定义菜单中添加一个按钮,通过点击按钮来调用宏代码。
具体的设置方法是:在Excel中,选择“文件”->“选项”->“自定义功能区”,在弹出的对话框中选择一个工具栏或自定义菜单,点击“新建”按钮,在弹出的对话框中选择“宏...”命令,点击“确定”按钮。
在VBA中,如果你想要锁定单元格的公式,你可能想要确保当单元格的内容改变时,公式不会更改。
这可以通过设置单元格的“数据验证”来实现。
以下是一个简单的例子,它展示了如何使用VBA来锁定一个单元格的公式:
vba
Sub LockCellFormula()
' 定义工作表
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' 定义要锁定的单元格
Dim rng As Range
Set rng = ws.Range("A1")
' 清除任何现有的数据验证
rng.Validation.Delete
' 设置新的数据验证,以锁定单元格的公式
rng.Validation.Add Type:=xlValidateFormula, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=SUM(B1:B10)"
End Sub
在这个例子中,我们首先定义了一个工作表和要锁定的单元格。
然后,我们清除了任何现有的数据验证。
最后,我们添加了一个新的数据验证,该验证使用公式来锁定单元格的值。
请注意,这只是一个简单的例子。
你可能需要根据你的具体需求来调整这个代码。
例如,你可能需要调整公式的值,或者你可能需要锁定多个单元格。
利用宏命令锁定Excel公式
为了防止Excel里面做好的公式误被他人修改,通常大家会通过设置“保护工作表”的方式来锁定,但锁定后别人点击就会弹出对话框,很麻烦。
本文介绍一个通过宏命令来锁定公式的方式,别人根本无法点击锁定后的公式单元格,这样就显得很高大上:)
一、录制宏
打开Excel2010,在视图里面找到宏图标(2003版本在工具菜单里寻找),如果没有找到,请打开文件菜单,底部进“选项”,点最下“信任中心”,进入“信任中心设置”,点击“宏设置”,启用宏,然后回到Excel就能找到宏图标了。
点击“录制宏”
选择保存在个人宏工作簿,确定
然后点击右下角的蓝色方块,停止录制
二、编辑Vb宏命令
按Alt+F11,进入Vb工程界面
选择模块1,双击进入编辑模式
将代码栏中的所有内容全部删除
然后把以下代码复制进去(分割线中间)
------------分割线--------------------
Sub 保护公式()
ActiveSheet.Unprotect ("12345678") '解除对工作表的保护
Cells.Select '选中整个表格
Selection.Locked = False '解除锁定
Selection.SpecialCells(xlCellTypeFormulas, 23).Select '选中包含公式的单元格
Selection.Locked = True '添加锁定
Selection.FormulaHidden = True '添加隐藏
ActiveSheet.Protect ("12345678") '保护工作表,并设置密码ActiveSheet.EnableSelection = xlUnlockedCells '让锁定单元格不能选中End Sub
---------------分割线-----------------
然后,结果如下图,请核对
点击文件菜单,选择“关闭并返回Excel”
三、执行宏
点击“查看宏”
点击“执行”,就可以执行了(提示:无内容的空文档执行时会出错,别担心,打开一个有公式的文档,就可以顺利执行了)
四、建立快捷方式
点击“自定义快速访问工具栏”
从下来菜单中选择宏,这时可以看到保护公式的宏,点“添加”
在最顶上就可以看到宏了,以后打开文档后直接点击该按钮,就会自动执行保护公式的宏了。
温馨提示:代码栏中的“12345678”是保护文档的密码,大家可以自由设置密码,可以替换。
其余的代码请不要改变。
如果不想保护公式了,可以通过“取消保护工作表”来实现,密码就是你设置的密码(若未改变则为12345678),然后公式就可以自由修改了。
本文为原创,大家可以自由使用,但谢绝转载。
作者:有风吹过
2014.4.16。