我正在尝试自动化一个过程,该过程涉及在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
显然这是非常不可靠的,这就是我要寻找更好的原因的原因。
此代码是我在工作中使用的东西,并希望与同事共享-因此,我无法下载任何程序来代替VBA使用。
我看这些问题没有多大用处:
Script to Open a batch file on a remote computer 我不熟悉WMI,也不确定是否必须使用RDP完全替换。我试图查看它的文档,但它远远超出了我的脑海。
Run a batch file on a remote desktop from VBA 这是来自同一用户的较早线程。它有一些我无法追踪的死链接。
我看过很多与我的问题相同的未解决问题。这可能是徒劳的,但我想确定地知道这是否可行。 [编辑:我在下面的研究中发现的一些未答复的论坛帖子]
预先感谢您的所有帮助。