Windows文件路径环境变量展开的VBA实现相关疑问
Excel VBA路径环境变量展开函数开发疑问
我正在为Windows平台的Excel开发一套文件系统导航及元数据处理的VBA函数库,需要新增Path_Expand()函数,实现文件路径中所有%EnvironmentVariable%格式的环境变量展开。例如使用公式:
= Path_Expand("%OneDrive%\Folder\file.ext")
应返回实际路径:
C:\Users\greg\OneDrive - My Company\Folder\file.ext
我研究了WScript.Shell对象的.ExpandEnvironmentStrings()方法,但文档说明该方法仅能展开PROCESS环境空间中定义的环境变量。如果存在PROCESS环境外的相关变量,我可能需要自行构建解析器:拆分路径组件,用VBA.Environ("Variable")替换每个组件中的%Variable%,再重新拼接路径。我更倾向于使用.ExpandEnvironmentStrings()这类原生方案,前提是它的变量覆盖范围足够全面。
现提出以下技术疑问:
- 哪些环境变量可通过
Environ()访问,但无法通过.ExpandEnvironmentStrings()访问? - 这两个函数在大规模场景下的性能表现如何?
- 基于性能考虑,是否值得通过如下代码缓存环境变量值,再进行检索?
Private Function GetEnvVars() As Collection Const MIN_I As Integer = 1, MAX_I As Integer = 255, VAR_SEP As String = "=" Static vars As Collection, isInit As Boolean ' Initialize the collection as necessary... If Not isInit Then Set vars = New Collection ' Split and store the name and value of each variable. Dim str As String, strs As Variant Dim i As Integer For i = MIN_I To MAX_I str = VBA.Environ(i) If str = Empty Then Exit For End If strs = VBA.Split( _ expression := VBA.Environ(i), _ delimiter := VAR_SEP, _ limit := 2 _ ) vars.Add Key := strs(0), Item := strs(1) Next i ' ...and record that initialization. isInit = True End If Set GetEnvVars = vars End Function
通过GetEnvVars().Item("OneDrive")或GetEnvVars().Item(18)检索?还是说这些变量可能在程序运行期间发生变化,每次展开%Variable%都必须重新调用Environ("Variable")?
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

