- 締切済み
エクセルVBA:全部のコマンドボタンに反映させる方法。
エクセルVBA:全部のコマンドボタンに反映させる方法。 コマンドボタンにVBAを記述してフォルダを開いたり、 ブラウザを立ち上げたりしています。 現在の状態ですと、 そのコマンドボタン毎にwithの記述をしています。 ボタンが十個ある場合、↓の文を10回書いています。 Dim ooo as worksheet set ooo = Thisworkbook.worksheets("test") with ooo ***中身の記述 end with これを10回かかずに、1回どこかに記述するだけで 全てのボタンに反映させる方法はありませんか? public sub で記入して callで呼び出しても end with で終わってしまうため、 .cell(*.*)が使えなくて困っています・・・ 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
関連するQ&A
- 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 '-------------------------------------------------------------------
- ベストアンサー
- Excel(エクセル)
- Excel VBA 引数が2個のマクロの呼び出し方
ExcelのVBAで、 シート上のボタンがクリックされた時に呼び出す マクロ(プロシージャ)の引数が1個の時は、 コード1のようにできましたが、 引数が2個ある時は、コード2のように記述しても、 ボタンをクリックするとエラーになりますが、 【?】の部分をどのように記述すればよいのでしょうか。 (Windows10,Excel2010) -------------------コード1---------------------------------------- Sub test1() Dim row As Integer Dim wave_file_path As String For row = 1 To 2 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 ------------------------------------------------------------------- -------------------コード2---------------------------------------- Sub test2() Dim row As Integer Dim wave_file_path As String For row = 1 To 2 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 & "" & "," & row & "'" <==【?】 .Characters.Text = "再生" End With End Sub Sub WAVE_PLAY(ByVal wave_file_path As String, ByVal row As Integer) 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 ThisWorkbook.Worksheets("Sheet1").Cells(row, 4).Value = "再生済" End Sub -------------------------------------------------------------------
- 締切済み
- Excel(エクセル)
- EXCELのVBAについて教えてください。
演習1というシートの(1,1)のセルの値と(1,2)のセルの値を入れ替えるプログラムを作成したいので すがエラーが出て出来ません。コードは下記の様に書きました。 Sub 演習1() Dim sheetobj As Worksheet Dim a As Integer Set sheetobj = ThisWorkbook.Worksheets("演習1") With sheetobj a = .Cells(1, 1) .Cells(1, 1) = .Cells(1, 2) .Cells(1, 2) = a End With End Sub プログラミング自体が本を読んでも分かりません。 宜しければ小学生に教えるように文を訳してくれませんか?
- ベストアンサー
- その他(インターネット・Webサービス)
- エクセルのVBAの記述について
VBAの記述についてなのですが、 Sub filter() Dim gyo As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Set ws1 = Worksheets("データ") Set ws2 = Worksheets("チーム") Application.ScreenUpdating = False ws2.Range("A4:BH30").Clear gyo = ws1.Range("A65536").End(xlUp).Row ws1.Activate With ws1.Range(Cells(4, 1), Cells(gyo, 6)) .AutoFilter Field:=1, Criteria1:="A" .SpecialCells(xlCellTypeVisible).Copy ws2.Range("A4") Selection.AutoFilter End With Application.ScreenUpdating = True End Sub ならプログラムははしるのですが、 14行目を .SpecialCells(xlCellTypeVisible).Copy ws2.Range(Cells(4, 1)) だと 「実行時エラー 1004 Rangeメソッドは失敗しました Worksheet オブジェクト」 とでるのですが、出来ないのでしょうか? Cells(4, 1)の1のところを変数にして変えていきたいのですが、よい方法はありますか。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Excel VBA コマンドボタン
質問させて頂きます。 現在コマンドボタンを作成したいと考えているのですがツールボックスからでは無く、コーディングで作ろうと考えています。 現在は下記のコードでコマンドボタンの作成までは出来たのですが + コマンドボタンの背景色/フォントカラー/フォントサイズの調整も加えたいと思っています。 下記のコードに上記要望を可能にする為にはどのようなコードを記述すれば宜しいでしょうか? よろしくお願いします。 With ActiveSheet.Buttons.Add(省略しました) .Name = "" .Caption = "" .OnAction = "" End With
- 締切済み
- Visual Basic
- エクセルVBAでFor each文
下記のようなコードを書きたいのですが「オブジェクトが必要です」というエラーが 出力されてしまいできないようです。何か代替案はありますでしょうか。 --- dim ws as worksheet with thisworkbook for each ws in array(.worksheets(1),.worksheets(2),.worksheets(3)) with ws 'ここに処理を書く end with next ws end with --- ちなみにこのbookにある全てワークシートで処理を回したいわけではなく 特定のシートのみで処理をしたいです。 エクセル2003です。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- Excel VBA With ~ End With
Excel VBA With ~ End Withを使わずに記述するには Sheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力して、 Sub test1() With ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart .ChartType = xlBarStacked100 .SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End With End Sub を実行すると横棒グラフが1個表示されますが、 これを、With ~ End Withを使わずに記述すると Sub test2() ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.ChartType = xlBarStacked100 ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End Sub というようになると思いますが、 実行すると縦棒が2個表示されてしまって同じ結果になりません。 なぜなのでしょうか。 test1を、With ~ End Withを使わずに記述するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。(Windows10,Excel2016)
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBA・リストボックスに関する質問です。
エクセルVBA初心者です。 作成したワークシート名をVBAにてリストボックス内に表示し、それを選択するとそのシートに飛ぶようにしています。 ------------------- Private Sub ListBox1_Change() With ListBox1 Worksheets(.ListIndex + 1).Activate End With End Sub ------------------- Private Sub UserForm_Initialize() Dim wsSheet As Worksheet For Each wsSheet In Worksheets ListBox1.AddItem wsSheet.Name Next wsSheet End Sub ------------------- これではすべてのシートがリストボックス内に反映される為、反映させたくないシート(3シートあるのですが)も一緒に表示されてしまいます。 この表示させたくないシートをリストボックス内に表示させない事は可能でしょうか? 又、できるとしたら、どんな言語を使用すれば良いのでしょうか? ご教授お願い致します。
- ベストアンサー
- オフィス系ソフト
- VBAで、エクセルからワードへの変換について
VBAは、全くの初心者で、テキスト等のサンプルコードを参照して書いているのですが 期待通りの動きをしないので、教えてください。 やりたい事は、Excelファイル(A-Fカラム、400行程度)を 1行ページのワードに変換し、400枚のワードファイルを作成します。 その際に、添付画面のように、各カラムを、タイトル、連番、内容などと区分けをして フォントも変えたいです。 下のコードでは、転送は、出来るのですが、1行1ページにならず、また、 エクセルの枠も転送されてしまいます。 ワードVBAも試したのですが、特定文字での検索が難しく、各ページでの 改行位置が異なるため、自分の理解では出来ませんでした。 ワードでテンプレートを作って、Excel VBAから差込になるのでしょうか? よろしくお願い致します。 Sub CopyExcelDataToWord() Dim wsSource As Excel.Worksheet Dim cell As Excel.Range Dim collUniqueHeadings As Collection Dim lngLastRow As Long Dim i As Long Dim appWord As Word.Application Dim docWordTarget As Word.Document Set wsSource = ThisWorkbook.Worksheets(1) With wsSource lngLastRow = .Range("A" & Rows.Count).End(xlUp).Row Set collUniqueHeadings = New Collection For Each cell In .Range("A2:A" & lngLastRow) On Error Resume Next collUniqueHeadings.Add Item:=cell.Value, Key:=cell.Value On Error GoTo 0 Next cell End With Set appWord = CreateObject("Word.Application") With appWord .Visible = True Set docWordTarget = .Documents.Add .ActiveDocument.Select End With For i = 1 To collUniqueHeadings.Count With wsSource .Range("A1").AutoFilter Field:=1, Criteria1:=collUniqueHeadings(i) .Range("A1:D" & lngLastRow).Copy End With With appWord.Selection .PasteExcelTable linkedtoexcel:=False, wordformatting:=True, RTF:=False .TypeParagraph End With Next i For i = 1 To collUniqueHeadings.Count collUniqueHeadings.Remove 1 Next i Set docWordTarget = Nothing Set appWord = Nothing End Sub
- 締切済み
- Visual Basic
- エクセルVBA【ワークシートのコピー】について
以下のVBA記述で、とあるエクセルファイルのシートをCSV化しようとしております。記述の場合、すべてのワークシートが対象となっていますが、10個くらいあるWorkSheetの【sheets(8)】のみを対象としたいのですが、どのようにしたら良いのでしょうか? お手数ですがご教授下さい。 Sub test() Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False For Each sh In ActiveWorkbook.Worksheets fname = "C:\temp\" & sh.Name & ".csv" sh.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Next sh Application.ScreenUpdating = True End Sub
- ベストアンサー
- オフィス系ソフト
補足
具体的にはどうすればいいのですか? どうしても end with でひっかかってしまいます・・・