[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロボタンの代替案』(事務員)
お世話になります。
現在、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.