Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1921 / 13645 ツリー ←次へ | 前へ→

【70984】ワークシートの右端の座標を取得したいです saya 12/1/23(月) 23:08 質問[未読]
【70986】Re:ワークシートの右端の座標を取得したい... kanabun 12/1/24(火) 9:20 発言[未読]
【70995】Re:ワークシートの右端の座標を取得したい... saya 12/1/24(火) 22:13 質問[未読]
【70998】Re:ワークシートの右端の座標を取得したい... ちび坊主 12/1/25(水) 11:22 回答[未読]
【71033】Re:ワークシートの右端の座標を取得したい... saya 12/1/26(木) 22:42 お礼[未読]

【70984】ワークシートの右端の座標を取得したいで...
質問  saya  - 12/1/23(月) 23:08 -

引用なし
パスワード
   オートシェイプをワークシートの右端に寄せるマクロを組みたいのですが、右端の座標を取得する方法はないでしょうか。
rangevisibleで右端の列を取得することはできましたが、右端の列のどこがワークシート端になるかは識別できず失敗でした。列幅を狭めて解像度を上げてごまかすことも考えましたがセルが小さいと困る用途なのでだめでした。
なにかいい方法はないでしょうか。

【70986】Re:ワークシートの右端の座標を取得した...
発言  kanabun  - 12/1/24(火) 9:20 -

引用なし
パスワード
   ▼saya さん:
>オートシェイプをワークシートの右端に寄せるマクロを組みたいのですが、右端の座標を取得する方法はないでしょうか。
>rangevisibleで右端の列を取得することはできましたが、

すでに「できました」とおっしゃってるので、
そのあとのことは私には わかりませんが、
とりあえず
>rangevisible
というのは 聞いたことがありません。
VisibleRange のまちがいでは?

Sub test()  'ActiveWindow 右端の列名 表示
 Dim ss$
 With ActiveWindow.VisibleRange
   ss = .Address
   MsgBox Split(Split(ss, ":")(1), "$")(1), , ss
 End With
End Sub

【70995】Re:ワークシートの右端の座標を取得した...
質問  saya  - 12/1/24(火) 22:13 -

引用なし
パスワード
   ▼kanabun さん:
すみません。rangevisibleはVisibleRangeの間違いでした。
頭の中で逆になっていました。
VisibleRangeではうまくいかないので他の方法を探しています。

【70998】Re:ワークシートの右端の座標を取得した...
回答  ちび坊主  - 12/1/25(水) 11:22 -

引用なし
パスワード
   こんにちは。

右端の座標を拾ってくる関数などは特に無いですね。
ht tp://www.moug.net/faq/viewtopic.php?t=60244&highlight=SendInput
上記URLのAbyssさんのコードをお借りしています。

シート右側のスクロールバーの位置を拾ってきて、そこにMouseを操作して
図形を作成。そのLeftを取得し、作成した図形を削除。

Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type

Private Declare Function SetCursorPos Lib "user32" ( _
   ByVal x As Long, _
   ByVal y As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
   ByVal hWnd1 As Long, _
   ByVal hWnd2 As Long, _
   ByVal lpsz1 As String, _
   ByVal lpsz2 As String) As Long
Private Declare Function GetWindowRect Lib "user32" ( _
   ByVal hWnd As Long, _
   lpRect As RECT) As Long
Private Declare Sub mouse_event Lib "user32" ( _
   ByVal dwFlags As Long, _
   ByVal dx As Long, _
   ByVal dy As Long, _
   ByVal cButtons As Long, _
   ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

Function GetRWindowPoint(ByRef sngLeft As Single) As Boolean
 Dim Rc As RECT
 Dim hWnd As Long
 
 hWnd = Application.hWnd 'hWnd = FindWindowEx(0, 0, "XLMAIN", Application.Caption)
 hWnd = FindWindowEx(hWnd, 0, "XLDESK", vbNullString)
 hWnd = FindWindowEx(hWnd, 0, "EXCEL7", vbNullString)
 hWnd = FindWindowEx(hWnd, 0, "ScrollBar", vbNullString)
 If hWnd = 0 Then Exit Function
 
 GetWindowRect hWnd, Rc
 AppActivate Application.Caption
 Application.CommandBars.FindControl(ID:=1111).accDoDefaultAction
 
 SetCursorPos Rc.Left - 1, (Rc.Top + Rc.Bottom) \ 2
 mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
 mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

 DoEvents
 If TypeName(Selection) = "Range" Then Exit Function
 
 With Selection
  sngLeft = .Left
  .Delete
 End With
 GetRWindowPoint = True
End Function

Sub Sample001()
 Dim l As Single
 'ActiveSheetに図形が一つ以上あるとして。
 With ActiveSheet.Shapes(1)
  If GetRWindowPoint(l) Then
   .Left = l - .Width
  End If
 End With
End Sub

【71033】Re:ワークシートの右端の座標を取得した...
お礼  saya  - 12/1/26(木) 22:42 -

引用なし
パスワード
   ▼ちび坊主 さん:
教えていただいた方法でうまくいきました。
凄い技です。これはちょっと思いつけないです。

1921 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free