[[20220413174507]] 『マクロボタンの代替案』(事務員) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロボタンの代替案』(事務員)

お世話になります。

現在、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 でエラーになりませんか。
(?) 2022/04/14(木) 10:11

 >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


https://dekiru.net/article/14418/
タッチディスプレイでも使えそうですね

(ピンク) 2022/04/14(木) 18:56


タッチパネルではダブルクリックイベントは反応しません。
[[20220120160841]]
[[20201003220953]]
で論議されています。
(KLY) 2022/04/15(金) 09:30

ハイパーリンクイベントではどうでしょう。
(tkit) 2022/04/15(金) 09:39

 別々にシートモジュールに貼り付けて動作を確認してみてください。
 タッチパネルでのダブルクリックは反応しないことが分かります。

 ダブルクリックイベント
 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.