.netからアクセスへの配列変数渡しについて

このQ&Aのポイント
  • .NET 2010でアクセスのモジュールを実行させようとしております。アクセスに配列を引数にしようとしていますが、「Public ReadOnly Default Property Chars(index as Integer) as Charに対する引数が多すぎます。」のエラーが発生しており困っております。
  • .NET側で引数のエラーが発生しているため、アクセスに配列を渡すことができません。解決策を教えていただきたいです。
  • アクセス側の関数AcsMdlでは、引数として受け取った配列を処理し、処理が成功した場合はtrueを返します。しかし、.NET側でエラーが発生しているため、処理が実行されずに関数はfalseを返しています。
回答を見る
  • ベストアンサー

.netからアクセスへの配列変数渡しについて

.NET 2010でアクセスのモジュールを実行させようとしております。 アクセスに配列を引数にしようとしていますが “Public ReadOnly Default Propety Chars(index as Integer) as Charに対する引数が多すぎます。” のエラーが発生しており困っております。 これはどのようなことが原因でエラーが発生しているのでしょうか。 また、解決策がありましたらご教授していただけないでしょうか。 .net側 Private sub AcsRun() Dim strdata as string Dim pData(50,10) as object Strdata =数値1 pData(1,1) = 文字2 pData(2,1) = 数値2     ・・・・・・・   ‘ここでpDataでエラーがでます。 If app.Run("AcsMdl"( Strdata, pData) = False) Then    Exit sub End If End sub アクセス側 Public Function AcsMdl (Strdata As Integer, pData () As Variant) As Integer AcsMdl = false ‘処理 AcsMdl = true End function

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

appはAccessのApplicationオブジェクトという認識でよろしいでしょうか? > If app.Run("AcsMdl"( Strdata, pData) = False) Then Application.Runメソッドの構文は  Application.Run("関数名", 引数1, 引数2, ……) です。 従って、  If app.Run("AcsMdl", Strdata, pData) = False Then と書く必要があります。

参考URL:
http://msdn.microsoft.com/ja-jp/library/ff193559%28v=office.15%29.aspx
hiron67
質問者

お礼

ありがとうございます。無事にエラーが出なくなりました。

関連するQ&A

  • Excel VBAで別ブックのマクロから配列を取る

    Excel VBAで別ブックのマクロで計算した結果を配列で渡したいのですが、上手い方法が見つかりません。 同じブック内であれば、 Function GetAry(Imax As Integer, ByRef MyAry As Variant) as Boolean のような関数を作れば、GetAry = True の時に返値の MyAry が有効であるという判断ができますが、この関数を別ブックから使う場合は、参照渡しができません。 これはVBAの仕様なので仕方ないとして、以下のようなマクロを組んでみました。 '------------------------------------------------------- ' Book1.xlsm(呼び出される側) '------------------------------------------------------- Function MyAry(Imax As Integer) As Variant Dim i As Integer Dim SubAry() As Variant If Imax > 10 Then MyAry = False Else For i = 1 To Imax ReDim Preserve SubAry(i) SubAry(i) = i Next MyAry = SubAry End If End Function '------------------------------------------------------- ' Book2.xlsm(呼び出す側) '------------------------------------------------------- Sub GetMyAry() Dim DataAry As Variant Dim Imax As Integer Imax = 11 DataAry = Application.Run("Book1!MyAry", Imax) If DataAry <> False Then MsgBox UBound(DataAry) Else MsgBox DataAry End If End Sub '------------------------------------------------------- Imax = 11 であれば、メッセージボックスに False が表示されますが、Imax = 10 だと当然ですが「型が一致しません」というエラーになります。 エラートラップで誤魔化そうかとも思ったのですが、もっとスマートな方法がないでしょうか。 よろしくお願いします。

  • vb.net Charsメソッドについて

    vs2008、.NET Framework 3.5 にてvb.net の勉強をしているのですが、 下記のような場合にビルドエラーにならないことについて 疑問があります。 Public Class ClassA   Private Sub methodA()     Dim a As String = getString(1) ・・・★   End Sub   Private Function getString() As String     Return "abcdefg"   End Function End ClassA getStringメソッドには引数をとらないもののみが定義 されているので、methodAからgetStringメソッドを呼び出した 場合(★)は、ビルドエラーになると思うのですが、なりません。 a の値は"b"になります。 調べてみたところ、引数に1を設定したことによって、 Charsというメソッドが呼ばれているようなのですが、 それであれば、 Dim a As String = getString().Chars(1) と書くものだと思うのですが…。 こういう書き方もできるんだという話であればそれまでなのですが、 どうも腑に落ちないので、説明できる方がいらっしゃれば 教えていただきたいです。

  • 配列の参照渡しで型が一致しません。

    エクセル2003です。 いつもお世話になります。 以下のコードを実行すると「配列の型が一致しません。」というエラーが出ます。 typeNameで確認しても配列の型はvariant()で正しいと思うのですが。。。 皆様のお知恵を拝借させていただけないでしょうか。 -------------------------------------- Sub main() Dim e As Variant e = fuN() Call pRo(e)  '←ここでエラーになる。 End Sub Function fuN() As Variant Dim a(0) As Variant a(0) = "zero" fuN = a End Function Sub pRo(ByRef c() As Variant) '処理っす End Sub --------------------------------------

  • エクセルvba 値渡しのsubプロシージャ

    お世話になります。 エクセルVBAにて、loop処理中にCALLかけている subが最初の一度だけしか呼べません。 なにか、特別にしなければならないことがあるのでしょうか。 こんな感じです。 dim i as integer sub main()   i = 1   max = 5   do     if day1 = day2 then 処理1 データ1, データ2     end if     i = i + 1 loop until i = max    end sub sub 処理1(Byval 引数1 as variant, 引数2 as variant)    msgbox("引数1" & 引数1)    msgbox("引数2" & 引数2) end sub データ1 及び データ2、 DAY1 DAY2は、必要に応じて 転送処理等やっています。

  • 配列

    エクセルvbaなのですが Sub test() ' 配列 Dim arr() As Integer= {0, 1, 2, 3, 4, 5} ' 抜き出した要素を格納するための変数 Dim i As Integer ' すべての要素について繰り返す For Each i In arr Console.WriteLine (i) Next End Sub これって何でエラーになるのでしょう? Dim arr() As Integer= {0, 1, 2, 3, 4, 5} でエラーになりますが、なぜだかわかりません。

  • Accessフォームの作成

    Accessで作成されているシステムの ファイル取り込みフォームにある実行ボタンを押下すると、 下記のメッセージが表示されます。 「select case に対応する case がみつからない。」 どこかで指定しないといけないのでしょうか? Private Sub Cmd実行_Click() On Error GoTo Err Dim StrSql As String Dim IntNDCnt As Integer Dim IntNTCnt As Integer '確認メッセージの出力 If MsgBox("処理を開始します。よろしいですか?", vbInformation + vbYesNo, "データ取込処理") = vbNo Then Exit Sub End If '対象データ別の処理実行 Select Case Me.Cmb対象.ListIndex Case -1 'エラー MsgBox "読込むデータを指定してください", vbCritical, "データ取込処理" Exit Sub Case 0 '全データ If F_手数料明細読込() = False Then Exit Sub End If If F_奨励金読込() = False Then Exit Sub End If If F_減額読込() = False Then Exit Sub End If If F_預り金読込() = False Then Exit Sub End If Case 1 '手数料データ If F_手数料明細読込() = False Then Exit Sub End If Case 2 '奨励金データ If F_奨励金読込() = False Then Exit Sub End If Case 3 '減額データ If F_減額読込() = False Then Exit Sub Case 4 '預り金データ If F_預り金読込() = False Then Exit Sub End If End Select 今は、Case 4が黄色に反転します。

  • VB6.0の参照渡し

    VC++6.0で作成したDLLへVBの配列を渡そうと思っています。 いくつかためしたのですが、 「配列引数は ByRef でなければなりません。」 というエラーがでてしまいます。 標準モジュール内の記述 Declare Function fncTest Lib "Test.dll" (ByRef test() As Long) As Long フォーム内 Private Sub Test_Click() dim test() as Long dim i as integer for i = 0 to 3 test(i) = i next i fncTest(Test()) End Sub とりあえず、こんな形でかいてみましたが、 Sub内のtest()の宣言方法、使用法等ご指導お願いします。

  • VBAの関数で引数渡しでエラー

    関数呼び出しでObject型を渡したいのですが「引数の型が一致していません」との エラーになってしまいます。 以下のプログラムをどのように修正すればよいのでしょうか? Sub Test() Dim obj As Object Set obj = CreateObject("Scripting.Dictionary")     :   Sample(obj) End Sub Function Sample(obj As Object) End Function

  • ※VBA配列

    http://oshiete1.goo.ne.jp/qa5196795.htmlで 質問させてもらった者です。質問不足だったため 質問の内容を追加したかったのですが、追加の方法がわからず またこちらで質問させていただきました Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim X1 As Integer, Y1 As Integer Dim X2 As Integer, Y2 As Integer Dim maru As String, yoko As String, tate As String Dim sankaku As String, shikaku As String Sub 描画() Cells(Y2, X2).Value = shikaku Cells(Y1, X1).Value = sankaku Cells(Y, X).Value = maru End Sub Sub 削除() Cells(Y2, X2).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() X2 = X1 Y2 = Y1 X1 = X Y1 = Y If yoko = "右" Then X = X + 1 Else X = X - 1 End If If X = 30 Then yoko = "左" ElseIf X = 1 Then yoko = "右" End If If tate = "上" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 20 Then tate = "下" ElseIf Y = 1 Then tate = "上" End If End Sub Sub main() maru = "●" sankaku = "▲" shikaku = "■" X = 1 Y = 1 X1 = 1 Y1 = 1 X2 = 1 Y2 = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub a~tの文字が、上記のような動きをする プログラムを作成するにはどのように配列を活かせばいいですか? 配列がよくわかっておらず勉強したのですが…使えずにいます;;

  • Access VBA

    AccessからVBAを利用してダイアログ形式でExcelファイルのインポートをしたいです。 実行すると、 「このアクションまたはメソッドを実行するには、[File Name/ファイル名]引数が必要です。」 とエラーが出てしまいます。 標準モジュール —――――――――――――――――――――――――――――――――――― Function TestGetFileName() Const ENABLE_WIZHOOK = 51488399 Const DISABLE_WIZHOOK = 0 Dim strFile As String Dim intResult As Integer WizHook.Key = ENABLE_WIZHOOK ' WizHook 有効化 intResult = WizHook.GetFileName( _ 0, "", "", "", strFile, "", _ "xlsxファイル (*.xlsx)|*.*", _ 0, 0, 0, True _ ) WizHook.Key = DISABLE_WIZHOOK ' WizHook 無効化 TestGetFileName = strFile End Function —――――――――――――――――――――――――――――――――――― フォームのボタン押下時 —――――――――――――――――――――――――――――――――――― Public Sub コマンド0_Click() Dim s As String s = TestGetFileName If s = "" Or IsNull(s) Then Exit Sub DoCmd.TransferSpreadsheet acimport, 10, "取込B", strFileName, False, "注文TB!" MsgBox "インポートが終了しました。" End Sub —――――――――――――――――――――――――――――――――――― VBA自体かなりの初心者ですが、お知恵をお貸しください。

専門家に質問してみよう