使用 VBA 控制远程虚拟机上的 Excel 实例

Controling Excel Instance on a Remote Virtual Machine with VBA

我在一个非常大的国际集团工作。为了获取组共有的数据,我需要使用 Citrix Receiver 连接到远程虚拟机 (VM)。

此 VM 的编程方式是当有人(不是管理员)连接到它时,它会启动一个临时 Excel。请注意,非管理员人员只能访问 VM 上的此 Excel 实例。

在这个Excel实例中有一个插件,我用它来查询我每天需要获取的组提供的数据。我手动执行此操作,我想将其自动化。

我已经设法编写了 运行 本地代码。此代码通过公司网站连接到 VM,因此我在我面前打开了临时 Excel。这是代码以及如何在我面前打开临时 Excel:

Dim ie As Object
Dim doc As New HTMLDocument
Dim usn_box As HTMLInputElement
Dim pwd_box As HTMLInputElement
Dim btn As HTMLButtonElement
Dim img As HTMLImg

Set ie = New InternetExplorerMedium ' needs this and not usual internetExplorer
ie.Visible = True
ie.Silent = True
ie.Navigate "https://the.path"

While ie.Busy Or ie.ReadyState <> 4
    DoEvents
Wend

Application.Wait Now + TimeSerial(0, 0, 5)
Set doc = ie.Document

'if error on usn_box go directly to image and click it cause you are logged in
Set usn_box = doc.querySelector("#username")
If Not usn_box Is Nothing Then
    usn_box.Value = usn

    Set pwd_box = doc.querySelector("#password")
    pwd_box.Value = pwd

    Set btn = doc.querySelector("#loginBtn")
    btn.Click

    Application.Wait Now + TimeSerial(0, 0, 5)
End If

Set img = doc.querySelector("#home-screen > div.home-view-content > section.scrollable.storeViewSection > div.store-apps-container > ul > li:nth-child(1) > a.storeapp-details-link > img")
img.Click
Application.Wait Now + TimeSerial(0, 0, 20)

现在我需要的是能够使用我的 VBA 代码控制这个 Excel 以便能够使用这个 Data Genic AddIn。我该怎么做?

我尝试检查如何从另一个控制 excel 实例,但由于有问题的实例在远程 VM 上,我的本地 Excel 看不到它。此外,没有其他方法可以连接到不通过网站的 VM。

大神们帮帮我吧

编辑 回应 Keith Swerling 的评论。我单击文件并浏览。我看到有一个名为 CTRXPRD 的文件夹,其中包含子文件夹。这些子文件夹中的每一个都具有有权访问 VM 的人员的企业 ID。

当我单击“浏览”时,我开始进入我的文件夹,更具体地说是进入文档子文件夹。因此,似乎每个企业 ID 在此 VM 上都有一个 windows 帐户。

这对我有什么帮助?

我找到了大量解决方法。因为我可以在 VM 上保存文件,并且我可以从 VM 访问我的本地服务器,但反过来不行:

  1. 在 VM 上创建启用宏的工作簿 (MEWB)
  2. 此 MEWB 包含获取数据并将它们保存在本地服务器上的一个或多个 Excel 文件中所需的所有宏
  3. 一旦您对这些宏感到满意,就可以在此 MEWB 中创建一个宏,当此 MEWB 打开时 运行s。 运行打开的这个宏只是调用了所有的数据查询宏
  4. 将此 MEWB 另存为插件 (.xlam)
  5. 在 Excel 上启用此 ADDIn,就像您启用 Solver AddIn 或任何其他插件一样

现在每次 Excel 实例打开时,您编写的所有宏都会 运行 因此每次您连接到 VM 时,它们都会 运行 并且您将拥有数据存储在本地。

这真是个变通办法,但它确实有效。