Home » excel » excel – Using VBA to open a file on Remote Desktop

excel – Using VBA to open a file on Remote Desktop

Posted by: admin May 14, 2020 Leave a comment

Questions:

I am trying to automate a process which involves using VBA in Excel to open a file on a remote desktop through RDP. I have successfully managed to log into RDP but am now struggling to open the file consistently. I wrote some code relying on SendKeys that maybe works 10% of the time but am looking for something more robust.

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"))

The above code works as expected. ActiveWinTitle is a function to grab the current window’s caption, see below:

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

The below code is what I’ve tried to make work for opening the file. Its explanation in English follows:

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. Type RE on the desktop to highlight the Recycle Bin
  2. Press Enter to open the Recycle Bin (to get to a file explorer window)
  3. Wait one second
  4. Press F4 to move cursor to address bar
  5. Wait one second
  6. Delete “Recycle Bin” from the address bar, write in the correct filepath, and press Enter

Obviously this is extremely unreliable and is the reason I’m looking for something better.

This code is something I’m using for work and am looking to share with my colleagues – I am not able to download any programs to use instead of VBA because of this.

I have looked at these questions without much avail:

Script to Open a batch file on a remote computer
I am not familiar with WMI and am not sure if I would have to completely replace using RDP. I tried looking at the documentation for it and it’s quite above my head.

Run a batch file on a remote desktop from VBA
This is an earlier thread from the same user. It has some dead links that I was unable to follow.

I’ve looked at a lot of threads that had the same unanswered question as mine. It may be a futile effort, but I’d like to know definitively if this is manageable or not. [EDIT: Some of the unanswered forum posts I’ve found in my research below]

Thanks in advance for all of your help.

How to&Answers:

Would a non-programming approach help you, too?

On the remote computer, create a scheduled task which launches when someone connects to the user session.

enter image description here

…and simply run anything from there.

Of course, maybe you still want to reach only for advanced techniques, but sometimes they can be easily avoided only by using existing tools.