- 締切済み
Excelマクロを引数付で起動
VB.NET2002を使用しています。 VBよりEXCELマクロを実行できるとこまでは出来たのですが、 excel.Application.Run("Module1!test") VBで処理した値をExcelに渡すことはできないのでしょうか? Run("マクロ名",引数1,引数2,・・・)のように宣言すれば良さそうなのですが、 型のエラーが出てしまいます。 VB上の吹き出しには「As Object」とあるのですが、実際には文字列(string)や数字(long)です。 そのままRun("test",moji,suuji)のようには無理でしょうか。 ちなみにExcelの受け側ですが、 test(byval moji as string,byval num as integer) のようにすれば…と思っていたのですが。 ご存知の方がいらっしゃいましたら教えてください。 お願いいたします。
- a-k-a
- お礼率43% (77/176)
- Visual Basic
- 回答数4
- ありがとう数6
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Hayashi_Trek
- ベストアンサー率44% (366/818)
ANo.1 の者です。 VB.NETというのを見逃してました。 VB.NETとVBAではデータ型が異なるのですが、そこはOKでしょうか? VBAとVB.NETのデータ型の対応は VBA --- VB.NET -------------------- Integer --- Short Long --- Integer Single --- Single Double --- Double String --- String
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >excel.Application.Run("Module1!test") excel.Application.Run("Book1.xls!test") これは、直していただくとして、 Dim moji As String Dim num As Int32 '型は違ってはいますが…… excel.Run("Book1.xls!test", moji, num) で、特に問題ないと思いますが、逆なら、Excel側から型のエラーが出てしまうでしょうね。 たとえば、以下のように、Excel側の文字と数値の引数が、逆になっていると間違えますね。 Book1.xls!Test Function test(ByVal moji As String, ByVal num As Integer) test = String$(num, moji) End Function
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>VBよりEXCELマクロを実行できるとこまでは出来たのですが、 できている部分があるのであれば、次回からはできている部分も載せましょう。 もしかして↓この部分? >excel.Application.Run("Module1!test") Runの第一引数は ×モジュール!関数名 ではなく ○ブック名!関数名 です。 ↓以下のように行ったらできます。 ※エクセル Public Function test(ByVal moji As String, ByVal num As Integer) As String test = "mojiは[" & moji & "]" & vbCrLf & "numは[" & num & "]" End Function ※.NET Sub Main(ByVal arg() As String) Dim l_xlsApp As Object = CreateObject("Excel.Application") l_xlsApp.Visible = True Dim l_xlsBook As Object = l_xlsApp.Workbooks.Open("C:\Test.xls") MsgBox(l_xlsApp.Run("Test.xls!test", "あいうえお", 5)) l_xlsBook.Close() l_xlsBook = Nothing l_xlsApp.Quit() l_xlsApp = Nothing End Sub
- Hayashi_Trek
- ベストアンサー率44% (366/818)
呼ばれるマクロの方の引数の指定に ByVal とかを付けないようにしたらどうですか? エクセルのマクロの本 『Excel VBA 実用サンプルコレクション』SOFTBANK には myStr = "piyopiyo" Application.RUN "hogehoge", myStr の形式のサンプルが載っています。
関連するQ&A
- VB.NETからVBAマクロ(引数)を呼び出す方法
VB.NETから参照型引数付きのFunctionのVBAマクロを呼び出す方法 Excel2003のVBEの標準モジュールModule1にあるFunctionのマクロtest(引数)をVB.NETから呼び出して、引数に設定した値をVBA側で加工して、加工された値をVB.NETで取り出したいのですが、VB.NET側でどのように記述してよいのかがよく分かりません。 具体的には、以下のVBAをVB.NETから呼び出すにはどのように記述すればよいのでしょうか。できましたらそのままVB.NETのConsoleApplicationのModule1のSub Main()の中にコピーペーストして動くコードと参照設定を教えていただけると助かります。 ---Excel2003のVBA(C:\test\Book1.xls)---------- Function test(ByRef data As Long) As Long If data = 0 Then test = 0 data = 0 Else test = 1 data = 100 / data End If End Function ---------------------------------------------- よろしくお願いします(WindowsXP,VisualStudio2010,Excel2003VBE)
- 締切済み
- Visual Basic
- VBAのマクロをシート内の式で使いたい
VBAで、マクロの関数をエクセルの式で使うことは可能でしょうか? 引数や戻り値の制約も知りたいです。 引数はExcel側ではセル値B1とかになりますが、VBA側では何か対策でもあるのでしょうか? 'VBA public function test(byval a as integer, byval b as integer) as integer test = a + b end function 'エクセル側 C1セルに以下の式 =test(A1, B1)
- 締切済み
- Visual Basic
- 関数の引数
こんにちわ。 ご存知の方、ご教授してもらえないでしょうか? VB.net2005を使っているのですが 関数の引数に変数をセットして、別関数で 引数に対してデータをセットすることは可能でしょうか? C言語でいうところのポインタを引数に渡し ポインタアドレスに書き込むような処理はVB.netでは 可能なんでしょうか? 下記のような事は試したのですが、うまく出来ませんでした(。。; public sub test1() dim mojiretu as string test2( mojiretu ) msgbox(mojiretu) end sub public sub test2( str as string) str = "文字列" end sub
- ベストアンサー
- Visual Basic
- VBからマクロの実行について
下記のようにVBよりエクセルマクロの実行を行っています。 マクロに引数を持たしたいのですが、以下のように記述すると 記述エラーが発生します。 引数をもっているマクロはVBから呼び出すことはできないのでしょうか? よろしくお願いいたします。 引数を持たせない場合はエラーが起こらない objExcl.Run ("Macro1.xls" & "!" & "Macro1") マクロ側に引数を持たして、以下のように記述するとエラーになる objExcl.Run ("Macro1.xls" & "!" & "Macro1(引数)")
- ベストアンサー
- Visual Basic
- エクセルVBA イベントプロシージャに引数を渡せま
お世話になります。 エクセル2003/XP 使用です。 イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか? 下記のコード中の変数mysheetnameを ユーザーフォーム、→ CommandButton1のプロシージャに 引数として渡して行きたいのですが、 実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、 コンパイルエラー: プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。 とエラー表示されます。 イベントプロシージャに引数を渡すことはできますでしょうか? ---------- ThisWorkBook内 ---------- Public mysheetname As String Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) mysheetname = ActiveSheet.Name UserForm1.Show (mysheetname) '←変数mysheetnameの値をユーザーフォームに渡したい。 End Sub ---------- ユーザーフォーム ---------- Private Sub UserForm_Initialize(ByVal mysheetname As String ) 処理 End Sub Private Sub CommandButton1_Click(ByVal mysheetname As String ) 処理 End Sub ’--------- ここまで 引数について少し理解し始めたばかりの者です。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 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(エクセル)
- 引数で戻り値を取得するプログラム
以下のように、引数で戻り値を取得するプログラムを書きたいのですが どのように書けば正しいでしょうか? VB6とVB2005の両方の書き方を教えてください。 sub kekka(byval src as string, byref dst() as string) dim ret() as string ret(0) = "abc" ret(1) = "efg" kekka = ret end sub kekka("xxx", dat() ) msgbox(dat(0)) msgbox(dat(1))
- ベストアンサー
- Visual Basic
- 引数(配列)について
呼ぶ側: Sub main() Call func(test(),test_id) end Sub 呼ばれる側: Private Sub func(Byref test() as string, Byval test_id as long) と言う関係がある場合で 引数(1)test() の値がなく渡したくない場合は、どのように記述すればいいのでしょうか? 引数(2)test_id の値がなく渡したくない場合は、0を渡しています また、呼ぶ側で test() を宣言し、tast()=""を代入すれば問題ないことは分かっているのですが、test()の変数宣言せずに何とかなりませんでしょうか? 宜しくお願いいたします
- ベストアンサー
- Visual Basic
- アクセスからエクセルのマクロを実行したいのですが
Sub エクセルのVBA実行する() Dim xlsWB As Object Dim MyFileName As String MyFileName = "C:\test.xlsx" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!マクロ" Set xlsWB = Nothing End Sub と言うコードを作ったのですが エクセルファイルにはパスワードがかかっています。 パスワード付のエクセルファイルを開きマクロを実行するにはどうすればいいでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルマクロの保存
エクセルのマクロについて教えてください。エクセル2010でセルをダブルクリックすると、同一フォルダ内のPDFファイルデータを表示するというマクロを作ってもらったのですが、保存する際に「次の機能はマクロ無しのブックに保存できません・VBプロジェクト~」と表示されExcelマクロ有効ブック(拡張しxlsm)に替えて保存するとマクロのコード自体は残っているのですが、Not find fileと出てしまいます。また最初からExcelマクロ有効ブックでコードを入力しても同様の結果になります。このような場合どのように保存すればいいのでしょうか? ちなみにコードは下記のようになります。 'Option Explicit 'Private Const pdfPATH As String = "D:\5678\" Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True If Not Target.Value Like "*.pdf" Then Exit Sub If Dir(pdfPATH & Target.Value) = "" Then MsgBox "File Not Found": Exit Sub With CreateObject("Wscript.Shell") .Run "" & pdfPATH & Target.Value & "", 3 End With End Sub
- ベストアンサー
- オフィス系ソフト