Option Explicit
Public Type COPYDATASTRUCT
dwData As LongPtr
cbData As Long
lpData As LongPtr
End Type
#If VBA7 Then
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexa
Public Declare PtrSafe Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hwndParent As Long, _
ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, _
ByVal lpszWindow As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagea
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any) As Long
#Else
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexa
Public Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hwndParent As Long, _
ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, _
ByVal lpszWindow As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagea
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any) As Long
#End If
Sub Excel_Select(szSQL As String, nRow As Integer)
Dim hwnd_XXXX As Long
Dim hwnd_Main As Long
Dim data As COPYDATASTRUCT
Dim buffer() As Byte
Dim szChSQL As String
Const WM_COPYDATA = &H4A
Const WM_SETTEXT = &HC
hwnd_XXXX = FindWindow(vbNullString, "XXXX.exe")
hwnd_Main = FindWindowEx(hwnd_XXXX, 0, "TmainForm", vbNullString)
If hwnd_Main = 0 Then MsgBox "XXXX가 실행되었는지 확인하세요.": Exit Sub
szChSQL = szSQL + " "
ReDim buffer(Len(szChSQL) * 2 - 1) As Byte
buffer = StrConv(szChSQL, vbFromUnicode)
data.dwData = 100
data.cbData = UBound(buffer) + 1
data.lpData = VarPtr(buffer(0))
Call SendMessage(hwnd_Main, WM_COPYDATA, 0, data)
End Sub
Sub Excel_Select2(szSQL As String, nRow As Integer)
Dim hwnd_XXXX As Long
Dim hwnd_Main As Long
Dim data As COPYDATASTRUCT
Dim buffer() As Byte
Dim szChSQL As String
Const WM_COPYDATA = &H4A
Const WM_SETTEXT = &HC
hwnd_XXXX = FindWindow(vbNullString, "XXXX.exe")
hwnd_Main = FindWindowEx(hwnd_XXXX, 0, "TmainForm", vbNullString)
If hwnd_Main = 0 Then MsgBox "XXXX가 실행되었는지 확인하세요.": Exit Sub
szChSQL = szSQL + " "
ReDim buffer(Len(szChSQL) * 2 - 1) As Byte
buffer = StrConv(szChSQL, vbFromUnicode)
'' 삭제 문자 제거
'Dim i As Long
'For i = LBound(buffer) To UBound(buffer)
' If buffer(i) = 127 Then ' 삭제 문자 ASCII 코드
' buffer(i) = 0 ' 삭제 문자를 0으로 대체
' End If
'Next i
data.dwData = 101
data.cbData = UBound(buffer) + 1
data.lpData = VarPtr(buffer(0))
Call SendMessage(hwnd_Main, WM_COPYDATA, 0, data)
End Sub
'엑셀' 카테고리의 다른 글
| 폴더안에 있는 워드 일괄 출력하는 매크로 (0) | 2025.10.29 |
|---|
댓글