掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VBA側で引数を変更するVBAマクロをVB.NETから呼び出す方法 (ID:147978)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になります。 先日、「引数が構造体のVBAのマクロをVB.NETから呼び出すには?」 http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+201210/12100013.txt において、引数が構造体のVBAのマクロをVB.NETから呼び出す方法について教えていただきましたが、VBA側で引数の構造体のデータを変更しない場合には、この方法でうまくいくのですが、VBA側で引数の構造体のデータを変更する場合には、エラーにはならないのですが、変更した結果がVB.NET側の引数に反映されて来ないようなのです。例えば、下記のコードでは、VBA側の<追加部分A>で値を変更したので、VB.NET側の<追加部分B>で、t_o.xとt_o.yは"DEF"と456になって欲しいのですが、"ABC"と123のままです。どのようにすれば、VBA側で変更した変数や構造体の引数の値を、VB.NET側の引数に反映させることができるのでしょうか。 '---VBA32側---------------------------- Option Explicit Sub test(ByRef t_o As SampleLibrary.T) MsgBox t_o.x MsgBox t_o.y MsgBox TypeName(t_o) t_o.x = "DEF" ' <追加部分A> t_o.y = 456 ' <追加部分A> End Sub '---VB.NET側---------------------------- Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices Module Module1 Sub Main() Dim oExcel As New Excel.Application Dim oBook As Excel.Workbook Dim oBooks As Excel.Workbooks = oExcel.Workbooks Dim strPath As String Dim t_o As SampleLibrary.T t_o.x = "ABC" t_o.y = 123 strPath = "C:\temp\test\Book1.xls" oExcel.Visible = True oBook = oBooks.Open(strPath) oExcel.Run("'" & oBook.Name & "'!TEST", t_o) MsgBox t_o.x ' <追加部分B> MsgBox t_o.y ' <追加部分B> oBook.Close(False) System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook) oBook = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks) oBooks = Nothing oExcel.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oExcel = Nothing End Sub End Module '---VB.NET側DLL(プロジェクト名SampleLibrary)--- Imports System.Runtime.InteropServices Public Structure T <MarshalAs(UnmanagedType.BStr)> Public x As String Public y As Integer End Structure '------------------------------- よろしくお願いします。 (WindowsXP,Excel2003_VBA,VisualStudio2010)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.