You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拖拽文件至TreeView后关闭Userform时额外Excel实例弹出问题

TreeView拖拽导入文件后关闭UserForm时弹出额外Excel实例的问题

我制作了一个仅包含单个TreeView控件的简单UserForm,该TreeView支持拖拽功能用于导入文本文件。预期效果是用户将文件拖拽到TreeView后,UserForm自动关闭,但目前遇到一个问题:在DragDrop子过程中尝试关闭UserForm时,会额外打开一个包含文本文件全部内容的Excel实例。文本文件的导入逻辑运行正常,现在只需要阻止这个额外的Excel实例弹出。

已尝试的解决方法

  • 在TreeView的OLEDragDrop子过程中直接调用Unload Me,代码如下:
Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim sPath As String, sName As String
    sPath = Data.Files(1)
    TreeView1.Nodes.Clear
    TreeView1.Nodes.Add KEY:=sPath, Text:=get_file_name(sPath)
    READ_WEB_LOADS_FILE sPath
    Unload Me ' <--- 此代码可关闭Userform,但仍会打开额外Excel实例
End Sub
  • 在TreeView的子过程中调用模块中的公共子程序,通过该子程序远程关闭UserForm;
  • 通过模块中的公共子程序调用Evaluate来执行关闭UserForm的子程序。

但无论采用哪种调用方式,不管关闭逻辑是写在模块里还是UserForm中,拖拽操作后关闭UserForm时,那个额外的Excel实例都会出现。手动点击UserForm右上角的关闭按钮(X)则可以正常关闭,不会弹出额外实例。现在需要实现的是:子程序执行结束后自动关闭UserForm,同时不会触发额外Excel实例弹出。

补充代码

get_file_name函数

Private Function get_file_name(ByVal sPath As String) As String
    Dim arr As Variant
    arr = Split(sPath, "\")
    get_file_name = arr(UBound(arr))
End Function

READ_WEB_LOADS_FILE子程序

Public Sub READ_WEB_LOADS_FILE(ByVal path As String)
    
    Dim ff As Long, indx As Long
    Dim contents As String
    Dim Loads_Section As Variant
    
    ' 读取文件
    ff = FreeFile ' ........................................... 获取下一个可用文件号
    Open path For Input As #ff ' .............................. 打开文件用于读取
    contents = Input(LOF(ff), ff) ' ........................... 将文件内容读取到字符串变量
    Close #ff ' ............................................... 关闭文件
    
    ' 按换行符解析文件
    Loads_Section = Split(contents, "BEGIN LOADS:") ' ......... 拆分载荷段
    contents = "" ' ........................................... 释放内存
    
    ' 处理单个载荷段
    For indx = 1 To UBound(Loads_Section) ' ................... 遍历各段
        
        ' 提取载荷
        EXTRACT_LOADS
        
        ' 构建最大/最小表格
        BUILD_MAX_MIN_TABLE
        
    Next indx
    
    
    ' *** 此代码可关闭UserForm,但仍会打开额外Excel实例 ***
    Unload UserForm1
    
    ' *** 此代码可关闭UserForm,但仍会打开额外Excel实例 ***
    Evaluate "CLOSE_FORM"
    
End Sub

内容的提问来源于stack exchange,提问作者twegner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:10:05