背景: 我们有一个个人宏工作簿,供特定职位的所有人共享。它使他们的工作变得更容易,随着时间的推移,许多流程都依赖于这些宏。宏随着时间的推移而发展,我正在寻求控制所有系统中部署的版本。例如,我有一个更新,我想现在就推出,以便每个人都拥有相同的新版本的宏工作簿。
问题: XLSTART 的目标在不同版本之间并不可靠,即使在单个版本的 Excel 中,我也发现不同版本可能有不同的路径。我需要将其部署到大量计算机,安装的版本可能是 2003-2016 中的任何版本
问题: 有没有一种可靠的方法来找到 XLSTART 目录,而无需列出每个版本的 Excel 的所有可能性?
笔记:
以前有人手动完成这项工作,但我们已经无法做到了。目前,我一直在构建一个批处理文件,列出 XLSTART 的所有可能路径,感觉这很愚蠢。我希望有更好的方法,只是我不知道。
我认为如果有一个 %XLSTART% 变量就好了,但我们有几个用户安装了多个版本的 Excel。(我知道,别问)。因此在这些系统上,我需要将宏工作簿安装到多个路径中,以便在同一台 PC 上安装的多个版本的 Excel 中可以使用宏。
答案1
感谢@DavidPostill 的想法。这是基于他从注册表获取路径的想法的最终解决方案。这是一个用 PowerShell 编写的部署脚本:
<# Deploy-XLSTART.ps1 #>
param(
[Parameter(Mandatory=$true, Position=0)]
[string]$script:DeployFile,
[Parameter(Mandatory=$false, Position=1)]
[string]$script:LogFile = "$env:TEMP\XLSTARTDeploymentLog.csv"
)
# Only copy to a folder that exists and return false if it doesn't.
function Copy-Results {param( $source, $destination )
if (Test-Path $destination) {
Write-Output "Copy to: $($destination)"
Copy-Item -path $source -destination $destination -force
return $true
}
return $false
}
# Main
$script:XLKey = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe"
$script:XLValue = "Path"
$script:XLSTARTPath = "$((Get-ItemProperty -Path $script:XLKey -Name $script:XLValue).$script:XLValue)XLSTART\"
if (Copy-Results -source $script:DeployFile -destination $script:XLSTARTPath) {
$script:ResultsFile = Get-Item -Path "$script:DeployFile" -Force
Add-Content -path $script:LogFile "$Env:Computername,$script:XLSTARTPath,$script:ResultsFile.LastWriteTime"
} else {
Add-Content -path $script:LogFile "$Env:Computername,File Not Found"
exit 3
}
答案2
在 Excel 表中编写宏代码(即在 VB 部分中),然后将文件另存为
Excel 插件(*.xlam) 或者
Excel 97-2003 加载项(*.xla)
然后通过文件 -> 选项 -> 加载项将它们导入其他系统,在管理标签下选择 Excel 加载项并单击“转到”
在下一个对话框中单击浏览按钮并浏览您创建的插件文件。
无需在所有系统中创建宏即可使用所有功能。
注意:.xla
该软件版本之前的所有版本均支持文件。
希望有帮助。