- - PR -
多重接続時のアプリケーションエラー
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-31 13:31
Jittaさん、返答ありがとうございました。
Jittaさんの書き込みを引用----------------------------------- 実行中、EXCELプロセスが2つできていることを確認したので、 オブジェクトが正しく参照されているなら、複数のアクセスがあっ ても値が混合するなどの問題はないと判断します。 ------------------------------------------------------------- 私の場合、問題はズバリ、これだと思います。 実行中にEXCELプロセスは2つ出来ていますがオブジェクトが正しく参照されていないから こういう結果になっているのだと思います。 私の場合、どうやら 一時表→本番用シート の部分でつまずいているようです。 抜粋してロジックを載せてみました。 Dim objExcelApp As New Excel.Application objExcelApp = CType(CreateObject("Excel.Application"), Excel.Application) Dim objExcelBook As Excel.Workbooks = objExcelApp.Workbooks Dim book As Excel.Workbook = objExcelBook.Open("C:\TestFolder\TESTFile.xls") Dim objExcelSheets As Excel.Sheets = book.Worksheets With objExcelApp .Sheets(ExcelFORMAT2).Select() .Range(.Sheets(ExcelFORMAT2).cells(1, 1), .Sheets(ExcelFORMAT2).cells(1, 1)).Copy() .Sheets(ExcelFORMAT1).select() .Range(.Sheets(ExcelFORMAT1).cells(1, 1), .Sheets(ExcelFORMAT1).cells(1, 1)).PasteSpecial(Excel.XlPasteType.xlPasteValues) End With OPENするファイルはユーザーによって異なります。 上記のようにEXCELFORMAT2を一時表とし、そこにDBから取得したデータをとりあえず 入れてしまい、出力されたEXCELFORMAT2のデータをコピーして EXCELFORMAT1の本番用シートに値貼り付けしています。 もしかしたら2台のPCで実行した時に編集を行う際、同じEXCELFORMAT2のシートを見に行っている可能性があります。 (ExcelFORMAT2,ExcelFORMAT1ともにシート名は固定のものです。) でも複数PC立ち上げたらフォルダも別々のを見に行くようにしているので ファイルも別々のものに編集してくれると思ったのですが・・。 だめなんですかね・・。こういうやり方は・・。 | ||||
|
投稿日時: 2003-10-31 13:56
う〜ん、問題はPasteSpecialでしょう。これって、クリップボード使いません?クリップボードは、マシン(つまり、サーバ)に1つです。 それから、 Dim objExcelApp As New Excel.Application ここ、newいりません。下の行でCreateしていますから。 | ||||
|
投稿日時: 2003-11-04 11:11
Jittaさん返答ありがとうございました。
クリップボードの件は本当に初歩的なことですが、正直、私は知りませんでした。 やっぱり、二つ同時にというのは無理そうなのでフラグかなにかで 判断させて、強制的に1つしか接続出来ないように作り変えようと思います。 でも非常に良い勉強になりました。 返答を下さった方々、ありがとうございました。 | ||||
|
投稿日時: 2003-11-04 16:28
クリップボードについてですが、いい加減なことを書いていました。「PCに1つ」と書いた根拠は、SunOSマシンで/tempディレクトリにファイルができていたことに由来します。したがって、Windowsマシンでは事情が違います(同じようなファイルはできていなかったと思う)。
そこでMSDN、サポート情報を「クリップボード clipboard」をキーワードに探してみましたが、該当するような記述は見つけられませんでした。しかし、プラットフォームSDKの「OpenClipboard」に、『検討の目的でクリップボードを開き、他のアプリケーションがクリップボードの内容を変更できないようにします。』という記述があります。ここでクリップボードはプロセス間通信の目的に使われているため、やはり「PC(正しくはOS)に1つ」なのかもしれません。 |