• ベストアンサー

VBAで文字列を引数とするアドイン関数を呼び出す場合

いつもお世話になります。 ExcelVBAで、アドインから読み込んだ関数を使用する際、 Workbooks("xxx.xla").Application.Run ("xxx") と呼び出すのはいいのですが、もしその関数が 文字列を引数とする場合は、やはり下の書き方のように Workbooks("xxx.xla").Application.Run ("xxx(" & Chr(34) & "C:\work\data.csv" & Chr(34) & ")") と、Chr関数を使用しなければいけないのでしょうか。 もし、もっと簡単な記述がありましたら、ご教授ください。 よろしくお願いいたします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Runメソッドは マクロ名とその引数を引数としてとります Workbooks("xxx.xls").Application.Run("xxx", "C:\Work\Data.csv") といった具合で 引数を指定すれば良いでしょう スペースなどを含むファイル名などの場合は """C:\PRogram Files\Data\sample.csv""" この場合 "C:\PRogram Files\Data\sample.csv"が引数として渡ります と言った具合です

tatapata
質問者

お礼

redfox63さん、ありがとうございました。 まだまだわからないことだらけで勉強不足でした。 こんな方法があるとは知りませんでした。 またなにかありましたら、よろしくお願いいたします。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

"" と打てば文字列を囲む機能が打ち消しになるので、" 単独の意味になります。 MsgBox """" Workbooks("xxx.xla").Application.Run ("xxx(""C:\work\data.csv"")")

tatapata
質問者

お礼

hana-hana3さん、ありがとうございました。 こんなに簡単な方法があったとは、まさに目から鱗です。 まだまだ勉強不足で、ご迷惑をおかけしました。 またなにかありましたら、懲りずによろしくお願いいたします。

関連するQ&A

  • 文字列を用いてExcel関数を呼び出したい

    C#にてExcel用のアドインを作成しています。 そのアドインは、独自の関数の挿入画面を表示し、こちらが用意したVBAの関数を呼び出してデータベースにアクセスする動きです。 この独自の関数の挿入画面上で引数にSUM()などのExcel関数を入力された場合、Excel標準の関数の挿入画面と同じように、 入力された関数の計算結果を右側に表示するような作りにしたいのです。 当初は独自の関数の挿入画面で引数に「SUM(B1:B10)+AVERAGE(C1:C5)」と入力されれば、その文字列を解析してどの関数が呼ばれているか抽出し、 Application.WorksheetFunction内のメソッドを呼び出そうかと考えたのですが、 作業量が多い上に自分の技術力が無いのでバグが発生する可能性が高く信頼に値しないということで、断念しました。 受け取った文字列をそのまま用いてWorksheetFunctionのメソッドを呼び出し、結果を受け取るということは可能でしょうか?

  • 【VBA】IDを入力して文字列を取り出す関数

    ExcelのVBAにてプログラムを作成しています。 IDを引数に渡して、文字列を取り出すような関数を作成しようと思っていますが、 何か良い作成例をご教示頂けないでしょうか? 例としては、このような形を考えています。 ※リソースファイルなどを使用せず、全てコードにて記述。 GetString("TEST_ID") '引数のIDに対応する文字列を返す(ID、文字列はテーブルなどで定義) お手数ですが、よろしくお願いします。

  • 自作アドインのFunctionプロシージャの戻り値を取得

    ExcelVBAのコード内で、自作アドインのFunctionプロシージャを呼び出して戻り値を取得したいのですが、方法がわかりません。 例えば、AddinTest.xlaにPublic Function FuncTest()があり、その戻り値が"Test"だとして、他のExcelファイルのマクロ内で、Msgboxで戻り値"Test"を表示するなど。。。 アドイン内のSubプロシージャを呼び出すには、Application.Run macro:="AddinTest.xla!~"と記述すれば呼び出せることはわかったんですが、Functionプロシージャの戻り値を取得することができないのです。 よろしくご教授ください。

  • VBAでCSVを文字列として取り込む方法

    VBAでCSVを文字列として取り込む方法を教えてください。 下記のようにCSVファイルを取り込んでいます。 Array関数を使用していますが、どうしても文字列として認識してくれません。 Sub CSV取り込み() Dim xlAPP As Application ' Applicationオブジェクト Dim strFILENAME As String ' OPENするファイル名(フルパス) 'Applicationオブジェクト取得 Set xlAPP = Application '「ファイルを開く」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE) 'キャンセルされた場合は以降の処理は行なわない If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _ Array(4, 2), Array(6, 2)) Workbooks.Open Filename:=strFILENAME ActiveWorkbook.Sheets(1).Cells.Copy _ Destination:=ThisWorkbook.Worksheets("sheet1").Range("A1") End Sub この書式ではCSVを文字列として取り込めないのでしょうか? どなた様かご教示ください。 よろしくお願いいたします。

  • ID を引数にとる場合の記述方法

    MFC のダイアログベースでプログラミングをしています。 関数について、引数の記述方法が分からずに困っています。 以下のように、関数の途中で現れる IDC_SOMOTHING に相当する 部分を引数としたいと思っています。 この場合、どのように記述すればよいのでしょうか。 戻り値 関数名(引数) {       ・       ・       ・ // デバイスコンテキストの獲得 CWnd* h = GetDlgItem(IDC_SOMETHING); CDC* pDC=h->GetDC();       ・       ・       ・ } 引数が文字列なら    戻り値 関数名(CString temp){}              ̄ ̄ ̄ ̄ ̄ ̄ とできますが、ID を引数にとる場合、どのように引数を記述したらよいのでしょうか。 教えていただけると幸いです。

  • EXCEl:ユーザー定義関数をLANで共有する方法

    LANに接続しているユーザーでVBAを共有する仕組みを以下のように構築しています。 == サーバー環境 == VBAはアドイン(Addin.xla)としてサーバー(\\SvA)に保存。 サーバーがもう1つあり(\\SvB)、Addin.xlaは、\\SvAから \\SvBに定期的にコピー。 \\SvAと \\SvBは、物理的に距離が離れているため、1つにできません。 == クライアント環境 == クライアントPCの XLSTARTフォルダには、Addin.xlaのショートカットを置く。 \\SvAのユーザーであれば、\\SvA\Addin.xlaへのショートカット、 \\SvBのユーザーであれば、\\SvB\Addin.xlaへのショートカットです。 Addin.xlaに変更があった場合に \\SvA\Addin.xlaを更新するだけなので、この方法を採用し、うまく運用できているのですが、ユーザー定義関数をワークシートで使用したいということになって、ハマってしまいました。 \\SvAのユーザーがユーザー定義関数 User1()をワークシートに =User1()と書き込んで他のユーザーにブックを配布しました。 \\SvAのユーザー間では問題なくブックを使用できますが、\\SvBのユーザーがそのブックを開くと 「このブックには、ほかのデータソースへのリンクが含まれています。」というメッセージが表示されます。 ここで、更新を選択すると、 「このブックには更新できないリンクが1つ以上含まれています。」というメッセージが表示されます。 ここで、継続を選択すると、 ユーザー定義関数が入力されたセルは #NAME? エラーが表示されます。\\SvBのユーザーのワークシートでは、ユーザー定義関数が ='\\SvA\Addin.xla'!User1()となっています。 この問題を解決する方法がないでしょうか。よろしくお願いいたします。

  • fopenの引数の中に変数と文字をいれる方法は?

    fopenの引数の中に変数と文字を入れた場合、エラーが発生しました。 fa = fopen(a[g]".csv", "w" ); 例えば、上記の式にはfopenの引数に変数a[g]と文字列.csvを入れた場合にエラーが発生しました。 エラーの内容は (1)error C2143: 構文エラー : ')' が '文字列' の前にありません。 (2)error C2661: 'fopen' : 1 個の引数を伴うオーバーロードされた関数はありません。 (3)error C2059: 構文エラー : ')' です。 できなくて困っています。 もしわかる方がいたら教えていただけないでしょうか? よろしくお願いいたします。

  • Excel VBAでユーザーフォームが表示されない

    使用環境:Excel2007 OS:Winows Vista A、Bの二つのExcel97-2003形式のxlsファイルがあります。 エクセルには自作のアドインを設定してあります。 (1) Aを開くと、Bを読み取り専用で開きます (2) Bを開いたら、アドインのモジュールを呼び出します。 (3) アドインからAを保存せずに閉じさせ、Bのデータを使用しフォームを表示させます。 ↑の(3)のフォームを表示部分でエラーも出ず、スルーされてしまい困っています。。。 Showの前までは正常に動いています。 この方法よりスマートな手法があればぜひお聞かせください。 みなさまのお力をお貸し下さい。お願いします。 以下コード Aのコード Private Sub Workbook_Open() ActiveWindow.WindowState = xlMinimized Workbooks.Open "B.xls", ReadOnly:=True" ←(1) Workbooks("B.xls").Activate Application.Run ("'アドイン.xla'!Module_関数.Admin") ←(2) End Sub アドインのコード Public Sub Admin() Workbooks("A.xls").Close SaveChanges:=False ←(3) UserForm1.Show vbModal ←問題部分 End Sub

  • EXCEL起動と同時に全セル書式を文字列にしたい

    EXCELを起動すると同時に、 全セルの書式が「文字列」になっているようにさせたいのですが、 VBAのAutoExecを使用する以外に方法ありますでしょうか? ユーザー設定やオプションも一通りチェックしたのですが、 そのような設定はできそうになさそうでした。 できれば、XLA化してアドインできるようにさせたいのですが。 どなたか良い方法をご存知でしたら、ご教授くださいませ。 よろしくお願いします。

  • ユーザー定義関数を作りVBAで記述

    aaaと言う、ユーザー定義関数を作りVBAで記述して使う場合はどのように記述すればよいでしょうか。 通常のワークシート関数であれば、 Cells(1, 1) = Application.Sum(Range("G1:G100")) などとなりますが、 Cells(1, 1) = Application.aaa(Range("G1:G100")) とするとエラーになります。 初歩的な質問だとは思いますが、よろしくお願いします。