拖拽文件至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
相关产品推荐
相关产品推荐

