热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VB如何跳出选择文件对话框?

PrivateDeclareFunctionFindWindowLibuser32AliasFindWindowA(_ByVallpClassNameA
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
        ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
        
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

Private Const GWL_STYLE As Long = (-16)
Private Const WS_CAPTION As Long = &HC00000

Private Sub Form_Load()
       Dim hwnd&
    '  Dim xlApp As New excel.application'如果在工程中引用了EXCEL下句声明不要
       Dim xlApp As Object
        If IsFileOpen(App.Path & "\" & Dir("*.dll")) Then _
            MsgBox App.EXEName & " 文件已经打开!", vbInformation, "系统提醒:": GoTo ooo
        
        DoEvents
        
       Set xlApp = CreateObject("Excel.Application") '如果在工程中引用了EXCEL这句可不要
        
        xlApp.Workbooks.Open (App.Path & "\" & Dir("*.dll"))
        
        hwnd = FindWindow(vbNullString, xlApp.Caption)
        SetWindowLong hwnd, GWL_STYLE, IStyle
        DrawMenuBar hwnd
      
        xlApp.Visible = True
      ' xlApp.WindowState = xlMaximized '用createobject函数的话这两句要出错
      ' xlApp.ActiveWindow.WindowState = xlMaximized
         
        Set xlApp = Nothing
ooo:
        Unload Me
       End
End Sub

Function IsFileOpen(filename As String)
       Dim filenum As Integer, errnum As Integer
       On Error Resume Next
       filenum = FreeFile()
        
       Open filename For Input Lock Read As #filenum
       Close filenum
       
       errnum = Err
       On Error GoTo 0
       
       Select Case errnum
           Case 0
               IsFileOpen = False
           Case 70
               IsFileOpen = True
           Case Else
               Error errnum
       End Select
End Function


现在的源码是打开文件所在路径里面的文件,但是无法选择某个文件,
我的要求是打开对话框后选择文件,点击确定就可打开.
还有一个问题是,现在的源码打开excel文件后,蓝色标题被隐藏,应该删除那句代码?
×注(源码中的DLL文件是excel文件伪装的)

9 个解决方案

#1


 添加通用对话框吧

#2


部件里选择“Microsoft Common dialog control 6.0”

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()

        On Error GoTo ms:
        With Me.CommonDialog1
            .Filter = "所有文件|*.*"
            .ShowOpen
        End With
        
        Dim strFileName  As String
        strFileName = Me.CommonDialog1.filename
        If Len(strFileName) > 0 And Dir(strFileName) <> "" Then
            ShellExecute Me.hWnd, "Open", strFileName, vbNullString, vbNullString, 1
        End If
          
ms:
      
End Sub

#3


学习下

#4


可以试试excel VBA里的application.openfilename

dim fn as string
fn=xlApp.openfilename

#5


如果要求大部分系统都能有,就用api吧
很多系统没comdlg32.ocx,但comdlg32.dll肯定有的,我昨天正好研究过,搜了些代码


'========================打开/保存对话框 API 函数及结构===================
Private Type tagOPENFILENAME
   lStructSize As Long        '结构大小
   hwndOwner As Long          '
   hInstance As Long          '
   strFilter As String        '过滤器字符串
   strCustomFilter As String '选中的过滤器(过滤器索引所指的过滤器)字符串
   nMaxCustFilter As Long     '过滤器最大长度
   nFilterIndex As Long       '选中的过滤器索引,意义与 CommonDialog 控件相同
   strFile As String          '选中的全路径文件名
   nMaxFile As Long           '装载全路径文件名的字符串长度
   strFileTitle As String     '去掉了路径的文件名
   nMaxFileTitle As Long      '装载去掉了路径的文件名字符串长度
   strInitialDir As String    '去掉了文件名的路径(没有最后的反斜杠)
   strTitle As String         '对话框标题,意义与 CommonDialog 控件相同
   flags As Long              '标志,意义与 CommonDialog 控件相同
   nFileOffset As Integer     '路径长度(包括最后的反斜杠)
   nFileExtension As Integer '全路径文件名长度(不计算前面 3 个表示盘符的字符,如 D:\)
   strDefExt As String        '默认提取
   lCustData As Long          '
   lpfnHook As Long           '勾子函数地址
   lpTemplateName As String   '
End Type

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (ofn As tagOPENFILENAME) As Boolean
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (ofn As tagOPENFILENAME) As Boolean


'返回选择的文件名。输入参数:
'1.对话框类型(0=保存,1=打开);2.对话框标题;3.过滤器字符串
'4.过滤器索引;5.标志;6.路径;7.文件名
Public Function CmdDlg(Optional ByVal DlgType As Boolean = True, _
   Optional ByVal DialogTitle As String, Optional ByVal Filter As String, _
   Optional FilterIndex As Long = 1, Optional flags As Long, _
   Optional ByVal InitialDir As String, Optional ByVal FileName As String, Optional ByRef hWnd As Long = 0) As String
  
On Error GoTo CmdDlg_Error
Dim ofn As tagOPENFILENAME
Dim fResult As Boolean
If InitialDir = "" Then InitialDir = CurDir
If Len(Filter) > 0 Then Filter = Replace(Filter, "|", vbNullChar) 'Filter以Chr(0)为分隔符

With ofn
   .lStructSize = Len(ofn)
   .hwndOwner = hWnd                                   '0为屏幕句柄
   .strFilter = Filter
   .nFilterIndex = FilterIndex
   .strFile = Left(FileName & String$(255, 0), 255)   '用空字符补足全路径文件名255字节
   .nMaxFile = 255                                    '全路径文件名长度
   .strFileTitle = String$(255, 0)                    '用空字符填充(去掉路径的)文件名
   .nMaxFileTitle = 255                               '(去掉路径的)文件名长度
   .strTitle = DialogTitle                            '对话框标题
   .flags = flags
   .strDefExt = ""
   .strInitialDir = InitialDir
   .hInstance = 0
   .strCustomFilter = String(255, 0)                  '用空字符填充选中的过滤器
   .nMaxCustFilter = 255                              '选中的过滤器长度
   .lpfnHook = 0
End With
If DlgType Then fResult = GetOpenFileName(ofn) Else fResult = GetSaveFileName(ofn)
If fResult Then
   CmdDlg = Left(ofn.strFile, InStr(ofn.strFile, vbNullChar) - 1)
   'FilterIndex = ofn.nFilterIndex                    '返回选中的过滤器索引
Else
   CmdDlg = vbNullChar
End If
CmdDlg_Error:
End Function


#6


本帖最后由 bcrun 于 2011-03-31 19:46:36 编辑
With CreateObject("MSComDlg.CommonDialog")
 .showopen
 If .FileName <> "" Then
  '在此加上选中文件的处理操作
 End If
End With

#7


本帖最后由 bcrun 于 2011-03-31 19:47:00 编辑
vba code:
Application.GetOpenFilename
麻烦楼主结帖!!!

#8


通用对话框

#9


牛人,就如此简单!
引用 7 楼 fzx4936 的回复:
vba code:
Application.GetOpenFilename
麻烦楼主结帖!!!

推荐阅读
  • vue使用
    关键词: ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
author-avatar
秋夜里的寂寞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有