こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel シートにボタンを作成するVBA

ExcelシートのA列にWAVEファイルのフルパス名が書かれている状態で、
このWAVEファイルを再生するボタンをC列に作成するVBAを作りたいのですが、
ボタンが押されたときに実行されるプロシージャに引数がないときは、
コード1のようにすればできますが、
ボタンが押されたときに実行されるプロシージャに引数があるときは、
コード2のように記述してもエラーになりますが、
どのように記述すればよいのでしょうか。(Windows10,Excel2010)


'-----------------コード1------------------------------------------
Sub test()
 Dim row As Integer
 Dim wave_file_path As String
 row = 1
 wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value
 Call 再生ボタン作成(row, wave_file_path)
End Sub

Sub 再生ボタン作成(ByVal row As Integer, ByVal wave_file_path As String)
 Dim cell_loc As String
 cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address
 ThisWorkbook.Worksheets("Sheet1").Select
 With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _
  Range(cell_loc).Top, _
  Range(cell_loc).Width, _
  Range(cell_loc).Height)
  .name = "ボタン_" & cell_loc
  .OnAction = "WAVE_PLAY"
  .Characters.Text = "再生"
 End With
End Sub

Sub WAVE_PLAY()
 Dim wave_file_path As String
 wave_file_path = "Z:\Document\4_Data\CD_DVD_USB\USB_20200222\REC\JBP001\JBP00101.WAV"
 If Dir(wave_file_path) = "" Then
  MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation
  Exit Sub
 End If
 Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path
End Sub
'-------------------------------------------------------------------

'-------------------コード2----------------------------------------
Sub test()
 Dim row As Integer
 Dim wave_file_path As String
 For row = 1 To 100
  wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value
  Call 再生ボタン作成(row, wave_file_path)
 Next row
End Sub

Sub 再生ボタン作成(ByVal row As Integer, ByVal wave_file_path As String)
 Dim cell_loc As String
 cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address
 ThisWorkbook.Worksheets("Sheet1").Select
 With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _
  Range(cell_loc).Top, _
  Range(cell_loc).Width, _
  Range(cell_loc).Height)
  .name = "ボタン_" & cell_loc
  .OnAction = "WAVE_PLAY " & wave_file_path ' <==== ◆ここでエラーになります◆
  .Characters.Text = "再生"
 End With
End Sub

Sub WAVE_PLAY(ByVal wave_file_path As String)
 If Dir(wave_file_path) = "" Then
  MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation
 Exit Sub
 End If
 Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path
End Sub
'-------------------------------------------------------------------

投稿日時 - 2020-02-24 14:44:57

QNo.9716377

困ってます

質問者が選んだベストアンサー

.OnAction = "'WAVE_PLAY """ & wave_file_path & "" & "'"
でいかがですか。
参考にしたサイト
エクセルVBAのボタン設置で引数を渡してマクロを呼び出す方法
https://tonari-it.com/excel-vba-button-augument/

投稿日時 - 2020-02-24 15:14:26

お礼

教えていただきました方法でできました。
ありがとうございました。

投稿日時 - 2020-02-24 18:36:00

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問