C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: エクセルのVBAとの関連


(過去ログ 67 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■39232 / inTopicNo.1)  エクセルのVBAとの関連
  
□投稿者/ 亜矢 (7回)-(2009/08/01(Sat) 16:08:53)

分類:[.NET 全般] 

よろしくお願いします。下記は過去に質問して解決した問題です。
今回はこのエクセルファイル C:\test.xlsにVBAの記述があり、ファイルオープン時にユーザーフォームを表示する様になっています。
そのときVBAのユーザーフォームとの関連か(?)よくわかりませんが、VBのFormが画面に表示されたままになってしまい、エクセルシートに一度カーソルを当ててVB側の
Formをタスクバーに避難する動作が必要です。下記のプログラムではVBのFormがタスクバーに避難しています。
エクセル側のファームがあってもVBのFormがタスクバーに入る様にしたいと思います。
 ご指導の程よろしくお願いします。
No38820 (亜矢 さん) に返信
> 早速のご指導ありがとうございます。開くプログラムは下記のようになっています。
解放処理に問題のありそうなコードになっていますね…。

原型に近い形で修正するとしたら、こうかな。
# 掲示板上に直接記述しただけなので、テストしていませんけれども。


Imports System.Runtime.InteropServices
Public Class Form1
Private exApp As Excel.Application = Nothing
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Button1.Enabled = False
exApp = New Excel.ApplicationClass()
Dim exBooks As Excel.Workbooks = exApp.Workbooks
Dim exBook As Excel.Workbook = exBooks.Open("C:\test.xls")
exApp.Visible = True
Marshal.ReleaseComObject(exBook)
Marshal.ReleaseComObject(exBooks)
End Sub

Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
If exApp IsNot Nothing Then
exApp.Quit()
Marshal.ReleaseComObject(exApp)
exApp = Nothing
End If
End Sub
End Class


引用返信 編集キー/
■39280 / inTopicNo.2)  Re[1]: エクセルのVBAとの関連
□投稿者/ mitchin (5回)-(2009/08/04(Tue) 13:33:38)
No39232 (亜矢 さん) に返信
> よろしくお願いします。下記は過去に質問して解決した問題です。
> 今回はこのエクセルファイル C:\test.xlsにVBAの記述があり、ファイルオープン時にユーザーフォームを表示する様になっています。
> そのときVBAのユーザーフォームとの関連か(?)よくわかりませんが、VBのFormが画面に表示されたままになってしまい、エクセルシートに一度カーソルを当ててVB側の
> Formをタスクバーに避難する動作が必要です。下記のプログラムではVBのFormがタスクバーに避難しています。
> エクセル側のファームがあってもVBのFormがタスクバーに入る様にしたいと思います。
>  ご指導の程よろしくお願いします。
> ■No38820 (亜矢 さん) に返信
>>早速のご指導ありがとうございます。開くプログラムは下記のようになっています。
> 解放処理に問題のありそうなコードになっていますね…。
> 
> 原型に近い形で修正するとしたら、こうかな。
> # 掲示板上に直接記述しただけなので、テストしていませんけれども。
> 
> 
> Imports System.Runtime.InteropServices
> Public Class Form1
>     Private exApp As Excel.Application = Nothing
>     Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
>         Button1.Enabled = False
>         exApp = New Excel.ApplicationClass()
>         Dim exBooks As Excel.Workbooks = exApp.Workbooks
>         Dim exBook As Excel.Workbook = exBooks.Open("C:\test.xls")
>         exApp.Visible = True
>         Marshal.ReleaseComObject(exBook)
>         Marshal.ReleaseComObject(exBooks)
>     End Sub
> 
>     Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
>       If exApp IsNot Nothing Then
>           exApp.Quit()
>           Marshal.ReleaseComObject(exApp)
>           exApp = Nothing
>       End If
>     End Sub
> End Class

タスクバーへの退避らしきコードが見当たりませんが・・・
Form の ShowInTaskbar を True に設定しているということでしょうかね。

Excel との連携ということですが、ファイルに対しては VBA からのみ処理し、
.NET からはファイルを開くことと Excel が起動中とか終了したとかを見るだけであれば
Process を使うことを検討してみてはいかがでしょうか。

ファイルを開くだけなら Process.Start("C:\test.xls") と記述すればいいだけです。
起動中・終了を判別するなら Process 変数(例:ExcelProcess)を WithEvents で宣言して
ExcelProcess = Process.Start("C:\test.xls")
ExcelProcess.EnableRaisingEvents = True
と記述し Exited イベントハンドラに適切な処理を実装します。

引用返信 編集キー/
■39288 / inTopicNo.3)  Re[2]: エクセルのVBAとの関連
□投稿者/ 亜矢 (8回)-(2009/08/04(Tue) 16:04:25)
No39280 (mitchin さん) に返信
> ■No39232 (亜矢 さん) に返信
>>よろしくお願いします。下記は過去に質問して解決した問題です。
>>今回はこのエクセルファイル C:\test.xlsにVBAの記述があり、ファイルオープン時にユーザーフォームを表示する様になっています。
>>そのときVBAのユーザーフォームとの関連か(?)よくわかりませんが、VBのFormが画面に表示されたままになってしまい、エクセルシートに一度カーソルを当ててVB側の
>>Formをタスクバーに避難する動作が必要です。下記のプログラムではVBのFormがタスクバーに避難しています。
>>エクセル側のファームがあってもVBのFormがタスクバーに入る様にしたいと思います。
>> ご指導の程よろしくお願いします。
>>■No38820 (亜矢 さん) に返信
> >>早速のご指導ありがとうございます。開くプログラムは下記のようになっています。
>>解放処理に問題のありそうなコードになっていますね…。
>>
>>原型に近い形で修正するとしたら、こうかな。
>># 掲示板上に直接記述しただけなので、テストしていませんけれども。
>>
>>
>>Imports System.Runtime.InteropServices
>>Public Class Form1
>> Private exApp As Excel.Application = Nothing
>> Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
>> Button1.Enabled = False
>> exApp = New Excel.ApplicationClass()
>> Dim exBooks As Excel.Workbooks = exApp.Workbooks
>> Dim exBook As Excel.Workbook = exBooks.Open("C:\test.xls")
>> exApp.Visible = True
>> Marshal.ReleaseComObject(exBook)
>> Marshal.ReleaseComObject(exBooks)
>> End Sub
>>
>> Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
>> If exApp IsNot Nothing Then
>> exApp.Quit()
>> Marshal.ReleaseComObject(exApp)
>> exApp = Nothing
>> End If
>> End Sub
>>End Class
>
> タスクバーへの退避らしきコードが見当たりませんが・・・
> Form の ShowInTaskbar を True に設定しているということでしょうかね。
>
> Excel との連携ということですが、ファイルに対しては VBA からのみ処理し、
> .NET からはファイルを開くことと Excel が起動中とか終了したとかを見るだけであれば
> Process を使うことを検討してみてはいかがでしょうか。
>
> ファイルを開くだけなら Process.Start("C:\test.xls") と記述すればいいだけです。
> 起動中・終了を判別するなら Process 変数(例:ExcelProcess)を WithEvents で宣言して
> ExcelProcess = Process.Start("C:\test.xls")
> ExcelProcess.EnableRaisingEvents = True
> と記述し Exited イベントハンドラに適切な処理を実装します。
ありがとうございました。Processを検討してみます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -