使用VBA在远程桌面上打开文件

时间:2018-11-30 17:32:24

标签: excel vba remote-desktop

我正在尝试自动化一个过程,该过程涉及在Excel中使用VBA通过RDP打开远程桌面上的文件。我已经成功地登录到RDP,但是现在却一直在努力打开文件。我写了一些依赖于SendKeys的代码,这些代码可能有10%的时间可以工作,但我正在寻找更强大的东西。

Sub RunRDP()
Dim RetVal As Variant
Dim Target As String
Dim Sheet As Variant

'Log-in info
Target = "AAAA.com"
UserName = "BBBBBB\CCC"
Pwd = "DDDDD"

'Connect to Remote Desktop
RetVal = Shell("cmdkey /generic:""" & Target & """ /user:""" & UserName & """ /pass:""" & Pwd & """", 3)
RetVal = Shell("c:\Windows\System32\mstsc.exe /v:" & Target, 3)

'Press yes through cert errors
Do
    If InStr(ActiveWinTitle, "Remote Desktop Connection") > 0 Then
        Application.SendKeys "y", True
    End If
Loop Until InStr(ActiveWinTitle, "AAAA") > 0
Application.Wait (Now + TimeValue("00:00:03"))
If InStr(ActiveWinTitle, "Remote Desktop Connection") > 0 Then
    AppActivate "AAAAA.com - Remote Desktop Connection"
Else
    AppActivate "AAAAA.com"
End If
Application.Wait (Now + TimeValue("00:00:07"))

上面的代码按预期工作。 ActiveWinTitle是获取当前窗口标题的功能,请参见下文:

Public Declare Function GetForegroundWindow Lib "user32" _
() As Long
Public Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" (ByVal HWnd As Long, _
ByVal lpString As String, ByVal cch As Long) As Long

Public Function ActiveWinTitle() As String
    Dim WinText As String
    Dim HWnd As Long
    Dim L As Long
    HWnd = GetForegroundWindow()
    WinText = String(255, vbNullChar)
    L = GetWindowText(HWnd, WinText, 255)
    ActiveWinTitle = Left(WinText, InStr(1, WinText, vbNullChar) - 1)
End Function

以下代码是我为打开文件所做的工作。其英文解释如下:

Application.SendKeys "RE", True
Application.SendKeys "~", True
Application.Wait (Now + TimeValue("00:00:01"))
Application.SendKeys "{F4}", True
Application.Wait (Now + TimeValue("00:00:01"))
Application.SendKeys "{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}F:\[**FILEPATH HERE**]~", True
  1. 在桌面上键入RE以突出显示回收站
  2. 按Enter打开回收站(进入文件浏览器窗口)
  3. 等待一秒钟
  4. 按F4键将光标移到地址栏
  5. 等待一秒钟
  6. 从地址栏中删除“回收站”,输入正确的文件路径,然后按Enter

显然这是非常不可靠的,这就是我要寻找更好的原因的原因。

此代码是我在工作中使用的东西,并希望与同事共享-因此,我无法下载任何程序来代替VBA使用。

我看这些问题没有多大用处:

Script to Open a batch file on a remote computer 我不熟悉WMI,也不确定是否必须使用RDP完全替换。我试图查看它的文档,但它远远超出了我的脑海。

Run a batch file on a remote desktop from VBA 这是来自同一用户的较早线程。它有一些我无法追踪的死链接。

我看过很多与我的问题相同的未解决问题。这可能是徒劳的,但我想确定地知道这是否可行。 [编辑:我在下面的研究中发现的一些未答复的论坛帖子]

预先感谢您的所有帮助。

1 个答案:

答案 0 :(得分:2)

非编程方法也能帮助您吗?

在远程计算机上,创建计划任务,该任务在有人连接到用户会话时启动。

enter image description here

...然后只需从那里运行任何内容即可。

当然,也许您仍然只想接触高级技术,但是有时只有使用现有工具才能轻松避免它们。