让您的宏知道它的位置。
假设您构建了一个宏,该宏使用一些INI和数据文件进行输入或输出,位于同一目录中。您已将路径硬编码到DVB文件中,以便宏知道在何处查找这些文件最终用户决定在网络服务器驱动器上使用宏。但是客户端PC对此驱动器使用不同的驱动器号。此外,IT部门还会更改应用程序的目录名。结果:宏找不到INI和数据文件
这里有一个解决方案:
Public Sub GetMyLocation()
Dim strDVBname As String, strDVBpath As String
strDVBname = VBE.ActiveVBProject.Name & "."
strDVBpath = VBE.ActiveVBProject.BuildFileName
strDVBpath = left(strDVBpath, InStr(strDVBpath, strDVBname) - 1)
Debug.Print strDVBpath
' e.g. strDVBpath will be "AnyDrive:\AnyDir\AnySubdir\"
' so your macro can access data files in this directory
' no matter where the directory is created.
End Sub
我希望这对一些人有用。
**** Hidden Message ***** 这样做怎么样:
公共函数getmy location()
getmy location = Replace(VBE。ActiveVBProject.BuildFileName,VBE。ActiveVBProject.Name," "
结束函数 太美了,Dnereb!
一个小改进:
Public Function GetMyLocation()
GetMyLocation = Replace(VBE.ActiveVBProject.BuildFileName ,VBE.ActiveVBProject.Name & ".DLL", "")
End Function
我认为这个代码可能会得到错误的结果,如果VBE。ActiveVBProject.BuildFileName的子目录等于VBE。ActiveVBProject.Name
小心! 因此,在我的第一个示例中添加了“.”,在我回复Dnereb的帖子时添加了“.DLL”。无论如何,后者是使函数正常工作所必需的。 但是“.DLL”也可以在子目录路径中!例如:C:\TEST.DLL\MyOwnDirectory\TEST.DLL\TEST.DLL 好吧,亚历山大。有什么建议吗?
(一个100%安全的方法当然是找到字符串中最右边的反斜杠,然后从那里开始修剪字符串。) 你完全正确!如果VBA函数只能替代一个函数,我就不和VBA (VB等)一起写了。!!)子串在字符串中正确出现——这个函数很有用。在其他情况下,您必须自己完成该功能!
Public Sub KnowMyPlace()
Dim MyDir As String
MyDir = StrReverse(VBE.ActiveVBProject.BuildFileName)
MyDir = StrReverse(Right(MyDir, Len(MyDir) - InStr(MyDir, "\") + 1))
End Sub
页:
[1]