Environment Variable


A

Andibevan

Hi All,

Is there a way from within VBA to declare an environment variable?

Or do I have to declare the kernal32 function "SetEnvironmentVariable"?

Thanks

Andy
 
Ad

Advertisements

B

Bob Phillips

You are correct, you do need to use an API.

You should also note that Excel seems to load all variables at startup, and
the Environ command retrieves the value from this memory store. So you need
to use the GetEnvironmentVariable to read your new value.

This should demonstrate that

Option Explicit

Private Declare Function GetEnvironmentVariable Lib "kernel32" _
Alias "GetEnvironmentVariableA" _
(ByVal lpName As String, _
ByVal lpBuffer As String, _
ByVal nSize As Long) As Long

Private Declare Function SetEnvironmentVariable Lib "kernel32" _
Alias "SetEnvironmentVariableA" _
(ByVal lpName As String, _
ByVal lpValue As String) As Long

Sub xx()
SetEnvironmentVariable "Rob", "Nuzie!"
MsgBox Environ("Rob")
MsgBox GetEnvironmentVar("Rob")
End Sub

Function GetEnvironmentVar(Name As String) As String
GetEnvironmentVar = String(255, 0)
GetEnvironmentVariable Name, GetEnvironmentVar, Len(GetEnvironmentVar)
GetEnvironmentVar = TrimNull(GetEnvironmentVar)
End Function

Private Function TrimNull(item As String)
Dim iPos As Long
iPos = InStr(item, vbNullChar)
TrimNull = IIf(iPos > 0, Left$(item, iPos - 1), item)
End Function
 
A

Andibevan

Thanks Bob - I didn't know about using GetEnvironmentVariable.

What does the function TrimNull do? I can't work it out.

Ta

Andi
 
B

Bob Phillips

Hi Andi,

It is a generic routine to tidy up strings from APIs, which use null to
designate the end of a string. So this routine just looks for the first
null, and extracts all characters to the left of that.
 
A

Andibevan

I have tried the method you suggested and when the code runs as expected,
but when I type SET from the command prompt the variable is not listed.

I am trying to create a variable that would be listed when you type SET.
 
B

Bob Phillips

Andi,

It is only set for that session.

If you do Shell "CMD.EXE" immediately after the SetEnvironmentVariable, and
type Set you will see it
 
Ad

Advertisements

Joined
May 22, 2012
Messages
1
Reaction score
0
On my Windows XP Pro machine using Word 2007 this code worked fine.
But on my new Windows 7 Pro x64 machine using Word 2010 it doesn't seem to work.

Ed
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top