tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcelでファイルの中身がコピーされるバグ
記事No7503
投稿日: 2008/05/13(Tue) 14:08
投稿者おたか
質問します。
Form1にてパスsのファイルを操作しています。
その後
            System.Runtime.InteropServices.Marshal.ReleaseComObject(Book)
としてBookを閉じています。

その後Form2を開いて以下の関数a()をCallしています。
すると、ファイルsのファイル名は変わっていないのですが、
ファイルsの中身は以下のファイルdirにすり替わってしまいます。
ファイルsとファイルdirは別のディレクトリに存在してます。
以下のように、念のためdirを呼ぶ前にsを明示的に閉じてみましたが、
現象は変わりません。

ファイルsとファイルdirは全然違うファイルなので、中身がコピーされては困ります。
どなたか防ぐ方法を教えてください。

Private sub a()    
   Dim Book As Microsoft.Office.Interop.Excel.Workbook
   Dim xlSheets As Microsoft.Office.Interop.Excel.Sheets
   Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
   Dim r1 As Microsoft.Office.Interop.Excel.Range
   Dim BookNow As Microsoft.Office.Interop.Excel.Workbook

   '最初に今開いているファイルを閉じる(本当は閉じているはず)
   Dim BookNow As Microsoft.Office.Interop.Excel.Workbook = Books.Open(s)
   BookNow.Close()
   System.Runtime.InteropServices.Marshal.ReleaseComObject(BookNow)

   dir = GetAppPath()
   dir = dir & "\h8.xls"
   Book = Books.Open(dir) 'ファイルを呼び出す
   xlsheets = Book.Worksheets()

 'Excelファイルdirの読み込み&書き込みを行う

[ツリー表示へ]
タイトルRe: Excelでファイルの中身がコピーされるバグ
記事No7510
投稿日: 2008/05/13(Tue) 19:56
投稿者るしぇ
s と dir を文字列型で定義し、
それぞれに違うパスを指定し、
ローカルファイルでテストしたところ、
違うファイルが開かれましたし、中身がコピーされることもありませんでした。

提示のコードでは、同じ変数が複数回宣言されていたり、
書込んだコード内に宣言されていない変数があったり、
宣言されていない関数があったり、
s と dir で開いたブックはそれぞれ BookNow と Book で参照されていたり、

GetAppPath は既存の HttpWorkerRequest.GetAppPath メソッド (System.Web)
があるので使わない方が良いメソッド名だったり、
dir は既存の Microsoft.VisualBasic.FileSystem.Dir 関数が呼ばれる可能性
があるので使わない方が良い変数名だったり、

質問する以前にコードの整理ができていませんでした。

[ツリー表示へ]
タイトルRe^2: Excelでファイルの中身がコピーされるバグ
記事No7523
投稿日: 2008/05/14(Wed) 10:36
投稿者おたか
>> GetAppPath は既存の HttpWorkerRequest.GetAppPath メソッド (System.Web)
> があるので使わない方が良いメソッド名だったり、
> dir は既存の Microsoft.VisualBasic.FileSystem.Dir 関数が呼ばれる可能性
> があるので使わない方が良い変数名だったり、

勉強になりました。ありがとうございます。
特に変数名dirはかなりうっかりしておりました。
ご指摘ありがとうございます。

[ツリー表示へ]