[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロボタンの代替案』(事務員)
お世話になります。
現在、B3:E10の各セルに合わせるようにして、透明な四角形のマクロボタンを配置しております。
現状はこれで支障ないのですが、
近々マクロ数を増やす予定のため、
透明なボタンを配置する以外に良い方法が無いか探しております。
< 使用 Excel:Office365、使用 OS:Windows10 >
シートの右クリックイベントとかではダメなのですか? (通りすがり) 2022/04/13(水) 17:53
>近々マクロ数を増やす予定のため、
もしかして、ボタンごとに違う内容のマクロを 登録してある、ということですか? (通りすがり) 2022/04/13(水) 17:54
因みに、そのマクロ数は...どれくらい増えるのでしょうか? (あみな) 2022/04/13(水) 18:18
現在は、
・Application.Callerか何かを経由して、
・共通のプロシージャに引数を与えて、処理を分岐しているものと想像されます。
ダブルクリックイベントプロシージャでは、どのセルでダブルクリックしたかを
表すTargetという引数が使えますから、同等のことができると思います。
処理内容そのものは結構なので、現行の処理の分岐のあたりのコードを提示されれば、
イベントプロシージャでどのように対応するかの提案もできると思います。
いかがですか?
(γ) 2022/04/13(水) 18:28
Option Explicit Dim buf As String
======================================
Sub 重量() Application.ScreenUpdating = False Dim ws As Worksheet Set ws = Worksheets("記録表") ws.Unprotect
入力フォーム.Show vbModal
If rtnValue = "削除" Then ws.Range(buf) = "" ws.Range(buf).Next = "" ws.Range(buf).Next.Next = ""
ElseIf rtnValue = " " Or rtnValue = 0 Then '何もしない
Else ws.Range(buf) = Format(Date, "yyyy/mm/dd(aaa)") ws.Range(buf).Next = Hour(Time) & ":" & Minute(Time) ws.Range(buf).Next.Next = rtnValue
End If
ws.Protect Application.ScreenUpdating = True
End Sub
======================================
Sub 重量001()
buf = "F3" Call 重量
End Sub
======================================
Sub 重量002()
buf = "F4" Call 重量
End Sub ・ ・ ・
↑100セル程度に組み込みを検討中
(事務員) 2022/04/13(水) 21:52
ダブルクリックイベントを使うと 以下シートモジュールに貼り付け Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '"B3:E10"以外をダブルクリックするとExit Sub If Intersect(Target, Range("B3:E10")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "B3": Call 重量("F3") 'B3をダブルクリックで重量("F3")実行 Case "B4": Call 重量("F4") Case "B5": Call 重量("F5") Case "B6": Call 重量("F6") Case "B7": Call 重量("F7") Case "B8": Call 重量("F8") Case "B9": Call 重量("F9") Case "B10": Call 重量("F10") ' Case "C3": Call 重量(??) ' Case "C4": Call 重量(??) ' Case "C5": Call 重量(??) End Select Cancel = True End Sub
[標準モジュール] Option Explicit Sub 重量(buf As String) Application.ScreenUpdating = False
B3セル ⇒ buf = "F3" B4セル ⇒ buf = "F4" C3セル ⇒ buf = "F11" などに規則性はありますか、有ればもっと簡素に書けますが
(ピンク) 2022/04/13(水) 22:59
>rtnValue でエラーになりませんか。
当然Public変数などで与えてるのでしょうからエラー にならないと思いますが。 ご存じなかったら御免なさい。 (通りすがり) 2022/04/14(木) 10:24
F3から下に順次入力していくなら Range("F2").End(xlDown).Offset(1).Select でいいような気がするけど。 ボタンもいらないし。 (nm) 2022/04/14(木) 12:03
現状はタッチディスプレイでセルをタップして入力しております。
とりあえず、提案頂いた「ダブルクリックイベント」というものを後日検証してみたいと思います。
(事務員) 2022/04/14(木) 17:59
(ピンク) 2022/04/14(木) 18:56
別々にシートモジュールに貼り付けて動作を確認してみてください。 タッチパネルでのダブルクリックは反応しないことが分かります。
ダブルクリックイベント Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("B3:B7")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "B3": Range("F3").Value = "AA" Case "B4": Range("F4").Value = "BB" Case "B5": Range("F5").Value = "CC" Case "B6": Range("F6").Value = "DD" Case "B7": Range("F7").Value = "EE" End Select End Sub
チェンジイベント Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("B3:B7")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "B3": Range("F3").Value = "AA" Case "B4": Range("F4").Value = "BB" Case "B5": Range("F5").Value = "CC" Case "B6": Range("F6").Value = "DD" Case "B7": Range("F7").Value = "EE" End Select Range("A1").Select'次回のイベント発生用に備える End Sub (KLY) 2022/04/15(金) 11:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.