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

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

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

Re[3]: VB2005でEXCELのシートをアクティブにするには?


(過去ログ 28 を表示中)

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

■13401 / inTopicNo.1)  VB2005でEXCELのシートをアクティブにするには?
  
□投稿者/ もねを (27回)-(2008/01/29(Tue) 11:29:20)

分類:[VB.NET/VB2005] 

こんにちは。初歩的な質問となるのですがアドバイスをよろしくお願いします。

環境ですが、VB2005 Pro+EXCEL2003です。
雛形となるエクセルシートを開いてSheet1にデータをペタペタ貼り付けます。
Sheet2は帳票となります。(Sheet1にデーが張り付けば帳票は完成となります)

困っている内容は、エクセルに貼り付けて表示までOKなのですが、
Sheet1がアクティブシートになってしまいます。
Sheet2をアクティブシート(表として表示したいです)にしたいのですが、方法がわからず困っております。
よきアドバイスよろしくお願いします。

下記がソースです。

Imports Microsoft.Office.Interop
Imports System.Runtime.InteropServices
------------------------------------
Dim xlBookPath As String = ""
Dim xlBookName As String = ""

'エクセルを表示する
Dim xlApp As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlRange As Excel.Range

'エクセル帳票を出力する
xlBookName = "雛形.xls"
xlBookPath = MyDirectoryPath & "\Excel\" & xlBookName

xlBook = xlBooks.Add(xlBookPath)
xlSheet = xlApp.Worksheets("DATA")
xlApp.DisplayAlerts = False

'エクセルシートを消す
xlSheet.Range("1:1").ClearContents()
xlSheet.Range("3:65536").ClearContents()

'--ペタペタとセルに貼り付ける--
xlsPos = "D1"
xlRange = .Range(xlsPos)
xlRange.Value = SQLReader("SQLの項目").ToString
Marshal.ReleaseComObject(xlRange) : xlRange = Nothing
'−−省略−−

◎ここでSheet2をアクティブにしたいです。

xlApp.Visible = True
Exit Sub

'−−省略−−
'エラー処理
Marshal.ReleaseComObject(xlSheet) : xlSheet = Nothing
Marshal.ReleaseComObject(xlBook) : xlBook = Nothing
Marshal.ReleaseComObject(xlBooks) : xlBooks = Nothing
If Not xlApp Is Nothing Then
xlApp.Quit()
Marshal.ReleaseComObject(xlApp) : xlApp = Nothing
End If
GC.Collect()


VB6.0の頃は、
ワークシート("シート名称").Activate で書いていた記憶があるのですが、
同じようにしてもエラーになりました。
WEBでいろいろと探したのですが、昔の書き方?は沢山見つかりましたが
Office.Interopを使用した書き方を見つけることができませんでした。

よきアドバイスお願いします。

引用返信 編集キー/
■13404 / inTopicNo.2)  Re[1]: VB2005でEXCELのシートをアクティブにするには?
□投稿者/ やじゅ (65回)-(2008/01/29(Tue) 11:40:04)
No13401 (もねを さん) に返信
> ワークシート("シート名称").Activate で書いていた記憶があるのですが、
> 同じようにしてもエラーになりました。
>

.netでも変わらないはずですけど、何エラーですか?
xlsBook.Worksheets(2).Activate()

引用返信 編集キー/
■13405 / inTopicNo.3)  Re[1]: VB2005でEXCELのシートをアクティブにするには?
□投稿者/ 魔界の仮面弁士 (590回)-(2008/01/29(Tue) 11:42:27)
No13401 (もねを さん) に返信
> xlSheet = xlApp.Worksheets("DATA")
Worksheets を変数に受けてから使いましょう。

> Sheet1がアクティブシートになってしまいます。
> Sheet2をアクティブシート(表として表示したいです)にしたいのですが
…? それらは、上記の "DATA" シートとは別物なのでしょうか?

> xlSheet.Range("1:1").ClearContents()
> xlSheet.Range("3:65536").ClearContents()
それぞれの Range を変数に受けてから使いましょう。

> ◎ここでSheet2をアクティブにしたいです。
> ワークシート("シート名称").Activate で書いていた記憶があるのですが、
"DATA" シートを xlSheet という Worksheet 型の変数に受けたのと同様にして、
対象のシートを Worksheet 型の変数に受け、その変数を .Activate() すれば良いかと。
引用返信 編集キー/
■13406 / inTopicNo.4)  Re[2]: VB2005でEXCELのシートをアクティブにするには?
□投稿者/ もねを (28回)-(2008/01/29(Tue) 11:59:09)
みなさまありがとうございます。

できました!!ありがとうございます。

以下のソースに変更しました。

'エクセルシートを消す
xlRange = xlSheet.Range("1:1")
xlRange.ClearContents()
Marshal.ReleaseComObject(xlRange) : xlRange = Nothing

xlRange = xlSheet.Range("3:65536")
xlRange.ClearContents()
Marshal.ReleaseComObject(xlRange) : xlRange = Nothing

'シート2をアクティブにする
xlSheet = xlBook.Worksheets(2)
xlSheet.Activate()
xlApp.Visible = True

以下、補足内容です。
エラーは、構文エラーが出ました。
xlBook.ActiveSheet(2)
こんな形で書くと、
「プロパティ アクセスはプロパティに割り当てるか、またはその値を使わなければなりません。」

"DATA" シートとは別物なのでしょうか?
すみません。Sheet1のことです。書き換えるのを忘れてしまいました。

助かりました。ありがとうございました。


引用返信 編集キー/
■13407 / inTopicNo.5)  Re[3]: VB2005でEXCELのシートをアクティブにするには?
□投稿者/ もねを (29回)-(2008/01/29(Tue) 12:00:05)
「解決マーク」忘れました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -