Eloquintet 发表于 2007-3-21 15:29:35

将初始打开目录设置为具有给定名称的文件夹

好的,让我解释一下大局,这样它就有意义了。我们有一个例程,它会更新多个文件中的属性。当打开的对话框出现时,它会转到下面的文件夹。我在想我希望它从图纸文件夹中开始,因为我们都有一个文件夹,其中包含我们的图纸。问题是我们并不都在同一个驱动器上有这个文件夹。对于一些人来说,它在他们的C:中,而另一些人在他们的D:中。有没有一种方法我可以指定图纸,它会在C:或D:中找到它?
myOpen.InitDir="I:\HOME\cadfiles\ACAD\LSP"'设置初始文件夹
**** Hidden Message *****

Keith™ 发表于 2007-3-21 15:40:17

如果路径相同,您可以简单地遍历所有驱动器
For X = 65 to 90
   rVal = Dir(chr(X) & ":\Mypath\MyFile.ext")
   If rVal"" Then
   X = 91
   End If
Next X

这将需要一些错误检查,因为如果驱动器不存在或未准备好,它将失败。但它将在所有驱动器A-Z上找到它。

Eloquintet 发表于 2007-3-21 15:57:38

Keith 我做了一些询问,每个人的D上都有这个文件夹:除了1谁在他们的E上有它:
这个棘手的事情,我忘了提到,因为它刚刚出现在我身上。
我们不是在服务器上工作,而是作为一个工作组工作。
我们每个人都映射到彼此的图纸文件夹,所以有没有办法只查找和在特定的驱动器号中查找?

Keith™ 发表于 2007-3-21 16:07:01

当然…
For X = 67 to 69
   rVal = Dir(chr(X) & ":\Mypath\MyFile.ext")
   If rVal"" Then
   X = 70
   End If
Next X

Eloquintet 发表于 2007-3-21 16:25:35

keith 我试图在我这边解决这个问题,但是遇到错误
,私有函数行被突出显示,它一直突出显示x,所以我认为我可以将所有事件更改为getfiles,但现在它突出显示了rVal。我在这里搞砸了什么?
'Display an open dialog, adds selected files to an array
Private Function GetFiles() As Variant
'Stores the object created by the CommonDialog class
Dim myOpen As CommonDialogProject.CommonDialog
Set myOpen = CommonDialogProject.Init 'Create the object

myOpen.DialogTitle = "Select drawings" 'Change the title
myOpen.Filter = "AutoCAD Drawing files (*.dwg)|*.dwg|" & _
                        "AutoCAD Drawing template files (*.dwt)|*.dwt"
    myOpen.DefaultExt = "dwg"
'Set flags to limit behavior of the dialog box
myOpen.Flags = OFN_ALLOWMULTISELECT + _
               OFN_EXPLORER + _
               OFN_FILEMUSTEXIST + _
               OFN_HIDEREADONLY + _
               OFN_PATHMUSTEXIST
For GetFiles = 67 To 69
   rVal = Dir(Chr(GetFiles) & ":\Drawings")
   If rVal"" Then
   GetFiles = 70
   End If
Next GetFiles

Keith™ 发表于 2007-3-21 16:37:07

你不能那样做....
将我提供的代码放入一个函数中,无论 rVal 的值是什么,都将是默认目录位置的路径。在浏览文件夹 API 中将该值设置为默认目录

Eloquintet 发表于 2007-3-22 08:37:53

基思:对不起,但我是这方面的新手,不知道该怎么做。我想我所要做的就是在底部创建一个新的函数“defaultfolder ”,然后说initdir=defaultfolder,但是它不起作用。你或其他人能帮我解决这最后一点吗?谢谢

Keith™ 发表于 2007-3-22 09:02:54

将此函数作为一个单独的函数
Private Function FindPath (ByVal path As String) As String
Dim X As Integer
For X = 67 to 69
   rVal = Dir(Chr(X) & ":\" & path & "\*.*")
   If rVal"" Then
   FindPath = Chr(X) & ":\" & path
   X = 70
   Else
   FindPath = "C:\"
   End If
Next X
End Function

现在,在您的Common Dialog函数中,添加(在显示表单之前的最开始)
MyOpen.InitDir = FindPath ("path\to\files\no\leading\or\trailing\backslashes")

Eloquintet 发表于 2007-3-22 10:11:02

yikes keith 我仍然没有得到它。这个例程利用了CommonDialog.dvb,所以这就是我把你给我的位放在哪里(见下文)。第二点是我不清楚的。此行最初位于另一个名为 Updateattribute 的文件中。我试着把它放在开头,但我不确定我是否理解你的意思
“在显示表单之前最开始”
我很困惑
Option Explicit
Public Function Init() As CommonDialog
Set Init = New CommonDialog
End Function
Private Function FindPath(ByVal path As String) As String
Dim X As Integer
For X = 67 To 69
   rVal = Dir(Chr(X) & ":\" & path & "\*.*")
   If rVal"" Then
   FindPath = Chr(X) & ":\" & path
   X = 70
   Else
   FindPath = "C:\"
   End If
Next X
End Function

Keith™ 发表于 2007-3-22 10:21:16

哦..所以它们在不同的模块中..将FindPath函数与公共对话框的代码放在同一个模块中...也就是你将要调用它的同一个模块。
页: [1] 2
查看完整版本: 将初始打开目录设置为具有给定名称的文件夹