Get path of "Program files" folder that contains 32-bit programs Get path of "Program files" folder that contains 32-bit programs windows windows

Get path of "Program files" folder that contains 32-bit programs


Environ will do the trick:

debug.print Environ("ProgramFiles") debug.print Environ("PROGRAMFILES(X86)")'If you want to check if current PC is x64debug.print Environ("PROCESSOR_IDENTIFIER")

List of environment variables can be found here.


UPDATE: Based on the conversation I've had with Christian and based on my comments, I looked into this a little more.

I have two machines I tested on:

  • Machine 1: Win 7 Ultimate, 64 Bit, Office 2010 64 Bit
  • Machine 2: Win 7 Ultimate, 32 Bit, Office 2007 32 Bit

I ran the following statements in the immediate window:

? Environ("ProgramFiles") ? Environ("PROGRAMFILES(X86)")? Environ("ProgramW6432")

Results

Machine 1:

C:\Program Files C:\Program Files (x86) C:\Program Files

Machine 2:

C:\Program Files//Blank////Blank//

So, based on these limited findings, you may want to see the if ProgramW6432 has a value. If not, assume 32 bit and use ProgramFiles.

IF Environ("ProgramW6432") <> "" THEN   'I'm 64 bit so check both ProgramW6432 and PROGRAMFILES(X86)ELSE   'I'm 32 bit so check ProgramFilesEND IF

Conversely, you could use PROCESSOR_IDENTIFIER to determine x64 vs. x86 and do the same thing.

I wouldn't say either way is foolproof but should get you on the right track.


One-stop shop

I thought I'd summarize the conclusions that can be drawn from the information scattered across all answers here, plus a bit of integration on my part. Credits to all previous answer posters!

The output of Environ for any given "program file"-related environment variable will vary depending on Windows (32 or 64 bit) as well as Office (32 or 64 bit) as follows:

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

Note that for the Windows 64 bit + Office 32 bit setup, the output of Environ("ProgramFiles") does not match with the actual value of the ProgramFiles environment variable in Windows! At the command prompt, echo %ProgramFiles% returns C:\Program Files, not C:\Program Files (x86).

If you need the path to the 32 bit program files folder (C:\Program Files for 32-bit Windows, and C:\Program Files (x86) for 64-bit Windows) then you can use this function:

Function Get32BitProgramFilesPath() As String    If Environ("ProgramW6432") = "" Then       '32 bit Windows       Get32BitProgramFilesPath = Environ("ProgramFiles")    Else       '64 bit Windows       Get32BitProgramFilesPath = Environ("ProgramFiles(x86)")    End IfEnd Function


ray023's answer is basically correct, but one addition:

At least on my machine (Win 7 Home Premium 64 bit, Access 2000 installed), both
Environ("ProgramFiles") and
Environ("PROGRAMFILES(X86)")

...return the same folder, C:\Program Files (x86).

To get the "non-x86-folder" (C:\Program Files) on my 64 bit Windows, I need to use Environ("ProgramW6432").

Here's another link about the Environ function, including code how to list all environment variables (that's how I found ProgramW6432).


EDIT:

As I already said in a comment, I just tested it on my other machine as the results seem to depend not only on the operating system, but on the installed MS Office version as well:

This machine runs on Win XP SP3 32-bit, and Access 2000 is installed:

Environ("ProgramFiles") returns C:\Programme.
(that's "Program Files" in German - I'm in Germany and my Windows is in German)

Environ("PROGRAMFILES(X86)") and Environ("ProgramW6432") return an empty string.

--> So the safest way to determine the "x86 folder" (no matter if on Win XP or Win 7) seems to be Environ("ProgramFiles").