Excel:需要VBAmacros的Power Query插件加载

该场景是Windows Server 2012 R2,64位; Excel 2010,32位。 许多用户,其中只有一些用户具有pipe理权限。 我从内置的pipe理员安装了Power Query。 无需询问任何内容,为所有用户安装加载项; 我的意思是它的设置可能在HKLM下的registry键中find,而不是HKCU。

关键是

HKEY_LOCAL_MACHINE – > SOFTWARE – > Wow6432Node – > Microsoft – > Office – > Excel – > AddIns – > Microsoft.Mashup.Client.Excel

和相关的价值是

LoadBehavior(REG_DWORD)

现在只有less数用户确实需要Power Query。 我不希望它为每个人加载,每次启动Excel。 我为LoadBehavior值尝试了一些不同的设置(请参阅此链接)。 我发现以下内容:

  • 如果LoadBehavior = 2,加载项不加载任何用户,没办法。
  • 如果LoadBehavior = 3,则为所有用户加载加载项。 但是,如果为特定用户(在registry中)创build特定的密钥,则用户可以禁用Excel中的加载项。 例如,在HKEY_CURRENT_USER中,密钥的path是:

软件 – > Microsoft – > Office – > Excel – > Addins – > Microsoft.Mashup.Client.Excel

  • 更具体地说,将用户的键放入LoadBehavior值是足够的,并且这允许用户决定他是否想要加载加载或不加载。 值3表示“负载”,值2表示“空载”。
  • 我需要完全相反的:加载通常不加载,并允许一些用户加载它。 我发现可以将HKLM中的LoadBehavior设置为9.这意味着“按需加载”。 也就是说,加载项仅在用户需要根据加载项本身进行的操作时才加载。 很适合我。
  • 在这一点上,我可以省去特定用户的密钥(例如HKCU)。 但是,我发现如果我创build它,它将优先于HKLM(当后者具有LoadBehavior = 9时)。 因此,对于特定用户,可以决定在“始终加载”模式下使用加载项。 只需在HKCU下的键中设置LoadBehavior = 3即可。

这一切似乎都很好。 现在问题是我需要从VBA过程中调用一些Power Query操作。 如果Power Query已经加载,一切正常。 但是,如果没有加载,即使使用“按需加载”设置,操作也会失败。 为了加载Power Query,必须在Excel GUI上按下一些button,调用Power Query操作。

我发现VBA中有一个可用的加载项对象的属性,它指示加载项是否已加载,并且可以设置为从VBA加载或卸载加载项。 它是:

Application.COMAddIns.Item( “Microsoft.Mashup.Client.Excel”)。连接

如果它是True,加载项被加载,并且如果它是False,加载项被卸载。

现在只需将该属性设置为True即可加载加载项。 但是,在我的情况下情况并非如此:结果是一个错误(80004005)。 这似乎与用户没有pipe理权限相关的问题。 看到这个页面 – 这种行为被认为是一个错误。

我最后的想法,我会稍后尝试,是完全删除HKLM下的键的LoadBehavior。 我已经检查过,这会阻止用户看到加载项,除非创build了用户特定的密钥,在这种情况下,用户可以自动设置加载项加载行为。 当从VBA请求加载时,我将看到在这种情况下会发生什么情况。

同时,我会很感激任何想法来解决的事情:没有正常加载Power Query,可能所有用户的需求,从VBA自动加载(至less对于某些用户),所有这一切,而不必手动添加用户所有用户的特定密钥。 为less数用户添加此密钥是可以接受的,那些实际需要Power Query的用户。

编辑

删除或重命名HKLM作品下的键中的LoadBehavior值。 Power Query只有在HKCU下有特定密钥的用户才能看到。 如果在这个键中,LoadBehavior的值被设置为3(或2),那么加载项默认加载(分别是未加载的)。 更改.Connect属性的VBA指令工作正常; 它在3(真)和2(假)之间切换LoadBehavior。 幸运的是,我还可以在registry中(在HKCU下)设置LoadBehavior = 9,并且.Connect属性仍然是可写的。 在这种情况下,当这个属性被分配一个True值时,加载项被加载,但是LoadBehavior值仍然保持在9,所以在closures和重新打开Excel时,加载项被卸载,被设置为“Load on需求“,并可能从VBA加载。

这正是我正在寻找的行为; 唯一需要注意的是,需要为所有需要Power Query的用户创build密钥。 因为在我的情况下,他们可能被指望在一方面的手指,这种解决scheme是可以接受的。

我仍然很讨厌是否有人提出更好的解决scheme。