excel VBA窗体按钮控件设置enter事件后,为啥会在启动窗体时,自动enter一次?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel VBA窗体按钮控件设置enter事件后,为啥会在启动窗体时,自动enter一次?相关的知识,希望对你有一定的参考价值。

这种错误一般偶尔发生,但是一旦在刚打开的工作簿中运行一次,就会出现

参考技术A 查下你那个控件有enter事件的tabindex属性是否为0,如果是的话,找一个没有enter事件的改为0。 参考技术B enter是啥事件?貌似窗体没有这个事件。追问

是按钮控件的enter 事件

追答

enter事件在按钮上,表示焦点的获取,即焦点回到按钮
启动窗体的时候,如果焦点正好在这个按钮上,就会响应enter事件

追问

那怎样可以把焦点移开?我发现要是有这个enter事件,窗体的activate事件都会被屏蔽
而且按钮的default是false,我又没有按下enter

追答

能力有限,不知道。
一般获取焦点是SetFocus方法,但是初始化窗体的时候,貌似这个方法无效。

到现在都不知道你要enter事件做什么?或许可以从其它方面来实现

追问

我是看中了enter的好,因为如果用click,我要按两次回车,待会进入enter时间。

追答

如果你只是为了响应回车键的话,用按键响应事件就可以,做什么饶这么大圈子。
把按钮中的代码写一个sub里面
按钮的单击事件和文本框的按回车都去调用这个sub就可以

参考技术C 重装 office

VBA调用宏的方式总结大全

文章目录


背景

很多小伙伴在拿到模型之后, 看着满屏的代码, 却不知道如何下手使用这些代码. 这篇文章就在于告诉你如何使用写好代码的Excel VBA模型


方式一 : Excel菜单执行宏

这种方式不需要写代码, 也不需要额外的绑定,操作步骤也很简单
开发工具>>>>选择宏名>>执行

  • 截图👇

  • Gif动图👇

TIps: 开发工具菜单默认是隐藏的, 找不到菜单的时候, 参照这篇文章 🫱 "开发工具"在哪里


方式二 : 按钮绑定宏

除了直接按名字执行宏, 大部分时候开发者会选择绑定宏到按钮上, 这种方式会更加友好

1. 插入按钮

插入按钮的方式有至少3种

  • 最古老而丑的方式是开发工具 >> 插入 >> 选择一个按钮
  • 普通方式是插入 >> 形状 >> 选择一个
  • 最新方式是插入 >> 图标 >> 选择一个 (需Office 365)

介绍一下普通方式

  • 截图👇

  • Gif动图👇

2. 绑定宏

一般来说,插入按钮后都会在按钮中编辑一下文字,提示使用者这是什么,例如,输入:一键汇总(双击按钮即可输入). 然后在按钮点击鼠标右键弹出菜单,选择需要绑定的宏

  • 截图👇

  • Gif动图👇

    效果其实是和方式一一样的, 只是把入口放出来了, 友好一些


方式三 : 窗体绑定宏

这一步需要写代码, 并需要设计他原本就很丑的窗体, 使用起来感觉像是90年代的软件(不明白为什么30年了, 它还不更新UI)
需要进入VBE操作, 并且需要写代码

1. 插入窗体

2. 拖入按钮


并调整细节

3. 绑定按钮点击事件触发宏(写代码)

  • 设计窗体触发事件
    一般会设计在工作簿打开的时候加载, 这个时候,需要在ThisWorkbook下设计事件, 代码如下
    Private Sub Workbook_Open()
        Load UserForm1
    End Sub
    
  • 绑定窗体按钮点击事件
    UserForm1里写代码如下
    Private Sub CommandButton1_Click()
        Call listAll
    End Sub
    
  • 设计窗体释放事件
    这里需要设计了, 正常来说, 点击运行按钮, 运行完即自动关闭窗体, 也就是在上面步骤中加入多一行代码unload UserForm1,如果你想写别的, 在这里写
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        ' 这里写你的代码
    End Sub
    

最后的界面大概是长这样


方式四 : 事件绑定宏

这个方式就太多了, 但是原理来讲的话, 又都是和方式三一样的, 在事件中加入call listAll代码即可


- End -

以上是关于excel VBA窗体按钮控件设置enter事件后,为啥会在启动窗体时,自动enter一次?的主要内容,如果未能解决你的问题,请参考以下文章

用VBA重置excel控件值的方法。

EnterKey 在 VBA 用户窗体中按下按钮

EXCEL VBA 窗体设计,如何实现查询前一条记录和后一条记录的功能。

Vba中窗体部件点击事件?

如何在Excel VBA中定义一个在窗体控件和模块中均能使用的变量?

C#winform 主窗体上的用户控件怎样调用主窗体的一个方法!