如何不打开Excel文件显示Userform 及宏启用、任务栏图标相关问题
问题1:偶尔打开文件宏未启用需要重开的解决方案
- 优先将文件所在文件夹加入Excel受信任位置:操作路径为 文件 > 选项 > 信任中心 > 信任中心设置 > 受信任位置 > 添加新位置,选中对应文件夹后勾选「同时信任此位置的子文件夹」确认即可,从受信任位置打开的文件默认不会触发宏拦截。
- 对VBA项目添加数字签名:使用Windows自带的「VBA数字证书」工具创建自签名证书,打开VBA编辑器后点击 工具 > 数字签名 选择刚创建的证书保存文件,签名后的宏会被Excel判定为可信。
- 增加启动容错逻辑,替换原有
Workbook_Open代码为以下内容:
Private Sub Workbook_Open() On Error Resume Next Application.Visible = False If Err.Number <> 0 Then MsgBox "宏未正常启用,请关闭文件后右键选择「属性」,勾选底部「解除锁定」后重新打开", vbExclamation ThisWorkbook.Close SaveChanges:=False Exit Sub End If ricwin.Show vbModeless End Sub
- 如果打开时顶部出现安全提示,直接点击「启用内容」即可正常运行,无需关闭重开。
问题2:隐藏Excel主窗口后为Userform添加独立任务栏图标的解决方案
该需求可通过调用Windows API实现,适配32/64位版本Excel,操作如下:
- 打开
ricwin对应的Userform代码模块,在顶部加入API声明:
#If VBA7 Then Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As LongPtr) As Long Dim hWndForm As LongPtr #Else Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long Dim hWndForm As Long #End If Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_APPWINDOW = &H40000 Private Const WS_EX_TOOLWINDOW = &H80
- 在Userform的
Initialize事件中加入窗口属性修改代码:
Private Sub UserForm_Initialize() hWndForm = Me.hWnd #If VBA7 Then Dim exStyle As LongPtr exStyle = GetWindowLongPtr(hWndForm, GWL_EXSTYLE) #Else Dim exStyle As Long exStyle = GetWindowLong(hWndForm, GWL_EXSTYLE) #End If ' 新增应用窗口属性、移除工具窗口属性,确保任务栏显示图标 exStyle = exStyle Or WS_EX_APPWINDOW exStyle = exStyle And Not WS_EX_TOOLWINDOW #If VBA7 Then Call SetWindowLongPtr(hWndForm, GWL_EXSTYLE, exStyle) #Else Call SetWindowLong(hWndForm, GWL_EXSTYLE, exStyle) #End If Call DrawMenuBar(hWndForm) End Sub
- 配置完成后打开文件,Userform会单独在任务栏显示独立图标,即使Excel主窗口隐藏也可正常点击唤起。
内容的提问来源于stack exchange,提问作者Richard Fowler
相关产品推荐
相关产品推荐

