Vince 发表于 2012-2-7 10:07:04

“看不到对话框中的子文件夹”

各位沼泽会员好,
我的公司已经迁移到64位Windows 7工作站,我们正在运行AutoCAD 2012。当我尝试使用我的一些VBA程序时,它们在我的旧32位Windows XP电脑上运行得非常好.....允许我浏览项目图形文件夹以选择图形文件的对话框看不到某些图形子文件夹,也看不到它们的图形文件内容。我不知道为什么我会遇到这种困难....??
文件夹名称的示例如下:
5515-2011 10 05-原理图设计问题
5515-20110526初步布局
我用来调用对话框以在文件夹中选择图形的VBA代码字符串如下:
CommonDialog1。Filter = "绘图文件(*。dwg) |*。dwg|"
CommonDialog1。DialogTitle = "选择要打印的图形文件"
CommonDialog1。max filesize = 5000 common dialog 1。FilterIndex = 1。InitDir = " F:\ Projects \ "
common dialog 1 . flags =(file open constants . cdlofnallowmultiselect)
common dialog 1。show open

If common dialog 1。FileName" " Then
ls files = Split(common dialog 1。FileName)
For I = LBound(ls files)To UBound(ls files)
txt file = UBound(ls files)
下一个i

如果txtFile
MsgBox“这是一个批处理打印实用程序:请选择多个图形”,vbInformation,“批处理实用程序”
Else

stmprefix = ls files(1)
stmprefix = Mid(stmprefix,1,InStr(1,stmprefix),--AddItem lsFiles(i)
接下来我

End If
End If
如果有人能看一下上面的代码示例,看看他们是否能找出可能导致该问题的原因,我们将不胜感激。
提前感谢您的帮助....!问候你,文斯
**** Hidden Message *****

ChuckHardin 发表于 2012-2-7 15:43:53

这是我在VBA应用程序中使用的一个类模块。我不使用CommonDialog控件
我也不知道这是否适用于Windows 7或AutoCAD 2012。
clsFileDialog
Option Explicit
'//The Win32 API Functions///
Private Declare Function GetSaveFileName Lib _
"comdlg32.dll" Alias "GetSaveFileNameA" _
(pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetOpenFileName Lib _
"comdlg32.dll" Alias "GetOpenFileNameA" _
(pOpenfilename As OPENFILENAME) As Long
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'//A few of the available Flags///
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_ALLOWMULTISELECT = &H200
'This one keeps your dialog from turning into
'A browse by folder dialog if multiselect is true!
'Not sure what I mean? Remove it from the flags
'In the "Show Open" & "Show Save" methods.
Private Const OFN_EXPLORER As Long = &H80000
'//The Structure
Private Type OPENFILENAME
   lStructSize As Long
   hwndOwner As Long
   hInstance As Long
   lpstrFilter As String
   lpstrCustomFilter As String
   nMaxCustFilter As Long
   nFilterIndex As Long
   lpstrFile As String
   nMaxFile As Long
   lpstrFileTitle As String
   nMaxFileTitle As Long
   lpstrInitialDir As String
   lpstrTitle As String
   flags As Long
   nFileOffset As Integer
   nFileExtension As Integer
   lpstrDefExt As String
   lCustData As Long
   lpfnHook As Long
   lpTemplateName As String
End Type
Private lngHwnd As Long
Private strFilter As String
Private strTitle As String
Private strDir As String
Private blnHideReadOnly As Boolean
Private blnAllowMulti As Boolean
Private blnMustExist As Boolean
Public Property Let OwnerHwnd(WindowHandle As Long)
    '//FOR YOU TODO//
    'Use the API to validate this handle
    lngHwnd = WindowHandle
    'This value is set at startup to the handle of the
    'AutoCAD Application window, if you want the owner
    'to be a user form you will need to obtain its
    'Handle by using the "FindUserForm" function in
    'This class.
End Property
Public Property Get OwnerHwnd() As Long
    OwnerHwnd = lngHwnd
End Property
Public Property Let Title(Caption As String)
    'don't allow null strings
    If Not Caption = vbNullString Then
      strTitle = Caption
    End If
End Property
Public Property Get Title() As String
    Title = strTitle
End Property
Public Property Let Filter(ByVal FilterString As String)
    'Filters change the type of files that are
    'displayed in the dialog. I have designed this
    'validation to use the same filter format the
    'Common dialog OCX uses:
    '"All Files (*.*)|*.*"
    Dim intPos As Integer
    Do While InStr(FilterString, "|") > 0
    intPos = InStr(FilterString, "|")
    If intPos > 0 Then
      FilterString = Left$(FilterString, intPos - 1) _
      & Chr$(0) & Right$(FilterString, _
      Len(FilterString) - intPos)
    End If
    Loop
    If Right$(FilterString, 2)Chr$(0) & Chr$(0) Then
      FilterString = FilterString & Chr$(0)
    End If
    strFilter = FilterString
End Property
Public Property Get Filter() As String
    'Here we reverse the process and return
    'the Filter in the same format the it was
    'entered
    Dim intPos As Integer
    Dim strTemp As String
    strTemp = strFilter
    Do While InStr(strTemp, Chr$(0)) > 0
    intPos = InStr(strTemp, Chr$(0))
    If intPos > 0 Then
      strTemp = Left$(strTemp, intPos - 1) _
      & "|" & Right$(strTemp, _
      Len(strTemp) - intPos)
    End If
    Loop
    If Right$(strTemp, 1) = "|" Then
      strTemp = Left$(strTemp, Len(strTemp) - 1)
    End If
    Filter = strTemp
End Property
Public Property Let InitialDir(strFolder As String)
    'Sets the directory the dialog displays when called
    If Len(Dir(strFolder)) > 0 Then
      strDir = strFolder
      Else
      Err.Raise 514, "FileDialog", "Invalid Initial Directory"
    End If
End Property
Public Property Let HideReadOnly(blnVal As Boolean)
    blnHideReadOnly = blnVal
End Property
Public Property Let MultiSelect(blnVal As Boolean)
    'allow users to select more than one file using
    'The Shift or CTRL keys during selection
    blnAllowMulti = blnVal
End Property
Public Property Let FileMustExist(blnVal As Boolean)
    blnMustExist = blnVal
End Property
'@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
' Display and use the File open dialog
'@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
Public Function ShowOpen() As String
    Dim strTemp As String
    Dim udtStruct As OPENFILENAME
    udtStruct.lStructSize = Len(udtStruct)
    'Use our private variable
    udtStruct.hwndOwner = lngHwnd
    'Use our private variable
    udtStruct.lpstrFilter = strFilter
    udtStruct.lpstrFile = Space$(254)
    udtStruct.nMaxFile = 255
    udtStruct.lpstrFileTitle = Space$(254)
    udtStruct.nMaxFileTitle = 255
    'Use our private variable
    udtStruct.lpstrInitialDir = strDir
    'Use our private variable
    udtStruct.lpstrTitle = strTitle
    'Ok, here we test our booleans to
    'set the flag
    If blnHideReadOnly And blnAllowMulti And blnMustExist Then
      udtStruct.flags = OFN_HIDEREADONLY Or _
      OFN_ALLOWMULTISELECT Or OFN_EXPLORER Or OFN_FILEMUSTEXIST
      ElseIf blnHideReadOnly And blnAllowMulti Then
      udtStruct.flags = OFN_ALLOWMULTISELECT _
      Or OFN_EXPLORER Or OFN_HIDEREADONLY
      ElseIf blnHideReadOnly And blnMustExist Then
      udtStruct.flags = OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST
      ElseIf blnAllowMulti And blnMustExist Then
      udtStruct.flags = OFN_ALLOWMULTISELECT Or _
      OFN_EXPLORER Or OFN_FILEMUSTEXIST
      ElseIf blnHideReadOnly Then
      udtStruct.flags = OFN_HIDEREADONLY
      ElseIf blnAllowMulti Then
      udtStruct.flags = OFN_ALLOWMULTISELECT _
      Or OFN_EXPLORER
      ElseIf blnMustExist Then
      udtStruct.flags = OFN_FILEMUSTEXIST
    End If
    If GetOpenFileName(udtStruct) Then
      strTemp = (Trim(udtStruct.lpstrFile))
      ShowOpen = Mid(strTemp, 1, Len(strTemp) - 1)
    End If
End Function
'@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
' Display and use the File Save dialog
'@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
Public Function ShowSave() As String
    Dim strTemp As String
    Dim udtStruct As OPENFILENAME
    udtStruct.lStructSize = Len(udtStruct)
    'Use our private variable
    udtStruct.hwndOwner = lngHwnd
    'Use our private variable
    udtStruct.lpstrFilter = strFilter
    udtStruct.lpstrFile = Space$(254)
    udtStruct.nMaxFile = 255
    udtStruct.lpstrFileTitle = Space$(254)
    udtStruct.nMaxFileTitle = 255
    'Use our private variable
    udtStruct.lpstrInitialDir = strDir
    'Use our private variable
    udtStruct.lpstrTitle = strTitle
    If blnMustExist Then
      udtStruct.flags = OFN_FILEMUSTEXIST
    End If
    If GetSaveFileName(udtStruct) Then
      strTemp = (Trim(udtStruct.lpstrFile))
      ShowSave = Mid(strTemp, 1, Len(strTemp) - 1)
    End If
End Function

在代码中添加:
Dim fd1 As New clsFileDialog

SetFiles = False
Set fd1 = New clsFileDialog
fd1.FileMustExist = True
fd1.OwnerHwnd = application.HWND
fd1.Filter = "Drawings Files (*.dwg) |*.dwg"
fd1.Title = "Select Drawings to Plot"
fd1.MultiSelect = True
fd1.InitialDir = "F:\Projects\"
strCTRFile = fd1.ShowOpen
'Then check for no selection and split like you are
页: [1]
查看完整版本: “看不到对话框中的子文件夹”