乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 125|回复: 8

让您的宏知道它的位置。

[复制链接]

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-11-17 17:58:23 | 显示全部楼层 |阅读模式
假设您构建了一个宏,该宏使用一些INI和数据文件进行输入或输出,位于同一目录中。您已将路径硬编码到DVB文件中,以便宏知道在何处查找这些文件
最终用户决定在网络服务器驱动器上使用宏。但是客户端PC对此驱动器使用不同的驱动器号。此外,IT部门还会更改应用程序的目录名。结果:宏找不到INI和数据文件
这里有一个解决方案:
  1. Public Sub GetMyLocation()
  2. Dim strDVBname As String, strDVBpath As String
  3. strDVBname = VBE.ActiveVBProject.Name & "."
  4. strDVBpath = VBE.ActiveVBProject.BuildFileName
  5. strDVBpath = left(strDVBpath, InStr(strDVBpath, strDVBname) - 1)
  6. Debug.Print strDVBpath
  7. '    e.g. strDVBpath will be "AnyDrive:\AnyDir\AnySubdir"
  8. '    so your macro can access data files in this directory
  9. '    no matter where the directory is created.
  10. End Sub

我希望这对一些人有用。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

6

主题

94

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2006-11-19 14:42:05 | 显示全部楼层
这样做怎么样:
公共函数getmy location()
getmy location = Replace(VBE。ActiveVBProject.BuildFileName,VBE。ActiveVBProject.Name," "
结束函数
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-11-19 14:59:16 | 显示全部楼层
太美了,Dnereb!
一个小改进:
  1. Public Function GetMyLocation()
  2. GetMyLocation = Replace(VBE.ActiveVBProject.BuildFileName ,VBE.ActiveVBProject.Name & ".DLL", "")
  3. End Function

回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-11-19 16:48:34 | 显示全部楼层
我认为这个代码可能会得到错误的结果,如果VBE。ActiveVBProject.BuildFileName的子目录等于VBE。ActiveVBProject.Name
小心!
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-11-19 16:56:23 | 显示全部楼层
因此,在我的第一个示例中添加了“.”,在我回复Dnereb的帖子时添加了“.DLL”。无论如何,后者是使函数正常工作所必需的。
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-11-19 17:01:40 | 显示全部楼层
但是“.DLL”也可以在子目录路径中!例如:C:\TEST.DLL\MyOwnDirectory\TEST.DLL\TEST.DLL
回复

使用道具 举报

6

主题

94

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2006-11-19 17:13:16 | 显示全部楼层
好吧,亚历山大。有什么建议吗?
(一个100%安全的方法当然是找到字符串中最右边的反斜杠,然后从那里开始修剪字符串。)
回复

使用道具 举报

6

主题

94

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2006-11-19 17:21:39 | 显示全部楼层
你完全正确!如果VBA函数只能替代一个函数,我就不和VBA (VB等)一起写了。!!)子串在字符串中正确出现——这个函数很有用。在其他情况下,您必须自己完成该功能!
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-11-22 23:25:51 | 显示全部楼层

  1. Public Sub KnowMyPlace()
  2. Dim MyDir As String
  3. MyDir = StrReverse(VBE.ActiveVBProject.BuildFileName)
  4. MyDir = StrReverse(Right(MyDir, Len(MyDir) - InStr(MyDir, "") + 1))
  5. End Sub
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 00:27 , Processed in 2.116488 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表