フォームを含むExcelVBAマクロがあります。VB.netでフォームを非表示にするか、フォームを制御して[X]ボタンまたはカスタムの[終了]ボタンをクリックしたいと思います。
誰かがこれを経験したことがありますか?
センドキーは非常に信頼できません。
VB.Net から Excel を自動化できる場合は、それをお勧めします。VB.Net から Excel を自動化することに興味がある場合は、これを参照してください。
自動化するのではなく直接処理したい場合はFindWindow
、Sendmessage
API を使用してフォームを制御することをお勧めします。この例を参照してください。
Excelにこのようなユーザーフォームがあるとしましょう
このコードフォーム VB.Net を使用してください
コード:
Imports System.Runtime.InteropServices
Imports System.Text
Public Class Form1
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, _
ByVal Msg As UInteger, _
ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Boolean
End Function
Private Const WM_CLOSE = &H10
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim Ret As Integer
'~~> Get the handle of the Excel Userform named "Example"
Ret = FindWindow(vbNullString, "Example")
'~~> If Found
If Ret <> 0 Then
'~~> Close the Window
SendMessage(Ret, WM_CLOSE, CLng(0), CLng(0))
End If
End Sub
End Class