当前位置:主页 > Office办公 > Excel专区 > Excel函数

最新发布

利用VBA读写excel文档属性
利用VBA读写excel文档属性

要实现限制文件的使用次数,想来应该在某个地方存储文档已用的次数,并且在文档每被使用一次这个使用次数就得发生相应的更改。如果这个思路正确的话,我们就可以利用文档属性的某个位置来实现这一想法,故有了以下两种形式:一、利用自定义属性:因为我们可以自定义数字型的属性,这一点非常符合我们的需求先用一行代码ThisWorkbook.CustomDocumentProperties.Add Name:="open_times",LinkToContent:=False,Type:=msoPropertyTypeNumber,Value:=10来定义一个名为open_times的数字型属性、初始值为10。当然也可以手动定义然后在文档的打开事件中写入:Private Sub Workbook_Open()If ThisWorkbook.CustomDocumentProperties("open_times")1 Then MsgBox"可用次数已小于1"Else ThisWorkbook.CustomDocumentProperties("open_times")=ThisWorkbook.CustomDocumentProperties("open_times")-1 End If End Sub注:1、这里我们只讨论在必须启用宏的情况下。2、这里只写了打开文档的次数,要想保存、修改等等,请作相应改动。3、限制的代码请自行修改,此处只写了MsgBox"可用次数已小于1"这么一个提示信息二、上一个方法自然、直观,但不隐蔽。再利用内置文档属性直观上不容易发现的:先用一行代码ThisWorkbook.BuiltinDocumentProperties.Item("comments")=""将备注清空,然后文档每打开一次其备注增加一个空格,再判断其长度,当长度达到我们的限制要求时,作相应操作:Private Sub Workbook_Open()ThisWorkbook.BuiltinDocumentProperties.Item("comments")=ThisWorkbook.BuiltinDocumentProperties.Item("comments")&""If Len(ThisWorkbook.BuiltinDocumentProperties.Item("comments"))10 Then MsgBox"已超过可用次数"End If End Sub注:同前,限制的代码请自行修改,此处只写了一个提示信息

183 次浏览
怎样让Excel窗口总在最前面?
怎样让Excel窗口总在最前面?

有时我们需要让Excel窗口总是显示在最前面而不被别的窗口挡住,虽然Excel并没有提供这样的功能,但可以用下面的方法:方法一:使用软件能够实现让窗口总在最前面的软件非常多,例如“前台小精灵2.0”就是这样一款绿色的免费小软件,它能让任意窗口“始终在最前面”,可以到“华军软件园”的相关页面下载(单击这里打开下载页面)。软件的使用也非常简单:先设置前台和恢复热键,然后激活需要设置的Excel窗口,按下前台热键即可。 方法二:用VBA代码在VBA中使用API函数“SetWindowPos”可以让Excel窗口总在最前面。步骤如下:1.新建一个工作簿,按Alt+F11,打开VBA编辑器。2.单击菜单“插入→模块”,在右侧的代码窗口中粘贴下列代码:Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _ByVal hwndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongConst HWND_TOPMOST = -1Const HWND_NOTOPMOST = -2Const SWP_NOSIZE = &H1Const SWP_NOMOVE = &H2

297 次浏览
excel自定义函数获取多个单元格中相同的字符
excel自定义函数获取多个单元格中相同的字符

要在Excel中获取区域内各单元格字符串中的相同字符,可用下面的自定义函数。例如要在D1单元格获取A1:C1区域各单元格中相同的字符,如图: 按Alt+F11,打开VBA编辑器,单击菜单“插入→模块”,在代码窗口中输入自定义函数:Function GetDupChars(rRng As Range) As StringApplication.VolatileDim i As Integer, j As Integer, k As IntegerDim Str As StringStr = rRng.Item(1).TextFor i = 1 To Len(Str)k = 0For j = 2 To rRng.Cells.CountIf InStr(rRng.Item(j).Text, Mid(Str, i, 1)) Then k = k + 1NextIf k = j – 2 And InStr(GetDupChars, Mid(Str, i, 1)) = 0 _Then GetDupChars = GetDupChars & Mid(Str, i, 1)NextEnd Function然后关闭VBA编辑器,在D1单元格中输入公式即可:=GetDupChars(A1:C1)

155 次浏览
Excel中计算阶乘(n!)的VBA代码
Excel中计算阶乘(n!)的VBA代码

在Excel中可以通过FACT函数来计算非负整数n的阶乘(n!),而如果要通过VBA来计算阶乘,可以用下面的两个自定义函数:1.使用循环:Function Factorial_a(ByVal Num As Integer)If Num < 0 ThenFactorial_a = "#NUM!"ElseFactorial_a = 1For i = 1 To NumFactorial_a = Factorial_a * iNextEnd IfEnd Function2.使用递归:Function Factorial_b(ByVal Num As Integer)If Num < 0 ThenFactorial_b = "#NUM!"ElseIf Num = 0 Or Num = 1 ThenFactorial_b = 1ElseFactorial_b = Num * Factorial_b(Num – 1)End IfEnd Function

124 次浏览
如何恢复excel VBA编辑器的默认窗口布局
如何恢复excel VBA编辑器的默认窗口布局

在使用VBA编辑器时,如果无意间弄乱了窗口布局,使各窗口不在其默认位置,使用起来有些不便。要恢复默认的VBA编辑器窗口布局,可以用下面的两种方法:方法一:手工调整1.在VBA编辑器中,单击菜单“工具→选项”,在弹出的“选项”对话框中选择“可连接的”选项卡,勾选不在默认位置的窗口选项,如“工程资源管理器”、“属性窗口”等。单击“确定”按钮。 2.假如要将“工程窗口”调整到默认的左侧位置,用鼠标左键拖动“工程”窗口的标题栏,移动到VBA编辑器的左侧边界,这时“工程”窗口的边缘会变成灰色细线,松开鼠标左键,“工程”窗口就会被定位到VBA编辑器的左侧。 3.用同样的方法将其他窗口定位到其默认位置。如果定位错误可以拖动该窗口标题栏将其拖回到VBA编辑器*(或双击标题栏)再重新定位。如果在第一步“可连接的”选项卡中某个窗口没有被勾选,当拖动该窗口到VBA编辑器边界时,就不会出现灰色细线,因而也无法用这个方法来定位该窗口。方法二:修改注册表用这个方法可以恢复默认的VBA编辑器窗口布局,修改前清备份注册表。1.关闭VBA编辑器和Excel。

477 次浏览
利用Excel VBA快速汇总会议回执实例教程
利用Excel VBA快速汇总会议回执实例教程

某单位组织一次大型会议,要求各参会单位填写好会议回执后传回,再进行汇总。回执是用Excel制作的,有一个统一的标题行。由于参会单位和参会人员众多,返回的Excel文件很多,手工逐一汇总比较麻烦。这时用VBA可快速解决问题,示例文件下载 示例文件 如图所示,会议回执在工作簿的第一个工作表中,参会人员信息从第4行开始填写,共5列,各个单位的参会人员可能不同。汇总工作簿与回执工作簿具有相同的行标题。 将所有收到的回执和汇总工作簿放到某个文件夹中,注意该文件夹内不能包含其他非回执Excel文件,打开汇总工作簿并选择汇总工作表,按Alt+F11,在VBA编辑器中单击菜单“插入→模块”,将下列代码粘贴到代码窗口内执行,即可将所有回执工作簿第一个工作表中的人员信息自动复制到汇总工作簿的第一个工作表。Sub 回执汇总()Dim ThePath As String, TheFile As StringDim Wbk As WorkbookOn Error Resume NextApplication.ScreenUpdating = FalseRange("A4:F65536").ClearContentsThePath = ThisWorkbook.Path & "\"TheFile = Dir(ThePath & "*.xls")Do While TheFile <> ""If TheFile <> ThisWorkbook.Name ThenSet Wbk = GetObject(ThePath & TheFile)With Wbk.Worksheets(1)‘复制有内容的分表数据到汇总表If .[a65536].End(xlUp).Row > 3 Then.Range("A4:E" & .[a65536].End(xlUp).Row).Copy ThisWorkbook.Worksheets(1).[a65536].End(xlUp).Offset(1)End IfEnd WithWbk.Close FalseEnd If‘当前文件夹内的下一个工作簿TheFile = DirLoopApplication.ScreenUpdating = TrueEnd Sub

122 次浏览
excel关闭工作簿时提醒某区域不能为空解决方案
excel关闭工作簿时提醒某区域不能为空解决方案

有时需要把设计好的Excel表格交给许多用户填写,如果表格中有一些单元格为必填项,当一些用户未填写这些单元格时,逐一检查这些表格显得有些繁琐。通常的方法是通知用户或通过设置条件格式、设置批注等方式进行提醒,但难免有的用户还是忘记填写。在这种情况下可以用通过下面的宏代码,当用户在关闭工作簿时进行提醒,如果指定的单元格为空则不能关闭工作簿。假如工作簿中“Sheet1”表的数据区域中C列为必填区域,步骤如下:1.按Alt+F11打开VBA编辑器,在“工程”窗口中双击“ThisWorkbook”。2.在代码窗口中输入下列代码:Private Sub Workbook_BeforeClose(Cancel As Boolean)If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.Name = "Sheet1" _And ActiveCell.Row = 1 And ActiveCell.Column = 1 Then EndIf ThisWorkbook.Saved = True ThenFor i = 2 To Sheet1.Cells(65536, 1).End(xlUp).RowIf Sheet1.Cells(i, 3) = "" ThenMsgBox ThisWorkbook.Name & ": " & Sheet1.Name & "表C列有未填数据!", , "提示"Sheet1.ActivateCells(i, 3).SelectCancel = TrueEndEnd IfNextElseMsgBox "数据未保存,请保存工作簿!"Cancel = TrueEnd IfEnd Sub当Sheet1表数据区域中C列有未填数据时,只有在下面的情况下才能正常关闭工作簿,否则Excel会弹出一个对话框提醒用户并跳转到指定的单元格。一、C列的数据区域(例如本文结尾处示例文件中的C2:C10)无未填数据。二、选择“Sheet1”表的A1单元格后关闭工作簿。三、删除VBA代码后关闭工作簿。当需要把表格交给其他用户填写时,可以在保留C列为空的情况下,通过方法二和方法三正常关闭工作簿。对于其他用户,通常不会采用这两种方法关闭工作簿,因而可以起到提醒用户的作用。

237 次浏览
Excel工作表批量重命名的方法
Excel工作表批量重命名的方法

本文介绍Excel工作表单一文件和批量重命名文件的方法。  excel工作表重命名的方法有下面几种:  第一,单击菜单“格式”——“工作表”——“重命名”。  第二,单击工作表标签,右键选择“重命名”。  第三,双击工作表标签,直接对工作表重命名。  上面三种方法,都可以对Excel工作表重命名,不过都是一个一个工作表分别重命名。  如何做到excel工作表批量重命名呢?有下面两种方法,供参考:  第一种:利用Excel工作表现有单元格内容进行批量重命名。  例如:Excel工作表默认标签为sheet1,sheet2,sheet3,sheet4。如何快速重命名为1月销售表,2月销售表,3月销售表,4月销售表。  sheet1工作表A1:A4单元格内容是1月销售表,2月销售表,3月销售表,4月销售表。  方法:按下ALT+F11,打开VBE窗口,单击插入——模块,复制下面代码,并运行。Sub 按A列数据修改表名称()On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息Application.Calculation = xlCalculationManual ‘手动重算Dim i%For i = 1 To Sheets.CountSheets(i).Name = Cells(i, 1).TextNextOn Error GoTo 0 ‘恢复正常的错误提示Application.Calculation = xlCalculationAutomatic ‘自动重算End Sub  第二种:直接批量重命名Excel工作表。Sub 新工作表名()Dim i As LongApplication.ScreenUpdating = FalseFor i = 1 To Worksheets.CountWorksheets(i).Name = "报表" & iNext iApplication.ScreenUpdating = TrueEnd Sub  上面5种方法,想必能帮你解决Excel工作表批量重命名的问题。

118 次浏览
Excel VBA中debug.print解释和使用介绍
Excel VBA中debug.print解释和使用介绍

VBA 中Debug.Print 是什么意思? debug.print的使用方法是怎样的呢?  VBA 中Debug.Print 的作用是将代码执行结果显示在“立即窗口”中。比如,我们按ALT+F11组合键,打开VBE窗口,插入——模块,输入下面的代码:Sub 测试()Debug.Print "ab"End Sub  将光标定位域代码中任意位置,按F5键执行代码,在立即窗口就会显示代码执行结果。  下图就是执行Debug.Print "ab"的效果。   又比如我们插入——模块,输入下面的代码:Sub 立即窗口显示结果() Debug.Print 300 * 2 + 50End Sub  同样的,F5键执行Debug.Print 300 * 2 + 50这句代码,在立即窗口就会显示出650。

218 次浏览
excel VBA快速取消工作簿中各工作表的自动筛选
excel VBA快速取消工作簿中各工作表的自动筛选

当工作簿中的工作表数量较多时,要快速取消各个工作表中的自动筛选可以下面的VBA代码。 1.按Alt+F11,打开VBA编辑器。2.在代码窗口中输入下列代码Sub RemoveAllAutoFilter()Dim sht As WorksheetFor Each sht In ActiveWorkbook.WorksheetsIf sht.AutoFilterMode = True Then sht.AutoFilterMode = FalseNextEnd Sub3.关闭VBA编辑器,按快捷键Alt+F8,打开“宏”对话框,选择包含“RemoveAllAutoFilter”的宏名,并单击“执行”按钮。

134 次浏览
共计5788条记录 上一页 1.. 67 68 69 70 71 72 73 ..579 下一页