如何使用VBA确定包含32位程序的文件夹的完整路径?它在32位Windows系统上称为“程序文件”,但在64位系统上称为“程序文件(x86)”。
答案 0 :(得分:14)
Environ会做到这一点:
debug.print Environ("ProgramFiles")
debug.print Environ("PROGRAMFILES(X86)")
'If you want to check if current PC is x64
debug.print Environ("PROCESSOR_IDENTIFIER")
可以找到环境变量列表here。
更新:根据我与Christian的对话并根据我的评论,我对此进行了一些调查。
我测试了两台机器:
我在即时窗口中运行了以下语句:
? Environ("ProgramFiles")
? Environ("PROGRAMFILES(X86)")
? Environ("ProgramW6432")
<强>结果
机器1:
C:\Program Files
C:\Program Files (x86)
C:\Program Files
机器2:
C:\Program Files
//Blank//
//Blank//
因此,基于这些有限的发现,您可能希望看到if ProgramW6432 具有值。如果没有,假设32位并使用 ProgramFiles 。
IF Environ("ProgramW6432") <> "" THEN
'I'm 64 bit so check both ProgramW6432 and PROGRAMFILES(X86)
ELSE
'I'm 32 bit so check ProgramFiles
END IF
相反,您可以使用PROCESSOR_IDENTIFIER来确定x64与x86并执行相同的操作。
我不会说任何一种方式都是万无一失的,但应该让你走上正轨。
答案 1 :(得分:9)
我认为我总结了可以从这里所有答案中散布的信息中得出的结论,以及我的一些整合。所有以前的答案海报的积分!
对于任何给定的“程序文件”相关环境变量,Environ
的输出将根据Windows(32或64位)以及Office(32位或64位)而变化,如下所示:
Windows Office ProgramFiles PROGRAMFILES(X86) ProgramW6432
------- ------ ---------------------- --------------------- ----------------
32-bit 32-bit C:\Program Files [empty string] [empty string]
64-bit 32-bit C:\Program Files (x86) C:\Program Files (x86) C:\Program Files
64-bit 64-bit C:\Program Files C:\Program Files (x86) C:\Program Files
请注意,对于Windows 64位+ Office 32位设置,Environ("ProgramFiles")
的输出不与Windows中ProgramFiles
环境变量的实际值匹配!在命令提示符处,echo %ProgramFiles%
返回C:\Program Files
,而不是C:\Program Files (x86)
。
如果需要32位程序文件文件夹的路径(32位Windows为C:\Program Files
,64位Windows为C:\Program Files (x86)
),则可以使用此功能:
Function Get32BitProgramFilesPath() As String
If Environ("ProgramW6432") = "" Then
'32 bit Windows
Get32BitProgramFilesPath = Environ("ProgramFiles")
Else
'64 bit Windows
Get32BitProgramFilesPath = Environ("ProgramFiles(x86)")
End If
End Function
答案 2 :(得分:6)
ray023's answer基本上是正确的,但还有一个补充:
至少在我的机器上(Win 7 Home Premium 64位,安装了Access 2000),两者都是
Environ("ProgramFiles")
和
Environ("PROGRAMFILES(X86)")
...返回相同的文件夹C:\Program Files (x86)
。
获取&#34;非x86文件夹&#34; (C:\Program Files
)在我的64位Windows上,我需要使用Environ("ProgramW6432")
。
Environ
函数的 Here's another link,包括如何列出所有环境变量的代码(这就是我找到ProgramW6432
的方式)。
修改强>
正如我在评论中已经说过的那样,我只是在我的其他机器上进行了测试,结果似乎不仅取决于操作系统,还取决于已安装的MS Office版本:
本机在Win XP SP3 32位上运行,并安装了Access 2000:
Environ("ProgramFiles")
返回C:\Programme
(&#39;&#34; Program Files&#34;德语 - 我在德国,我的Windows是德语)
Environ("PROGRAMFILES(X86)")
和Environ("ProgramW6432")
返回一个空字符串。
- &GT;所以最安全的方法来确定&#34; x86文件夹&#34; (无论是在Win XP还是Win 7上)似乎都是Environ("ProgramFiles")
。
答案 3 :(得分:4)
这篇文章介绍了如何从注册表中读取此信息:
在该文章的评论中还提示如何从环境变量“ProgramFiles”中检索信息。但请注意,如果您有不同的分区,则可能有多个“Program Files”文件夹,例如"C:\Program Files"
和"D:\Program Files"
。
答案 4 :(得分:1)
Environ(“ ProgramFiles”)对于32位和64位系统都足够了……在64位中,您将获得 结果C:\ Program Files(x86)