将个人宏部署到域中所有 PC 上所有 Excel 版本的 XLSTART

将个人宏部署到域中所有 PC 上所有 Excel 版本的 XLSTART

背景: 我们有一个个人宏工作簿,供特定职位的所有人共享。它使他们的工作变得更容易,随着时间的推移,许多流程都依赖于这些宏。宏随着时间的推移而发展,我正在寻求控制所有系统中部署的版本。例如,我有一个更新,我想现在就推出,以便每个人都拥有相同的新版本的宏工作簿。

问题: 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该软件版本之前的所有版本均支持文件。

希望有帮助。

相关内容