精华内容
下载资源
问答
  • vbachange事件

    千次阅读 2009-01-21 18:20:00
    现在对vba中的change事件有了比较清晰的认识,也明白了quer插在excel里是怎样的一个状态。为了让报表可以打开时自动运行动态报表,必须用到change事件,如果谁有更好的方法请一定通知我。之前认为会计年度,记账期间...

    现在对vba中的change事件有了比较清晰的认识,也明白了quer插在excel里是怎样的一个状态。为了让报表可以打开时自动运行动态报表,必须用到change事件,如果谁有更好的方法请一定通知我。之前认为会计年度,记账期间,还有公司代码只要有一个改变就会触发change事件。后来才发现其实即使不变也会触发change事件,为什么了,原来query再刷新时所有数据都会变化,所以根本不用用三个单元格来判断,只用一个进行判断就可以了。代码如下:

    • If Target.Address = "$B$10" Then
    •        Main
    • End If

    这个项目对BW和VBA,excel熟悉了很多,明年继续努力!

    展开全文
  • 在自动筛选数据时,每次修改筛选字段后再去执行VBA进行筛选还是会比较麻烦。若要在修改筛选字段后,自动完成筛选,可以通过如下操作进行。1. 在打开Visual Basic后,双击项目工程的Sheet1,也就是要执行筛选数据的...

    在自动筛选数据时,每次修改筛选字段后再去执行VBA进行筛选还是会比较麻烦。

    f73b912717cd2c24ca1446dc17cbd2ee.png

    若要在修改筛选字段后,自动完成筛选,可以通过如下操作进行。

    1. 在打开Visual Basic后,双击项目工程的Sheet1,也就是要执行筛选数据的工作表。

    349e44d9674eb5a399a9406df2746ea6.png

    2. 在代码框的“通用”选择Worksheet。

    64d3a34c4c70c8fb0c9043187ac902e8.png

    3. 代码框的“声明”选择“Change”。

    b3ca2ad2dc8edc07398953dc5eb1b928.png

    4. 将自动筛选的代码复制到Change事件的过程中。

    b079394bacebcc5720fada8b13bddf72.png

    自动筛选的代码请参考以下文章:

    GIL214:Excel VBA自动筛选数据zhuanlan.zhihu.com
    zhihu-card-default.svg

    5. 在自动筛选的代码前后添加一个主程序的属性,在执行筛选之前先关闭事件。修改筛选字段时已经触发了Change事件,然后再次执行筛选的同时表格也发生变化,此次变化时不用触发事件。

    514615f8830dfe2e69ed40ff5b481d55.png
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Application.EnableEvents = False
    
    Sheet1.Range("J1:O2000").ClearContents
    
    Sheet1.Range("A1:F30").AutoFilter field:=2, Criteria1:=Sheet1.Range("H2")
    
    Sheet1.Range("A1:F30").Copy Sheet1.Range("J1")
    
    Sheet1.Range("A1:F30").AutoFilter
    
    Application.EnableEvents = True
    
    End Sub

    6. 回到Excel工作表中,当修改了班级后,就会自动筛选出对应的结果,不用再点击执行代码或宏了。

    819f31c45f7dd9cb938ab912538a5a89.png
    展开全文
  • 这几天做报表用的vba,我用程序把数据写到excel里。但是excel里workshtet_change不执行。查了一下代码也没发现。不知道是什么原因,求大侠指教。 Private Sub Worksheet_Change(ByVal Target As Range) If Target....
  • VBA中,当执行“打开工作簿”、“选择工作表”、“改变单元格的内容”等操作时,可以由此为触发条件(事件)自动执行某些过程。把由这些特定的操作触发并且自动被执行的过程,叫做事件过程。事件过程是编写在触发...

    c8ccff85bae55a4c94293c3915e42242.png

    7824245e6851dcb87b1fd519b7482b98.gif

    在VBA中,当执行“打开工作簿”、“选择工作表”、“改变单元格的内容”等操作时,可以由此为触发条件(事件)自动执行某些过程。把由这些特定的操作触发并且自动被执行的过程,叫做事件过程。

    事件过程是编写在触发事件的工作簿或工作表等对象的模块当中的。下面就是一个简单的事件过程。

    95d8a222f1b7ff4c612373250ee2e47b.png

    当事件被执行后就自动运行宏。

    21438234054209d6c0ace8f4d4e7780b.gif

    01 制作事件过程

    事件过程是针对触发事件的工作簿或工作表的,是编写在这些事件对象的模块当中的。例如,针对工作簿事件的事件过程编写在“ThisWorkbook模块”中。

    事件过程是在作为事件对象的对象模块的代码窗口内进行编写的。事件过程名是在对象名和事件名中用“_(半角下划线)”连接起来按照“对象名_事件名”命名的,用户不能自由命名。

    事件过程的语法:

    Private Sub 对象名_事件名(参数)

    事件发生的时候采取的操作

    End Sub

    下面制作一个工作表显示时候执行的宏作为例子

    • 双击“ThisWorkbook”选项

    37dce7d8d1988a1861faa77e83645758.png
    • 自动生成“ThisWorkbook_Open”的事件过程。如果不需要,也可以将它删除,在过程框中选择事件,生成选择的事件过程。

    352416456c574fda85319a4c7001b137.png
    • 编写事件发生时候执行的代码

    b744e971e6127bab36b812eeef2fcc43.png

    执行效果如下:

    7824245e6851dcb87b1fd519b7482b98.gif

    02 事件的种类

    作为对象的事件有很多种,例如打开工作簿的时候发生的Open事件,选择工作表时发生的Active事件等。理解事件的种类在“这个时候想做这样的事情”时可以知道选择哪个事件比较合适。

    8cc42112d67fa783e2ed3243fffb0df8.png

    下面简单介绍一下事件过程参数的使用方法。

    在事件过程中有参数,例如在Workbook_SHeetActive事件过程中,有保存当前激活工作表的参数“Sh”。

    Worksheet_Change事件过程

    Worksheet_Change事件过程是单元格的内容被更改的时候调用的事件过程。这个事件过程有一个“Target”参数。“Target”中保存了内容发生变化的所有单元格。也就是可以在该过程中编写针对Target中存放的所有单元格的处理代码。

    f8d47e91a928655367d763d3825ce5fb.png

    03 使事件过程不发生的操作

    事件不仅在用户操作的时候发生,在执行过程代码时也会发生,因此在过程内发生的事件有时候也会产生不希望的结果。这种时候可以临时取消过程运行时事件的发生,以及取消不必要的事件发生。为了取消事件的发生,设定Application对象的EnableEvents属性为False。如果在过程执行前设定了EnableEvents属性,那么可以阻止在过程运行中触发其它事件过程。

    阻止事件发生的语法:

    Application.EnableEvents=False

    使用“Application.EnableEvents=False”取消事件的发生,以后所有的事件都被阻止,那么事件过程功能就被取消了。因此在临时取消事件发生的时候,必须在后面使用“Application.EnableEvents=True”来解除取消事件发生。

    7492f1232abed9e193adb11311a1c523.png

    -END-

    长按下方二维码关注EXCEL应用之家

    面对EXCEL操作问题时不再迷茫无助

    http://weixin.qq.com/r/Dy1FXc3Em5DkrYk_93gd (二维码自动识别)

    推荐阅读:

    人到中年,怎样才能保卫我们的发际线?

    VAB的基础知识--使用VBA制作宏

    什么是宏

    总结篇--提取不重复值的技巧集合

    总结篇--动态缩放图表

    展开全文
  • 去年因为工作需要用VBA做了一个下单表,跟大家分享下里面组合框控件的组合使用,交互性和操作性都比较友好,效果见下面GIF动图。通过筛选区域和店铺等级让店铺明细动态变化,用了3个ListBox组合框控件实现。区域LB3...

    去年因为工作需要用VBA做了一个下单表,跟大家分享下里面组合框控件的组合使用,交互性和操作性都比较友好,效果见下面GIF动图。

    2edce252eb95aecba797d703a2e405cb.gif

    通过筛选区域和店铺等级让店铺明细动态变化,用了3个ListBox组合框控件实现。

    78133c8cddcd5d8cdb47290f3206f993.png

    区域LB3代码:

    Private Sub ListBox3_Click() '区域选择
     With Sheet10
            rq = .Range("j2:j5").Value'区域
        End With
    With ListBox3 '调整位置到单元格处
            .Top = Sheet1.Cells(15, 1).Top 'listbox的顶端位置
            .Left = Sheet1.Cells(15, 1).Left  'listbox的左端位置
            .Width = 58 '宽度
            .Height = 70 '高度
            .Visible = True '可见
            '.ColumnHeads = True '显示标题行
            .ColumnCount = 1 '三列
            .ColumnWidths = "40" '设置第一列宽度50第二列宽度130……
            .List = rq '数据来源
            .MultiSelect = fmMultiSelectMulti '允许通过鼠标点击的方式进行多选
            .ListStyle = fmListStyleOption '选项按钮设置为方形
        End With
    End Sub

    店铺等级LB2代码:

    Private Sub ListBox2_Click() '店铺等级选择
        
     With Sheet10
            rq = .Range("h2:h5").Value'店铺等级
        End With
    With ListBox2 '调整位置到单元格处
            .Top = Sheet1.Cells(15, 2).Top 'listbox的顶端位置
            .Left = Sheet1.Cells(15, 2).Left  'listbox的左端位置
            .Width = 58 '宽度
            .Height = 70 '高度
            .Visible = True '可见
            '.ColumnHeads = True '显示标题行
            .ColumnCount = 1 '三列
            .ColumnWidths = "40" '设置第一列宽度50第二列宽度130……
            .List = rq '数据来源
            .MultiSelect = fmMultiSelectMulti '允许通过鼠标点击的方式进行多选
            .ListStyle = fmListStyleOption '选项按钮设置为方形
        End With
    End Sub

    店铺明细LB1代码:

    Private Sub ListBox1_Click() '选择区域和等级后自动生成店铺明细
                   Dim prr, orr, irr, urr, yrr
                   Application.DisplayAlerts = False
           With Sheet8
                     R = .Range("f2:h" & .Cells(Rows.Count, "h").End(xlUp).Row).Value
                     prr = R
           End With
                With ListBox3'当筛选区域后
                       For i = 0 To .ListCount - 1
                       If .Selected(i) = True Then
                           kk = kk + 1
                       End If
                       Next
                      If kk = 0 Then Sheet1.ListBox1.Clear: Exit Sub
                    ReDim orr(1 To kk, 1 To 1)
                      kk = 1
                      For i = 0 To .ListCount - 1
                      If .Selected(i) = True Then
                          orr(kk, 1) = .List(i, 0) '勾选后的区域
                          kk = kk + 1
                           End If
                      Next
                End With
                
                With ListBox2'当筛选店铺等级后
                       For ii = 0 To .ListCount - 1
                       If .Selected(ii) = True Then
                           kkk = kkk + 1
                       End If
                       Next
                       If kkk = 0 Then Sheet1.ListBox1.Clear: Exit Sub
                  ReDim irr(1 To kkk, 1 To 1)
                      kkk = 1
                      For ii = 0 To .ListCount - 1
                      If .Selected(ii) = True Then
                          irr(kkk, 1) = .List(ii, 0) '勾选后的等级
                          kkk = kkk + 1
                           End If
                      Next
                End With
                
                For T = 1 To UBound(prr)
                    For t1 = 1 To UBound(orr)
                    If prr(T, 1) = orr(t1, 1) Then
                               kkkk = kkkk + 1
                    End If
                      Next
                Next
                
                If kkkk = 0 Then Sheet1.ListBox1.Clear: Exit Sub
              ReDim urr(1 To kkkk, 1 To 3)
               kkkk = 1
               
               For t2 = 1 To UBound(prr)
                    For t3 = 1 To UBound(orr)
                    If prr(t2, 1) = orr(t3, 1) Then
                    urr(kkkk, 1) = prr(t2, 1)
                    urr(kkkk, 2) = prr(t2, 2)
                    urr(kkkk, 3) = prr(t2, 3)        '按区域筛选后的店铺
                         kkkk = kkkk + 1
                    End If
                      Next
                Next
              
                For t4 = 1 To UBound(urr)
                    For t5 = 1 To UBound(irr)
                    If urr(t4, 2) = irr(t5, 1) Then
                               kkkkk = kkkkk + 1
                    End If
                      Next
                Next
                
                If kkkkk = 0 Then Sheet1.ListBox1.Clear: Exit Sub
              ReDim yrr(1 To kkkkk, 1 To 3)
              kkkkk = 1
                For t6 = 1 To UBound(urr)
                    For t7 = 1 To UBound(irr)
                    If urr(t6, 2) = irr(t7, 1) Then
                    yrr(kkkkk, 1) = urr(t6, 1)
                    yrr(kkkkk, 2) = urr(t6, 2)
                    yrr(kkkkk, 3) = urr(t6, 3)        '按等级筛选后的店铺
                         kkkkk = kkkkk + 1
                    End If
                      Next
                Next
         With ListBox1
            '调整位置到单元格处
            .Top = Sheet1.Cells(20, 1).Top 'listbox的顶端位置
            .Left = Sheet1.Cells(20, 1).Left  'listbox的左端位置
            .Width = 280 '宽度
            .Height = 800 '高度
            .Visible = True '可见
            '.ColumnHeads = True '显示标题行
            .ColumnCount = 3 '三列
            .ColumnWidths = "40;60;180" '设置第一列宽度50第二列宽度130……
            .List = yrr '数据来源
            .MultiSelect = fmMultiSelectMulti '允许通过鼠标点击的方式进行多选
            .ListStyle = fmListStyleOption '选项按钮设置为方形
        End With
        Application.DisplayAlerts = True
    End Sub

    以上3个ListBox代码还需要以下代码进行关联,当区域和店铺等级发生变化LB1发生变化,需要用到change事件,当发生LB3、LB2发生变化LB1就运行。

    Private Sub ListBox3_Change() '等级更新店铺更新
        ListBox1_Click
    End Sub
    
    Private Sub ListBox2_Change() '等级更新店铺更新
       ListBox1_Click
    End Sub

    当以上代码写完后,重新打开表格会发现区域和店铺等级是空的,如下图,因为要运行了ListBox代码后才能进行筛选。

    19092223772583dc37c91ddfb4c9ba58.png

    这里就要加入一个当表格启用时就运行LB3、LB2、LB1代码。此段代码在ThisWorkbook里填写。

    Private Sub Workbook_Open() '在打开工作簿时发生
        Sheet1.setacive   '其中setacive就是我们下一个代码要设置的
    End Sub

    在sheet1里面填写以下代码

    Sub setacive()
        ListBox3_Click
        ListBox2_Click
    End Sub

    这两个段代码组合使用就能实现当表格打开时就运行区域和店铺等级!

    展开全文
  • 1 , 类 动 态 数 组 控 件 2007VBA技巧 快盘\Mytb\更新\类\类动态数组控件.xlsm 2013-6-16 类模块代码 PublicIndexAsInteger PrivateSubmyText_Change) Index=Mid,8) "Textbox&Index"Then ="控件事件Change&vbCrLf_ ...
  • excel vba代码大全 更改Excel VBA代码以提高速度 (Change Excel VBA Code to Improve Speed)In some of my files, macros run automatically when you select a cell on the worksheet. For example, if you've ...
  • VBA笔记

    2021-02-02 08:39:14
    插入行可bai以引发 Change 事件,在du此事件中可用修改的单元zhi格地址来dao判断插入或删除zhuan行,代码如下:shu Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Address(0, 0) If Target...
  • VBA进度条

    2016-05-23 16:11:40
    **一共三个控件:**ScrollBar1、Label1、Label2Private widthSum#Private Sub ScrollBar1_Change() Label1.width = ScrollBar1.Value Label2.width = widthSum - ScrollBar1.Value Label2.Left = Label1.Left + ...
  • VBA代码全集模板.pdf

    2020-07-09 00:21:11
    VBA 代码全集 云南农业大学 1 VBA 代码全集 云南农业大学 2 VBA 代码全集 目 录 一引用 4 二Worksheet_Change 事件 4 三相乘 6 四相减 7 五高级筛选 7 六双击事件 9 七单位汇总sumif 单条件汇总11 八多条件汇总 连接...
  • vb中运行vba代码 When changes need to be made to code, the easiest thing to do is obviously to just add, change or delete lines and be done with it. The problem with that is that after m...
  • VBA 常用处理

    2020-09-17 10:24:27
    'EXCEL中有多个单元格有change事件,只有当前单元格发生改变时触发当前单元格对应的处理 Private Sub Worksheet_Change(ByVal Target As Range) '禁止连续触发事件 Application.EnableEvents = False '======主要...
  • VBA编程实例

    2012-09-14 01:01:59
    Go to Page Setup and Change the value of "Number Slide from" to 2 and then while on the 1st slide in Slide View run the following Macro Sub Difference() MsgBox "The Slide Number of the current slide ...
  • 久违的VBA

    2012-09-06 13:29:18
    一mm同学想在excel中使用这么个功能,在一...最后还是转身强大的VBA,早年对VB比较熟悉过,所以VBA自然没啥问题,主要就是API的熟悉了。   实现方案:监控A1的变化,这需要用到Sub Worksheet_Change(ByVal Targe...
  • VBA 代码全集 云南农业大学 1 VBA 代码全集 云南农业大学 2 VBA 代码全集 目 录 一引用 4 二 Worksheet_Change事件 4 三相乘 6 四相减 7 五高级筛选 7 六双击事件 9 七单位汇总 sumif单条件汇总 . 11 八多条件汇总 ...
  • Excel Vba

    2008-12-30 18:23:00
    Sub Worksheet_Change(ByVal Target As Range)On Error GoTo ErrDim wb As WorkbookDim StrCell, StrCell2, StrCell3, StrFlod, StrWorkbook As String With Application .ScreenUpdating = False .E
  • 大家好,今日讲解VBA代码解决方案的第51讲:利用VBA代码,如何限制重复值的录入,为什么要提出这个问题呢?因为在工作表中录入数据时,有时希望能限制重复值的录入,比如在示例的A列单元格只能录入唯一的人员编号,...
  • 以下是经过数小时不断努力而整理出的以VBA关键字列表,共284个关键字。分享给大家!关键字 类别 用途 IsArray Arrays Verify an array. Array Arrays Verify an array. Option Base Arrays Change default lower ...
  • excel VBA问题

    2021-04-19 13:04:15
    <code>Private Sub Worksheet_Change(ByVal Target As Range) Target.Select End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) '用于选择产品 If Target.Areas.Count <> 1 Then...
  • 27、Change 事件 28、Value 属性 29、DblClick 事件 30、SheetBeforeRightClick 事件 31、Select 方法 32、Select 事件 33、Goto 方法 34、Worksheet 对象 35、SheetChange 事件 36、SheetActivate 事件 37、...
  • vba处理excel

    2018-04-06 13:25:00
    #--------------------------------V1-------------------------------------# ...With Sheets("Change Notice") totalRow = Application.CountA(.Range("A:A")) 'MsgBox TotalRow startRow = 2 For...
  • VBA自动填写表单

    2017-09-29 21:51:56
    hao268网站,风格清新,无任何广告,实在是良心...本程序利用VBA,实现139邮箱的自动登录。<select id="hao_mail_options" onChange="MailLogin.change(this)"><option></option><option>@1...
  • EXCEL的VBA

    2018-04-02 13:36:06
    选择“查看代码”,就可以打开VBA编辑界面。选择如下图所示的下拉菜单,选择“worksheet”。选择如下图所示的下拉菜单,选择对应的触发模式。这里我们选择BeforeDoubleClick,意思就是说:在本工作表鼠标双击(之前...
  • 采用excel,写一小段vba代码:PrivateSubWorksheet_Change(ByValTargetAsRange)Sheets("Sheet1").Select'选择第一页面IfTime>=TimeV...我们需要得到银行的实时汇率并导入自己的数据库表中.采用excel,写一小段vba...
  • 分班课程表vba代码

    2020-04-14 14:01:47
    分班课程表vba代码 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub Dim tt, aa, j&, k, t, x$, y$, n&, ii&, zs, col% Application....
  • 1, 类动态数组控件 2007VBA 技巧 快盘\Mytb\更新\类\类动态数组控件.xlsm 2013-6-16 类模块代码 Public WithEvents frm As MSForms.UserForm Public WithEvents myText As MSForms.TextBox Public Index As Integer ...
  • 前几天,韩老师发了一个一分钟小视频“录入数据自动加边框”:Excel录入数据时自动添加边框,省力...VBA打开VBA窗口,输入代码:Private Sub Worksheet_Change(ByVal Target As Range)For Each a In UsedRange If...
  • EXCEL VBA 事件

    2011-11-11 15:26:01
    事件1. 有触发条件2. 自动执行3. 工作表级14个,工作薄级36个(包含所有工作表级),应用程序级43个(包含所有工作薄,工作表级) 如下代码会产生递归调用问题:Private Sub Worksheet_Change(B...
  • 26、Worksheet的Change事件(带作业) 27、关于Application.EnableEvents属性(有实例动画) Application.EnableEvents补充说明 28、关于Worksheet的SelectionChange事件(有实例动画) 29、Worksheet的...
  • Excel_VBA 常用代码

    2019-06-15 18:08:00
    单元格编辑后改变背景色(6号,355832828) 1 Dim oldvalue As Variant... 3 Private Sub Worksheet_Change(ByVal Target As Range) 4 On Error Resume Next 5 If oldvalue <> Target.Value Then 6 ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 316
精华内容 126
关键字:

changevba