excelで、スクロールしてもマクロを登録したボタンが表示されるようにしたいと考え、以下のマクロを作りました。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim myBtn As Object, WinTop As Double, WinLeft As Double
On Error GoTo EndLine
Set myBtn = Sh.Shapes("ボタン 1")
If myBtn Is Nothing Then Exit Sub
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
With myBtn
.Top = WinTop + 90 '上から
.Left = WinLeft + 790 '左から(右までで全部で650ぐらい)
End With
Set myBtn = Sh.Shapes("ボタン 2")
If myBtn Is Nothing Then Exit Sub
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
With myBtn
.Top = WinTop + 210 '上から
.Left = WinLeft + 790 '左から(右までで全部で650ぐらい)
End With
EndLine:
End Sub
ボタン1とボタン2はそれぞれ別々のシートにあります。
このマクロですと、ボタン1は、上手く機能するのですが、ボタン2が機能しません。
どうすればよろしいでしょうか??
初心者なので、出来るだけ詳しく回答願います。
No.3ベストアンサー
- 回答日時:
こんにちは
ボタンを固定したいだけなら、ANo1様の回答に私も賛同します。
ただ、VBAを勉強中ということで、どうしたもんか?ということで
あれば、一例として載せますのでご参考まで。
動かない理由はANo2様が指摘している通りだと思います。
ボタン2のあるシートの時でも、Set myBtn = Sh.Shapes("ボタン 1")
が実行されます。
On Error GoTo EndLineを指定しているので、エラーは表示されませんが、
実際にはエラーが発生して終了します。
試しにOn Error GoTo EndLineをコメントアウトして実行してみると
わかると思います。
---------------以下VBA 参考------------------------------
Option Explicit 'おまじない
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim myBtn As Object
Dim WinTop As Double
Dim WinLeft As Double
On Error GoTo EndLine
If Sh.Name = "Sheet1" Then 'Sh.Name は ActiveSheet.NameでもOK Sheet1の名称は必要に応じて変更
'MsgBox ("Sheet1の時のみ実行します。")
Set myBtn = Sh.Shapes("ボタン 1")
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
With myBtn
.Top = WinTop + 90 '上から
.Left = WinLeft + 790 '左から(右までで全部で650ぐらい)
End With
ElseIf Sh.Name = "Sheet2" Then 'Sh.Name は ActiveSheet.NameでもOK Sheet2の名称は必要に応じて変更
'MsgBox ("Sheet2の時のみ実行します。")
Set myBtn = Sh.Shapes("ボタン 2")
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
With myBtn
.Top = WinTop + 210 '上から
.Left = WinLeft + 790 '左から(右までで全部で650ぐらい)
End With
End If
EndLine:
End Sub
Option Explicit は下記を参照
http://tryasp.winscom.co.jp/document/vbscript/58 …
If myBtn Is Nothing Then Exit Sub での判定は On Error GoTo EndLine
と同じ効果なので除外しています。
とりあえずご参考まで
No.5
- 回答日時:
こんばんは。
>初心者なので、出来るだけ詳しく回答願います。
そうは思えないのですが。誰かのコードを真似たのかな?
>ボタン1とボタン2はそれぞれ別々のシートにあります。
別々のシートにあるボタンを、一つのコードで処理しようとするのは、ありえないです。本来は、別々に作ったほうがよいです。こういうコードは、邪道かもしれません。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim myBtn As Object
Dim WinTop As Double
Dim WinLeft As Double
If Sh.Shapes.Count = 0 Then Exit Sub
On Error Resume Next
Set myBtn = Sh.Shapes("ボタン 1")
If Not myBtn Is Nothing Then
GoTo myExe
End If
Set myBtn = Sh.Shapes("ボタン 2")
If myBtn Is Nothing Then
Exit Sub
End If
myExe:
On Error GoTo 0
With myBtn
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
.Top = WinTop + (ActiveWindow.VisibleRange.Height) / 4
.Left = WinLeft + (ActiveWindow.VisibleRange.Width) * 3 / 4
End With
Set myBtn = Nothing
End Sub
'WinLeft + 790 '左から(右までで全部で650ぐらい)
なぜ、650の範囲で、790と外に出してしまうのでしょうか。クリックできないと思います。
この回答への補足
こんにちは。
>そうは思えないのですが。誰かのコードを真似たのかな?
はい。教えてgooでコードを調べて少し改良したものです。
>なぜ、650の範囲で、790と外に出してしまうのでしょうか。クリックできないと思います。
'左から(右までで全部で650ぐらい)←この一文は、元にしたコードに最初から書いてあったものです。消去するのを忘れていました。混乱させてしまい、申し訳ございません。
大変参考になりました。ありがとうございます。
No.4
- 回答日時:
ちょっと乱暴ですが
On Error Resume Next
と
On Error GoTo 0
を使ってみました。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim myBtn As Object, WinTop As Double, WinLeft As Double
On Error Resume Next '(1)エラー行を無視し次の行から実行する
Set myBtn = Sh.Shapes("ボタン 1")
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
With myBtn
.Top = WinTop + 90 '上から
.Left = WinLeft + 790 '左から(右までで全部で650ぐらい)
End With
Set myBtn = Sh.Shapes("ボタン 2")
WinTop = ActiveWindow.VisibleRange.Top
WinLeft = ActiveWindow.VisibleRange.Left
With myBtn
.Top = WinTop + 210 '上から
.Left = WinLeft + 790 '左から(右までで全部で650ぐらい)
End With
On Error GoTo 0 '(2)エラー処理を無効にする
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
スクロールしてもボタンを常に表示させたい。Excel2002
Excel(エクセル)
-
【Excel VBA】マクロボタンを表のスクロールやフィルタに左右されず固定できないですか?
Excel(エクセル)
-
エクセルで、マクロボタンの表示位置を固定
その他(Microsoft Office)
-
-
4
エクセルでオブジェクトを常に表記する
Excel(エクセル)
-
5
WEBのようにスクロールすると付いてくる表
Excel(エクセル)
-
6
エクセルでマクロボタンを動かさないようにするには
Excel(エクセル)
-
7
Excel フォームで作成したボタンを固定したい
Excel(エクセル)
-
8
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
9
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
10
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
14
Excelでワードアートや図を常に上部に表示させたい
Excel(エクセル)
-
15
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
16
Excel:コマンドボタンの移動
Excel(エクセル)
-
17
別のシートから値を取得するとき
Visual Basic(VBA)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
-
20
未記入がある場合はマクロを実行させない方法
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームコントロールから作っ...
-
UPS警告音を止めたい
-
複数シートのボタンに同一の動...
-
オブジェクト名をVBAで指定...
-
ボタンを画像で作るか、CSSでデ...
-
Excelシート上のマクロを登録し...
-
パナソニックKX-PW22CLHの電話...
-
VBAでクリアボタンのみ残してシ...
-
Accessのフォームでタブの色
-
EXCELの塗りつぶしのボタ...
-
Dドライブのアクセス許可
-
Access VBAでボタンの背景色を...
-
マクロ ボタンをクリックしたら...
-
エクセル チェックボックスの...
-
2重フィルター
-
【Excel】難しいのですが、献立...
-
【Excel VBA】マクロボタンを表...
-
生成AI画像について
-
メルカリのメルカードで買い物...
-
画像をループさせるうまい方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
エクセルの画面にユーザーフォ...
-
【Excel VBA】マクロボタンを表...
-
UPS警告音を止めたい
-
Excel ラジオボタンのリセット...
-
Excelで、ボタンにコメントをつ...
-
複数シートのボタンに同一の動...
-
フォームコントロールから作っ...
-
ユーザーフォームをショートカ...
-
マクロで作ったボタンのサイズ...
-
エクセルで、オプションボタン...
-
EXCELのマクロが 実行時エラー5...
-
EXCELの塗りつぶしのボタ...
-
エクセルでマクロボタンを押す...
-
excel スクロールしても常にボ...
-
Accessのフォームでタブの色
-
入力済み、選択したセルに連動...
-
マクロ初心者です。 msgboxのre...
-
Access VBAでボタンの背景色を...
-
VBAでクリアボタンのみ残してシ...
おすすめ情報