アプリ版:「スタンプのみでお礼する」機能のリリースについて

複数のコマンドボタン(VBAで)を一つにまとめたい。

Private Sub CommandButton1_Click()
Application.Goto Reference:=Range("A7"), Scroll:=True
End Sub

Private Sub CommandButton2_Click()
Application.Goto Reference:=Range("A29"), Scroll:=True
End Sub

Private Sub CommandButton3_Click()
Application.Goto Reference:=Range("A51"), Scroll:=True
End Sub

Private Sub CommandButton4_Click()
Application.Goto Reference:=Range("A73"), Scroll:=True
End Sub

Private Sub CommandButton5_Click()
Application.Goto Reference:=Range("A95"), Scroll:=True
End Sub

Private Sub CommandButton6_Click()
Application.Goto Reference:=Range("A117"), Scroll:=True
End Sub

Private Sub CommandButton7_Click()
Application.Goto Reference:=Range("A139"), Scroll:=True
End Sub

Private Sub CommandButton8_Click()
Application.Goto Reference:=Range("A161"), Scroll:=True
End Sub

Private Sub CommandButton9_Click()
Application.Goto Reference:=Range("A183"), Scroll:=True
End Sub
Private Sub CommandButton10_Click()
Application.Goto Reference:=Range("A205"), Scroll:=True
End Sub

Private Sub CommandButton11_Click()
Application.Goto Reference:=Range("A227"), Scroll:=True
End Sub

上記のように複数のコマンドボタンを関数化して一つにすることは出来るでしょうか?

A 回答 (3件)

ふたつ答えを出しておきますので、お好きなほうを使えばよいです。

フォームコントロールですれば、早いと思います。
あえて、OLEコントロールツールでというなら、インスタンスを設けます。
Index にしていますから、ツールのCaptionの名称は関係がありません。上(または左)から順番になります。

'//フォームコントロール用

Sub Buttons_Click()
  Dim objCnt As Object
  Dim i As Long
  If TypeName(Application.Caller) = "String" Then
    On Error Resume Next
    Set objCnt = ActiveSheet.Buttons(Application.Caller)
    If Err.Number > 0 Then Exit Sub
    On Error GoTo 0
  End If
  i = objCnt.Index - 1
  Application.Goto Cells(i * 22 + 7, 1), Scroll:=True
End Sub

'===========
'OLEコントロールの場合
'//Class1 (クラスモジュール)

Public WithEvents myBtn As MSForms.CommandButton 'モジュール上部へ

Private Sub myBtn_Click()
  Dim i As Integer
  i = myBtn.Index - 1
  Application.Goto ActiveSheet.Cells(i * 22 + 7, 1), Scroll:=True
  ''MsgBox ActiveSheet.Cells(i * 22 + 7, 1).Address 'チェック用
End Sub


'//標準モジュール
Public myClass As New Class1 'モジュール上部へ
Sub Auto_Open()
  Dim ctrl As Object
  Dim i As Integer
Static myClass() As Class1
  
  For Each ctrl In Worksheets("Sheet1").OLEObjects '明示的にシート名を入れる
    If TypeOf ctrl.Object Is MSForms.CommandButton Then
      ReDim Preserve myClass(i)
      Set myClass(i) = New Class1
      Set myClass(i).myBtn = ctrl.Object
      i = i + 1
    End If
  Next
End Sub

'戻る側がありませんが、ダブルクリック・イベントなりで、元に戻るほうを入れたほうがよいですね。
    • good
    • 0

おはようございます



プロシージャや関数から別のプロシージャや関数を呼び出すことが出来ます。
このとき、変数を渡すことも出来ます。
以下はサンプルです。

Private Sub CommandButton1_Click()
  Call JampToCell("A7")
End Sub
Private Sub CommandButton2_Click()
  Call JampToCell("A29")
End Sub
Private Sub CommandButton3_Click()
  Call JampToCell("A51")
End Sub

Private Sub JampToCell(TargetCell As String)
  Application.Goto Range(TargetCell), True
End Sub
    • good
    • 1

こちらに入門編から上級編まであります。


http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています