| 
    
     |  | いつも参考にさせていただいてます。 過去ログで調べたのですがわからないので
 ご教授お願いします。
 電卓の表示位置を変更したいのですが変更方法がわかりません
 どなたかお解りなる方
 よろしくお願いします。
 Option Explicit
 ' 対象ウィンドウを探しウィンドウハンドルを取得するAPI
 Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
 (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
 ByVal lpszCalss As String, ByVal lpszWindow As String) As Long
 Private Const HWND_TOPMOST As Long = -1& ' 最前面に
 Private Const SWP_NOSIZE  As Long = &H1& ' サイズ変更しない
 Private Const SWP_NOMOVE  As Long = &H2& ' 表示位置変更しない
 ' ウィンドウの表示サイズ/位置を設定するAPI
 Private Declare Function SetWindowPos Lib "user32" _
 (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
 ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
 ByVal wFlags As Long) As Long
 ' ウィンドウが存在するかどうか確認するAPI
 Private Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
 Private Const WM_GETTEXT As Long = &HD& ' テキストを取得
 Private Const WM_CLOSE As Long = &H10  ' 閉じる
 ' ウィンドウにメッセージを送るAPI(※lParamが文字列型なのに注意(本来はLong型))
 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
 (ByVal hWnd As Long, ByVal Msg As Long, _
 ByVal wParam As Long, ByVal lParam As String) As Long
 
 Private hWnd   As Long ' 電卓のウィンドウハンドル
 Private hEditWnd As Long ' 電卓のエディットボックスのウィンドウハンドル
 
 ' 電卓を起動し、最前面に表示させる
 Private Sub CommandButton1_Click()
 ' 電卓を表示する
 Application.ActivateMicrosoftApp Index:=0
 ' 電卓のウィンドウハンドルを取得する
 hWnd = FindWindowEx(0&, 0&, "SciCalc", "電卓")
 ' 電卓内のエディットボックスのウィンドウハンドルを取得する
 hEditWnd = FindWindowEx(hWnd, 0&, "Edit", vbNullString)
 ' 最前面に表示
 SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
 End Sub
 
 ' 電卓の値をテキストボックスに入れる
 Private Sub CommandButton2_Click()
 ' 電卓のウィンドウがある場合
 If IsWindow(hWnd) > 0 Then
 ' 電卓のテキストボックスの値を取得
 Me.TextBox1.Text = GetCalcText
 End If
 End Sub
 
 ' 電卓を終了させる
 Private Sub CommandButton3_Click()
 ' 電卓のウィンドウがある場合
 If IsWindow(hWnd) > 0 Then
 ' 「閉じる」処理を電卓側に処理させる
 SendMessage hWnd, WM_CLOSE, 0, vbNullChar
 End If
 End Sub
 
 ' 電卓のテキストボックスの値を取得する
 Private Function GetCalcText() As String
 Dim calcText As String
 
 ' エディットボックスの文字列を取得する
 calcText = String(255, vbNullChar)
 If SendMessage(hEditWnd, WM_GETTEXT, Len(calcText), calcText) > 0 Then
 GetCalcText = Left$(calcText, InStr(calcText, vbNullChar) - 1)
 End If
 End Function
 
 Private Sub CommandButton4_Click()
 ActiveCell.Value = TextBox1.Value
 End Sub
 
 ' 電卓の値をテキストボックスに入れる
 Private Sub CommandButton6_Click()
 ' 電卓のウィンドウがある場合
 If IsWindow(hWnd) > 0 Then
 ' 電卓のテキストボックスの値を取得
 ActiveCell.Value = GetCalcText
 End If
 End Sub
 
 Private Sub CommandButton8_Click()
 Selection.ClearContents
 End Sub
 
 Private Sub Image1_Click()
 ' 電卓を起動し、最前面に表示させる
 ' 電卓を表示する
 Application.ActivateMicrosoftApp Index:=0
 ' 電卓のウィンドウハンドルを取得する
 hWnd = FindWindowEx(0&, 0&, "SciCalc", "電卓")
 ' 電卓内のエディットボックスのウィンドウハンドルを取得する
 hEditWnd = FindWindowEx(hWnd, 0&, "Edit", vbNullString)
 ' 最前面に表示
 SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
 End Sub
 
 
 Private Sub TextBox1_Change()
 TextBox1.Text = Format(TextBox1.Text, "#,##0")
 End Sub
 
 Private Sub UserForm_Initialize()
 
 Const POINTS_PER_INCH = 66 'この数値変更で移動
 Dim dblWidth As Double
 Dim dblHeight As Double
 
 ' 画面の大きさをポイント単位で取得
 With CreateObject("htmlfile")
 With .parentwindow.screen
 'availWidth, avaiHeight というのもあり
 'MsgBox "解像度: " & .Width & " x " & .Height
 dblWidth = .Width * POINTS_PER_INCH / .deviceXDPI
 dblHeight = .Height * POINTS_PER_INCH / .deviceYDPI
 End With
 End With
 
 ' 位置の設定
 Me.StartUpPosition = 0
 Me.Left = dblWidth - Me.Width
 Me.Top = dblHeight - Me.Height
 
 End Sub
 
 |  |