皆さん、私はこれで数週間戦っています。私たちの組織には、シンクライアントで実行されている独自の企業アプリがあります。このアプリから、バックグラウンドで VBA スクリプトを適用して簡単な機能を実行できます。以前は、IE を開いて特定の Web サイトに誘導し、データを入力したり、Calc を開いたりするためのボタンを追加していました。
最近、私は以下のコードに取り組んでいます。これは、完全なデスクトップと explorer.exe を起動する RDP セッションを使用してサーバー上で開発されました。私が気付いたことは、explorer.exe が実行されていない場合、コードは関数内の「For Each oWin In oShApp.Windows」という行で「実行時エラー '429'」で爆発することに気付きました。
ただし、デスクトップとすべての機能を起動する ThinClient で explorer.exe を起動するスクリプトを作成すると (スタート バーとタスク バーが有効になるため、これは悪いことです)、ログインしている Thin Client ユーザーとして正常に実行されます。完全なデスクトップではなく、リモートアプリを使用しているときに実行される「制限付きシェル」について少し読んだことがありますが、スタートメニューとタスクバーを有効にせずに、その周りに何らかの方法があるかどうか疑問に思っていましたか?
以下のコードを参照してください。助けてくれてありがとう、CreteIT
Private Sub cmdHomePage_Click()
Dim ie As Object
Dim sMatch As String
sMatch = "http://www.companyweb.com"
On Error Resume Next
Set ie = GetIEatURL(sMatch & "*")
On Error GoTo 0
If Not ie Is Nothing Then
ShowWindow ie.hwnd, 9
BringWindowToTop ie.hwnd
Else
Dim strHome
Dim strAPP
strHome = "c:\progra~1\intern~1\iexplore.exe www.companyweb.com"
strAPP = Shell(strHome, vbNormalFocus)
End If
End Sub
Function GetIEatURL(sMatch As String) As Object
Dim ie As Object, oShApp As Object, oWin As Object
Set oShApp = CreateObject("Shell.Application")
For Each oWin In oShApp.Windows
If TypeName(oWin.Document) = "HTMLDocument" Then
Set ie = oWin
If LCase(ie.LocationURL) Like LCase(sMatch) Then
Set GetIEatURL = ie
Exit For
End If
End If
Next
Set oShApp = Nothing
Set oWin = Nothing
End Function