f = Application.GetOpenFilename("EXCEL文件,*.*,", 1, MultiSelect:=True)怎么判断是否打开文件了呢?

上次您帮我解答了“excel中用类似浏览的方式打开多个文件,将文件的路径赋值给变量。这个怎么实现呢?”的问题,我还想请教一下,这个怎么判断是否有文件打开呢?
用f是否为flase 判断是否打开,当没有打开时可以判断,当打开文件了就报类型不匹配;
用UBound(f)是否大于0判断,当打开时可以,当没有文件打开时又报类型不匹配。请问这个怎么判断是否有文件打开呢?

对于是否点击了"打开"按钮的判断取决于 MultiSelect 参数的设置,分下面两种情况:
(一)如果 MultiSelect 设置为 True,那么用这个方式判断:
if isarray(f) then '判断返回值是否为数组
'your codes
end if
(二)如果 MultiSelect 设置为 False,那么用这个方式判断:
if f <> false then
'your codes
end if
这是鄙人的经验...追问

MultiSelect 参数的设置是指F = Application.GetOpenFilename("EXCEL文件,*.*,", 1, MultiSelect:=True)中的 MultiSelect:=True的设置吗?

追答

正是...

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-02

这个怎么判断是否有文件打开呢?

Application.GetOpenFilename是没有打开文件功能哦,只是返回路径与文件名。你是想判断是否有选择文件对吧?如果没有选择或直接点了“取消”

结果等于FALSE ,如下:

 F = Application.GetOpenFilename("EXCEL文件,*.*,", 1, MultiSelect:=True)
    If F <> "False" Then Else MsgBox "没有选择": Exit Sub



是这个意思吗!

楼上的代码你也可以参考下。

追问

请教一下,我现在在第一个excel里面执行代码,中间需要打开第二个excel,第二个excel里面也有代码,系统会在打开第二个excel后接着执行第二个excel的代码,但是我只是想打开第二个excel读取其中的单元格。请问我怎么就能不执行第二个excel的代码?因为是批量处理,而且第二个excel也不固定,不能把第二个excel的宏禁止。大师指点一下,谢谢~~

追答

不得哦。第二个EXCEL就算有代码,你第一个EXCEL代码没有要求去执行它。就不会执行啊。

我感觉这个问题,不存在呀,是否问题,没有描述清楚或我理解错了?

追问

我现在单步调试的时候,按F8,到了打开第二个excel的时候,再继续F8,就在执行第二个文件的代码了。

追答

写在workbook.open里的代码??

你把宏级别设置为低看下呢。

追问

因为我这里所指的第二个excel是不固定的,所以不能通过修改它来解决这个问题。我是用workbook.open打开的文件,这个有影响吗?

追答

不是啊!
1、你把开的第二个EXCEL文件代码是写在哪里的?模块还是事件中的?如果写在模块里的问题是不存在的。
2、把宏级别设置为低 是争对所有EXCEL文件的。

追问

    打开的第二个excel是取用别人的文件,我看有模块、窗体还有类模块,这个能处理吗?

追答

估计是这里面有代码:一打开就执行了。


Private Sub Workbook_Open()
CODE
End Sub



把宏级别设置为低,如果还是不行,请传文件!

追问

是,我看从第一个excel跳过去直接执行的是第二个文件的Private Sub Workbook_Open()程序。请问这个改怎么处理呢?宏安全性已经是最低了。

追答

采纳、分虽然没有给我,我也帮你处理了吧。够意思啥 !


例子:用宏1文件打开B.XLS,B.XLS中OPEN事件。现在禁用它。


方法一:

Sub cc()
Dim ExApp As New Excel.Application
Dim Wb As Workbook
    With ExApp
      .Visible = True
      .AutomationSecurity = 2   '禁用新Excel程序的 宏 ,对于03版软件该方法无法禁用 宏表工作表
      Set Wb = .Workbooks.Open(ThisWorkbook.Path & "\B.xls")
      Wb.Sheets("Sheet1").Range("a1") = "abc"
      Wb.Close True
      .Quit
    End With
End Sub

 方法二:这个简单--前后加上两句,试下呢

   Application.EnableEvents = False
   Application.EnableEvents =TRUE

追问

第二个方法是在哪里的前后加?这两句意思相反啊,是指在B文件之前加上第一句,在最后加上第二句吗?

追答

加A文件啥 。就是第一个文件。如果加第二个还有什么意义?  还不如直接把代码删了。


 Dim wb As Workbook
   Application.EnableEvents = False
        Set wb = Workbooks.Open(ThisWorkbook.Path & "\B.xls")
        wb.Sheets("Sheet1").Range("a1") = "abc"
   Application.EnableEvents = True

来自:求助得到的回答
第1个回答  2013-09-02
Sub AA()
    Dim Ar
    Dim I   As Long
    F = Application.GetOpenFilename("EXCEL文件,*.*,", 1, MultiSelect:=True)
    On Error Resume Next
    If F <> "False" Then Else MsgBox "没有选择":exit sub
    On Error Resume Next
    ReDim Ar(UBound(F))
    For I = 1 To UBound(F)
        Ar(I) = F(I)
    Next
End Sub

追问

请问On Error Resume Next是什么意思?

追答

忽略错误。也就是出错不提示。

相似回答