精华内容
下载资源
问答
  • VBAApplication对象的常用属性和方法

    千次阅读 2020-02-01 12:22:05
    1 Application 对象的常见属性 1.0对象管理器里可以查看application的所有属性,方法 Dim i As cell 错误,没有这种类型定义 只能 dim i as range dim sh as sheet dim wb as workbook 1.1 Application...

    1 Application 对象的常见属性

    1.0对象管理器里可以查看application的所有属性,方法

     

    • Dim i As cell  错误,没有这种类型定义
    • 只能
    • dim i as range
    • dim sh as sheet
    • dim wb as workbook

     

    1.1 Application的常见属性

    • Application.screenupdating = False
    • Application.EnableEvents = False
    • Application.DisplayAlerts = False

     

    • Application.DisplayFullScreen = True     ‘设置EXCEL为全屏模式
    • Application.Visible = False                    ‘隐藏excel应用
    • Application.Interactive = False              '禁止用户干预宏代码的执行(禁止所有的输入和鼠标操作)
    •  键盘输入??

     

    1.2  Application的常见方法

    • Application.Undo   '注意和workbook_sheetchange() 事件配合时要慎用
    • Application.getopenfilename
    • applicaiton.wait 
    • applicaiton.Wait (Now + TimeValue("00:00:02"))
    • application.ontime()

     

    2 Application的属性虽然多数是过程级的,但sub结尾需要重置回来

    2.1 Application.screenupdating = False 只能过程sub 或函数中

    2.1.1 只能写在sub过程中,是过程级的变化

    • Application.screenupdating = False 只能过程sub 或函数中
    • 我感觉这是过程级的,过程结束就释放,重置了吧

     

    2.1.2 sub过程结尾还是要把 application属性重置回来

    • sub结束,这个Application.ScreenUpdating = False 生命周期自然失效,所以感觉不需要=true,好像是无所谓的
    • 但是有下面这个例子
    • Application.EnableEvents = True  '结尾如果没这句话,会反复触发,导致EXCEL不刷新了

     

    3  Application.screenupdating = False

    3.1 作用

    • 关闭 “过程中运行时” 屏幕即时刷新,sub 执行完毕后再刷新(sub结束后,此语句设置失效,必然会刷新)
    • 代码1:第1行数字赋值会马上刷新,而第2行会等待几秒
    • 代码2:第1行数字和第2行数字,会等待几秒后一起刷新出来(也就是sub结束时)
    Sub test601()
    
    Range("a5:g5") = 101
    Debug.Print "a5: g5已修改"
    Application.Wait (Now + TimeValue("00:00:05"))
    Range("a6:g6") = 102
    Debug.Print "a6: g6已修改"
    
    End Sub
    

     

    Sub test602()
    
    Application.ScreenUpdating = False
    
    Range("a5:g5") = 101
    Debug.Print "a5: g5已修改"
    Application.Wait (Now + TimeValue("00:00:05"))
    Range("a6:g6") = 102
    Debug.Print "a6: g6已修改"
    
    
    Application.ScreenUpdating = True
    
    End Sub

     

    4  Application.EnableEvents = False

    4.1 Application.EnableEvents=false  非常重要

    • 这个非常重要,避免死循环,避免其他事件打断造成影响
    • 因为  application.undos是吧用户修改继续重置,但是又触发了 workbook_sheetchange()
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    Application.EnableEvents = False
    MsgBox "本工作簿不允许修改"
    Application.Undo
    Application.EnableEvents = True
    End Sub

     

    4.2 Application.EnableEvents = True  

    结尾如果没这句话,会导致EXCEL不刷新了

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    Application.EnableEvents = False
    MsgBox "本工作簿不允许修改"
    Application.Undo
    'Application.EnableEvents = True  '结尾如果没这句话,会反复触发,导致EXCEL不刷新了
    End Sub

     

    5 Application.DisplayAlerts = False

    5.1 基本语法

    • Application.DisplayAlerts 属性 ,显示各种 displayalerts 窗口
    • 注意语法 复数  displayAlerts
    • 如果宏运行时 Microsoft Excel 显示特定的警告和消息,则该属性值为 True。Boolean 类型,可读写。
    • 语法
    • 表达式.DisplayAlerts
    • 表达式   一个代表 Application 对象的变量。
    • 默认值为 True。将此属性设置为 False 可在宏运行时禁止显示提示和警告消息;当出现需要用户应答的消息时,Microsoft Excel 将选择默认应答。
    • 如果将该属性设置为 False,则在代码运行结束后,Microsoft Excel 会将该属性设置为 True,除非运行的是跨进程代码。

     

    5.2 代码改进

    正确1, 不用循环, worksheet变量名写死

    Sub test_sh2()
    Application.DisplayAlerts = False
    
    For i = 1 To 3
       Worksheets.Add
       ActiveSheet.Name = i & "月"
    Next
    
       Worksheets("1月").Delete
       Worksheets("2月").Delete
       Worksheets("3月").Delete
       '有没有worksheet 名称用变量合成的办法?
    
    Application.DisplayAlerts = True
    
    End Sub

     

    • For i = 1 To Worksheets.Count   '默认的是thisworkbook
    • 有没有worksheet 名称用变量合成的办法?--变量名是可以合成的  Worksheets(i & "月").Delete
    Sub test_sh2()
    Application.DisplayAlerts = False
    
    For i = 1 To 3
       Worksheets.Add
       ActiveSheet.Name = i & "月"
    Next
    
    
    '有没有worksheet 名称用变量合成的办法?--可以
    For i = 1 To 3
       Worksheets(i & "月").Delete
    Next
    
    Application.DisplayAlerts = True
    
    End Sub

     

    错误代码

    • 为啥3个表都删了,还问我下标越界?因为循环写错了
    Sub test_sh2()
    Application.DisplayAlerts = False
    
    For i = 1 To 3
       Worksheets.Add
       ActiveSheet.Name = i & "月"
    Next
    
    '为啥3个表都删了,还问我下标越界?--因为这是错误代码
    For i = 1 To Worksheets.Count   '默认的是thisworkbook
       Worksheets("1月").Delete
       Worksheets("2月").Delete
       Worksheets("3月").Delete
       '有没有worksheet 名称用变量合成的办法?
       
    Next
    
    
    Application.DisplayAlerts = True
    
    End Sub
    

     

    6 application.activecell()  却不能与 workbook  worksheet连用。

     

    • Window.ActiveCell 属性 
    • 返回一个 Range 对象,它代表活动窗口(最上方的窗口)或指定窗口中的活动单元格。如果窗口中没有显示工作表,此属性无效。只读。
    • 语法
    • 表达式.ActiveCell
    • 表达式   一个代表 Window 对象的变量。
    • 说明
    • 如果不指定对象识别符,此属性返回活动窗口中的活动单元格。
    • 请仔细区分活动单元格和选定区域。活动单元格为选定区域内部的一个单元格。而选定区域可以包含多个单元格,但只有一个单元格为活动单元格。
    • 下列表达式都是返回活动单元格,并且都是等效的。
    • Visual Basic for Applications 
    1. ActiveCell
    2. Application.ActiveCell
    3. ActiveWindow.ActiveCell
    4. Application.ActiveWindow.ActiveCell 

     

    Sub test_sh2()
    
    Debug.Print "activecell只能单独使用,不要和sh wb混用连用"
    Application.ActiveCell.Value = 22
    ActiveCell = 11
    ActiveWindow.ActiveCell = 55
    Application.ActiveWindow.ActiveCell = 66
    
    '而以下全部都是错误的,不知道为啥
    'Application.ThisWorkbook.ActiveSheet.ActiveCell.Value = 33
    'ThisWorkbook.ActiveSheet.ActiveCell.Value = 33
    'ActiveSheet.ActiveCell.Value = 33
    'Worksheets("sheet3").ActiveCell = 777
    
    Debug.Print "结合sh,wb使用cell,好像只能用cells() range() 不能用activecell()"
    Worksheets("sheet3").Cells(14, 2) = 555
    
    
    End Sub

     

    7 application.wait 等待时间后执行

     

    Sub tt5()
    
    Debug.Print Time
    Debug.Print Format(Now, "yyyy/mm/dd")
    Debug.Print Format(Now, "yy/m/d")   '可以试试写成"yy/m/d"
    Debug.Print Format(Now, "y/m/d")   '可以试试写成"y/m/d"
    Debug.Print Format(Now, "hh/mm/ss")
    Debug.Print Format(Now, "h/m/s")
    
    t1 = Time
    Application.Wait (Now + TimeValue("00:00:05"))
    Debug.Print Format(Time - t1, "hh/mm/ss")
    
    
    End Sub

     

    8  application.ontime 定时执行

    8.1 application.ontime 语法

    • 安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后)。
    • 语法
    • 表达式.OnTime(EarliestTimeProcedureLatestTimeSchedule)
    • 表达式   一个代表 Application 对象的变量。
    • 参数
    名称必选/可选数据类型说明
    EarliestTime必选Variant希望此过程运行的时间。
    Procedure必选String要运行的过程名。
    LatestTime可选Variant过程开始运行的最晚时间。例如,如果 LatestTime 参数设置为 EarliestTime + 30,且当到达EarliestTime 时间时,由于其他过程处于运行状态而导致 Microsoft Excel 不能处于“就绪”、“复制”、“剪切”或“查找”模式,则 Microsoft Excel 将等待 30 秒让第一个过程先完成。如果 Microsoft Excel 不能在 30 秒内回到“就绪”模式,则不运行此过程。如果省略该参数,Microsoft Excel 将一直等待到可以运行该过程为止。
    Schedule可选Variant如果为 True,则预定一个新的 OnTime 过程。如果为 False,则清除先前设置的过程。默认值为True

     

    1 Application.OnTime 使用时的局限性

    • Application.OnTime
    • 局限性1 不再一个模块内的 过程/函数 不能被找到
    • 局限性2 一个神奇BUG,如果 过程/函数名字带数字,直接双引号会报找不到宏,需要里面再加一层单引号 如"'t7'"
    • 问题3,函数的调用好像比sub 快一些

     

    8.1 延后执行

     

     

     

    2 application.ontime 调用其他sub /function 时,显示无法执行宏的解决办法,需要里面再加一层单引号 如"'t7'"

    • 下面这2种写法,正常都是正确,但都会报错
    • Application.OnTime Now + TimeValue("00:00:02"), procedure:="t7"
    • Application.OnTime Now + TimeValue("00:00:02"), procedure:="t7()"
    • 需要里面再加一层单引号 如"'t7'" 就可以找到对应 sub /function  不会报错
    Sub t6()
    
    Debug.Print "开始调用"
    Application.OnTime Now + TimeValue("00:00:02"), procedure:="'t7'"
    Application.OnTime Now + TimeValue("00:00:02"), "'t8'"
    Debug.Print "继续往下执行,不等待外部调用"
    
    End Sub
    
    
    Public Sub t7()
       Debug.Print "hello world1"
    End Sub
    
    
    Function t8()
        Debug.Print "hello world2"
    
    End Function

     

     

     

    VBA 中,不接收参数的子例程或函数不需要圆括号。否则,在声明中需要圆括号。

    在VBA编辑器的模块中运行如下代码

    Sub showTime()
    Application.Caption = Now()
    Application.OnTime(Now() + TimeValue("00:00:01"), "showTime")
    End Sub

    会出现 编译错误 缺少:=

    原因:
    Application.OnTime(Now() + TimeValue("00:00:01"), "showTime")
    不需要返回值,所以Application.OnTime函数不用加括号,去掉括号即可,改成如下代码

    Sub showTime()
    Application.Caption = Now()
    Application.OnTime Now() + TimeValue("00:00:01"), "showTime"
    End Sub

     

     

     

    8.2 定时运行

     

     

    Sub ta()
    
    Debug.Print "ok"
    Application.OnTime TimeValue("12:53:02"), procedure:="tb"
    
    End Sub
    
    
    Public Sub tb()
       Debug.Print "hello world1 "
    End Sub
    
    

     

     

     

    局限性1 不再一个模块内的 过程/函数 不能被找到

    问题3,函数的调用好像比sub 快一些
    Debug.Print "开始倒计时 秒?"
    Debug.Print "继续往下执行,不等待外部调用"

    End Sub

    '4个参数

     

    https://blog.csdn.net/znyang/article/details/12201459

    https://blog.csdn.net/huzhizhewudi/article/details/84497476

     

     

     

     

    https://jingyan.baidu.com/article/fa4125aceabbf528ac709287.html

    http://club.excelhome.net/thread-848141-1-1.html

    http://club.excelhome.net/thread-1148787-1-1.html

    https://zhidao.baidu.com/question/559892540.html

    http://m.reader8.cn/show-2191445.html

    http://club.excelhome.net/forum.php?mod=viewthread&tid=941375&highlight=

    https://zhidao.baidu.com/question/447345258.html

    http://club.excelhome.net/thread-784974-1-1.html

     

     

    以下代码有问题,需要用变量传递时间?

    http://club.excelhome.net/thread-986364-1-1.htm

    VBA ontime 作用于application对象失败

     

     

    Sub ta()
    
    'On Error Resume Next
    
    Debug.Print "准备调用"
    Application.OnTime earliesttime:=Now + TimeValue("00:00:02"), procedure:="tb", schedule:=False
    Debug.Print "继续执行"
    
    'procedure:="tb", schedule:=False
    'latesttime:=TimeValue("12:53:02") + TimeValue("00:00:59")
    End Sub
     
     
    Public Sub tb()
       Debug.Print "hello world1 "
    End Sub
     

     


     

     

     

     

    9 application.onkey 

    展开全文
  • 微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),可以认为VBA是非常流行的应用程序开发语言VASUAL BASIC 的子集.实际上VBA是"寄生于"VB应用程序的版本.VBA和VB的...
  •  http://blog.sina.com.cn/s/blog_8c2a8f390102w89p.html
    展开全文
  • 10_Application对象的ScreenUpdating属性_ExcelVBA其实很简单视频导读
  • VBA Application 的四大方法

    千次阅读 2020-03-25 16:08:30
    a = Application.FindFile MsgBox a If a = True Then MsgBox "dd" Else MsgBox "tt" End If End Sub getopenfilename 这个函数和findfile有点不一样,这个函数是不会打开相关文件的,只会返回...

    findfile

    findfile 就是打开一个问题如果打卡成功,则返回为true

    Sub b()
    a = Application.FindFile
    MsgBox a
    If a = True Then
    MsgBox "dd"
    Else
    MsgBox "tt"
    End If
    End Sub
    

    getopenfilename

    这个函数和findfile有点不一样,这个函数是不会打开相关文件的,只会返回文件的名字奥利给兄弟们

    Sub b()
    a = Application.GetOpenFilename‘弹出来的名字是带着路径和后缀的
    MsgBox a
    End Sub
    

    FileFilter
    可以选择一些相关的细节,之后可以持续补充

    getsaveasfilename

    据说这个玩意也就是返回一个路径和名字,那和上面那个open的函数,有啥子区别啊
    具体一些参数用到了之后再说吧

    filedialog

    这个玩意也是获取路径的,获取路径的法子那么多,这个以后遇到了再说吧

    展开全文
  • vbaApplication.Run

    千次阅读 2020-04-28 13:17:46
    'module3 Sub Macro1() MsgBox 1 End Sub Sub Macro2() MsgBox 2 Application.Run "Macro1" End Sub Function f1(a) MsgBox a & "module3" f1 = a End Function 'module4 Sub maCRO2() ...
    'thisworkbook.module3
    Sub Macro1()
        MsgBox 1
    End Sub
    
    Sub Macro2()
        MsgBox 2
        Application.Run "Macro1"
    End Sub
    
    Function f1(a)
        MsgBox a & "module3"
        f1 = a
    End Function
    
    'thisworkbook.module4
    Sub maCRO2()
      Application.Run ("Macro1")
    End Sub
    
    Function f1()
        f1 = "module4"
        MsgBox f1
    End Function
    
    'thisworkbook.module5
    Sub test1()
       Application.Run "Macro2"				'ng
    End Sub
    
    Sub test2()
       Application.Run("module3.Macro2")	'ok
    End Sub
    
    Sub test3()
       f1r = Application.Run "module4.f1"	'ok
    End Sub
    
    Sub test4()
       f1r = Application.Run("module3.f1", 1)	'ok
    End Sub
    
    Sub test5()
       f1r = Application.Run("'2.xlsm'!module2.f1", 1)	'ok
    End Sub
    
    Sub test6()
       Application.Run "'2.xlsm'!module2.s1"	'ok
    End Sub
    
    Sub test7()
       Application.Run ("'C:\Users\user\Desktop\3\2.xlsm'!module2.s1")	'ok
    End Sub
    
    Sub test8()
       f1r = Application.Run("'C:\Users\user\Desktop\3\2.xlsm'!module2.f1", 1)	'ok
    End Sub
    
    '2.xlsm-->module1
    Sub s1()
        MsgBox "s1"
    End Sub
    
    '2.xlsm-->module2
    Sub s1()
        MsgBox "m2s1"
    End Sub
    
    Function f1(a)
        f1 = a
        MsgBox f1
    End Function
    

    调用方法:

    • application.run 方法名,参数1,参数2,xxx
    • application.run (方法名,参数1,参数2,xxx)

    两种方法都可以,如果要返回值只能调用第二种,即result=application.run (方法名,参数1,参数2,xxx)

    同一个excel文件的方法调用:

    module3/4/5在同一个excel文件。module5利用application.run调用其他module的sub/function时,如果该sub/function名在所有module里唯一,可以不加模块名(推荐全加模块名)。否则报错,需要模块名.方法名调用。
    模块名和方法名都不区分大小写。

    不同excel文件的方法调用:

    • 方法1:Application.Run " ‘文件名’ “!模块名.方法名”
    • 方法2:Application.Run " ‘路径+文件名’ “!模块名.方法名”
      必须带上文件名和模块名,即使方法在该文件唯一。且文件名两边有单引号,文件名和模块名间有!。
      如果被调用的工作簿是打开状态,方法1和方法2都可以。如果是关闭状态,方法2会打开路径+文件名进行调用,方法1会打开当前文件路径+文件名进行调用。
    展开全文
  • Excel VBA:Application对象

    2020-01-13 19:37:59
    Application 对象 代表整个 Microsoft Excel 应用程序。 说明 Application 对象包括: 应用程序范围的设置和选项。 返回顶级对象的方法,如 ActiveCell 和 ActiveSheet 等。 示例 使用 Application 属性可返回...
  •  Application.ScreenUpdating = False '禁止屏幕更新  Application.ScreenUpdating = True '允许屏幕更新  Application.DisplayAlerts = False '禁止出现提示对话框  Application.DisplayAlerts = True ...
  • Application对象代表Excel程序本身,它就像一棵树的根,Excel中所有的对象都以它为起点。实际编程时,会经常用到它的许多属性和方法。 1.用ScreenUpdating属性设置是否更新屏幕上的内容 在使用Excel解决一个问题时...
  • 加速Visual Basic For Application(VBA) VB技术很实用的源码关于vb网络的编程基础知识winsock控件的使用,简单的聊天程序,局域网的网络编程
  • 之前在工作中写了一个VBA工具,可以通过保存文件到指定目录,如图1所示,但是一直存在一个问题,就是需要手动添加目录。今天实在觉得还是比较麻烦,所以查资料进行如下优化: 图1 '先判断文件夹是否存在,如果...
  • Application.OnKey "+^K", "VBA条件格式" End Sub Application. OnKey方法 通过Application. OnKey方法可以为宏指定快捷键,其语法为: Application.OnKey(Key[.Procedure]) 其中,Key参数为一个文本,表示...
  • FileDialog 对象 提供文件对话框,其功能与 Microsoft Office 应用程序中标准的...FileDialog 属性位于每个单独 Office 应用程序的 Application 对象中。该属性使用一个参数 DialogType确定该属性返回的 FileDialo...
  • 'Application.Intersect 方法'返回一个 Range 对象,该对象表示两个或多个区域重叠的矩形区域。 PS:Is Nothing 用于判断对象是否存在,对象可以是工作簿,工作表,单元格区域等 教学代码: 1 Sub test() 2 ...
  • 安装office的时候,应该定制安装,在“office 工具”里选上“Visual Basic帮助”,这样就能获得非常完善的关于VBA编程环境、VBA语言参考、VBA对象等的帮助文档。从“工具”->“宏”->“Visual Basic 编辑器”可以...
  • Excel VBA 入门(1) - Application常用属性

    万次阅读 2013-10-02 22:33:46
    Excel VBA的语法就不多说了, 从最重要的Application开始 Application对象代表Excel程序本身, 对Application的操作会直接影响Excel程序 废话不多说, 直接上代码 1.ActiveCell 当前激活的(1个)单元格, 一个Range对象,...
  • WPS软件vba的对象属性大全,开发文档;VBA属性
  • 在Excel VBAApplication类中有很多常用的功能,这里总结一下我用到过的,以后有好用的我也会逐渐更新。 代码code 取消/开启屏幕刷新 说明:取消屏幕刷新后代码运行时,我们看不到实时的效果,但是能够加速代码...
  • Excel VBA - Application对象

    千次阅读 2011-10-27 23:05:42
    Application.Version 显示Excel的版本号 Application.UserName 显示当前用户的用户名 Application.StatusBar = "状态栏" 状态栏显示内容 Application.StatusBar = False 状态栏不显示内容 Application.Wait ...
  • autocad 2018 VBA帮助文档

    2018-03-13 17:08:00
    autocad 2018 VBA帮助文件,内含详细的autocad开发api和相应示例
  • Application.WorksheetFunction.Match() 会报错,中断程序 Application.Match() 会报错,但不会中断程序 备注点: Application.Match("",arr1,0) 错误 Application.Match("",arr1,0) 正确,不要加引号,否则会查...
  • Excel VBA 入门(2) - Application常用方法

    千次阅读 2013-10-02 22:34:25
    上一篇介绍了Application的常用属性,这一节,我们列举一些常用的方法(包括事件) 1. 打开一个磁盘上的Excel文件 Application.Open  添加一个新的工作簿, Application.Add  Application.WorkBooks.Open ("C:\book...
  • Microsoft Visual Basic for Applications 7.0 在金山WPS中使用excel必需的插件。实测绝对可用 兼容WPS2019
  • ExcelVBA语法速查手册

    2019-07-19 11:14:15
    第3篇主要介绍了VBA中各种对象模型的使用,包括Application对象、Workbook工作簿对象、Worksheet对象、Range对象的属性和操作方法,以及Chart对象属性、方法及其事件。第4篇主要介绍了如何使用窗体、控件和操作文件...
  • Visual Basic For Application(VBA)教程
  • VBA编程时inputbox 有两种用法,一个是inputobx函数,一个是application.inputbox方法,两者用法差不多,差别在后者多了输入类型,导致返回值也有很大不同。 1、inputobx函数在输入字符串后点击“确认”按钮返回字符...
  • application.index() 用法 range() 从EXCEL拿出来的必然都是2维数组 arr1=range("a1:c5") '取出来的是一个2维数组 arr2=range("a1:d1") '取出来的看着是1行,但不是一维数组,实际是一个2维数组 arr3=range("a1:...
  • VBA GetText包含多个Visual Basic for Application模块和类,以启用VBA项目的国际化(I18N)和本地化(L10N)。 它使用GNU gettext兼容的PO文件格式进行字符串翻译。 因此,翻译人员将能够使用标准的PO文件翻译工具...
  • 发现一个现象,当Application.Calculation为自动计算状态时,如果工作表中存有公式,2003版似乎并不降低VBA的运行速度,但2007版则影响很大,速度降低的特别明显,尤其是数据量大时,速度降低的令人难以忍受。...
  • EXCEL vba 循环复制 粘贴 另存为 新的文件VBA代码 分别设置单元格内容 With Workbooks(ThisWorkbook.Name) Application.EnableEvents = False Application.ScreenUpdating = False Application.DisplayAlerts = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,740
精华内容 4,696
关键字:

applicationvba