2

フォームを含むExcelVBAマクロがあります。VB.netでフォームを非表示にするか、フォームを制御して[X]ボタンまたはカスタムの[終了]ボタンをクリックしたいと思います。

誰かがこれを経験したことがありますか?

4

1 に答える 1

2

センドキーは非常に信頼できません。

VB.Net から Excel を自動化できる場合は、それをお勧めします。VB.Net から Excel を自動化することに興味がある場合は、これを参照してください。

自動化するのではなく直接処理したい場合はFindWindowSendmessageAPI を使用してフォームを制御することをお勧めします。この例を参照してください。

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
于 2012-09-27T04:11:35.037 に答える