Home |
Search |
Today's Posts |
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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 |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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 -- HTH Bob Phillips "Andibevan" wrote in message ... 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 |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks Bob - I didn't know about using GetEnvironmentVariable.
What does the function TrimNull do? I can't work it out. Ta Andi "Bob Phillips" wrote in message ... 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 -- HTH Bob Phillips "Andibevan" wrote in message ... 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 |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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. -- HTH Bob Phillips "Andibevan" wrote in message ... Thanks Bob - I didn't know about using GetEnvironmentVariable. What does the function TrimNull do? I can't work it out. Ta Andi "Bob Phillips" wrote in message ... 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 -- HTH Bob Phillips "Andibevan" wrote in message ... 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 |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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. "Bob Phillips" wrote in message ... 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. -- HTH Bob Phillips "Andibevan" wrote in message ... Thanks Bob - I didn't know about using GetEnvironmentVariable. What does the function TrimNull do? I can't work it out. Ta Andi "Bob Phillips" wrote in message ... 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 -- HTH Bob Phillips "Andibevan" wrote in message ... 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 |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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 -- HTH Bob Phillips "Andibevan" wrote in message ... 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. "Bob Phillips" wrote in message ... 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. -- HTH Bob Phillips "Andibevan" wrote in message ... Thanks Bob - I didn't know about using GetEnvironmentVariable. What does the function TrimNull do? I can't work it out. Ta Andi "Bob Phillips" wrote in message ... 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 -- HTH Bob Phillips "Andibevan" wrote in message ... 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 |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
System Environment Variables | Excel Discussion (Misc queries) | |||
System Environment Variables | Excel Discussion (Misc queries) | |||
what is ERP environment | New Users to Excel | |||
shared environment | Excel Discussion (Misc queries) | |||
How can I invoke windows environment variable in excel | Excel Programming |