[リストへもどる]
一括表示

投稿時間:2003/01/17(Fri) 13:23
投稿者名:かず
Eメール:
URL :
タイトル:
セルの検索を行う
はじめまして、かずといいます。
当サイトを参考にして、エクセルファイルのセルを検索し、
その検索したセルの行番号と列番号をテキストボックスに
表示するプログラムを作成しましたが、以下のエラーにより
うまくいきません。

「他のアプリケーションがサーバーを使用しているため
この操作を完了できません。操作を続けるには[切り替え]
を選択して他のアプリケーションを終了させてください。」

また、エクセルをプロセスから終了させると

オートメーションエラーです。
リモートプロシージャコールに失敗しました。

と出てきてしまいます。
このエラーがでる場合は、決まって検索に時間がかかる場合
(行の後ろのほう)で、検索に時間がかからない(行の前の
ほう)ではこのエラーは発生しません。

どなたかこのエラーの回避策を教えてください。
宜しくお願い致します。

投稿時間:2003/01/19(Sun) 14:14
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: セルの検索を行う
エラーが発生する原因は大抵の場合プログラムにあるかと思います。
プログラムを投稿してどの部分でどんなエラーが出る等を具体的に
説明して頂かないと第三者ではなかなか正しい解答ができないのでは
従って当然レスも付き難くなります。
ただ、有名な?エラーなら 他のアプリケーションがサーバーを使用しているため を
キーワードで GooGleで検索するとヒットします。
これ等は参考になるかと思います。
  http://www3.plala.or.jp/kazuasa/excel_faq.html

投稿時間:2003/01/20(Mon) 16:55
投稿者名:かず
Eメール:
URL :
タイトル:
Re^2: セルの検索を行う
レスが遅れてしまって大変もうしわけありません。
もう少しプログラムの方を詳しく掲載しますと以下になります。

--------------------------------------------------------------------
Sub main()

Dim objExl As Object    'Excelオブジェクト ハンドラ
Dim StrSerial As String     'テキストボックスに値をセット   格納変数

Set objExl = CreateObject("Excel.Application")  'Excel Object を作成
Set Book = objExl.Workbooks.Open("c:\test.xls") 'Excelファイルを開く
Set Sheet = Book.Worksheets(1)
    
    StrSerial = Form1.Text1.Text        'テキストボックスにシリアル番号をセット

'Form1のテキストボックスに入れた値をtest.xlsの中で検索する
    Cells.Select
    Selection.Find(What:=StrSerial, After:=ActiveCell, LookIn:=xlFormulas, _    
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _    
        MatchCase:=False).Activate

'行番号と列番号を表示する
    Form1.Text1.Text = "行番号=" & Sheet.Cells.Find(StrSerial).Row & _    
                    "   列番号=" & Sheet.Cells.Find(StrSerial).Column
    
End Sub

-----------------------------------------------------------------------------
最初の投稿のときに書いたのですが、test.xlsの中にヒットする文字列があるとき、
若い行(検索に時間がかからない)の場合は、エラーメッセージはでずに、正常に
処理が動くのですが、
後の行(検索に時間がかかる)の場合は、
「他のアプリケーションが・・・」というエラーメッセージがでます。
ちなみにエクセルファイルの大きさは5MBで行数は6000行です。

エラーになる個所は

    Selection.Find(What:=StrSerial, After:=ActiveCell, LookIn:=xlFormulas, _    
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _    
        MatchCase:=False).Activate

ここの部分です。

以上、宜しくお願い致します。

投稿時間:2003/01/20(Mon) 17:07
投稿者名:A221
Eメール:
URL :
タイトル:
Re^3: セルの検索を行う
>     Cells.Select
      Sheet.Cells.Select

>     Selection.Find(What:=StrSerial, After:=ActiveCell, LookIn:=xlFormulas, _    
>         LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _    
>         MatchCase:=False).Activate

      objXLS.Application.Selection.Find(〜

この修正自体は関係ないかもしれませんが、暗黙的な宣言はどのような現象を
引き起こすのかわからないので気に止まった部分を一応。

投稿時間:2003/01/20(Mon) 17:22
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: セルの検索を行う
検索する部分はマクロのコードをそのまま使っておられるので、A221さんが
書かれているように省略形?で書かれている部分で問題が発生していると
思われます。(多分まだあると思うのですが)

検索する部分はここのサンプル同様
Sheet.Cells.Find(StrSerial).Activate
だけではだめなのでしょうか?

このプロシージャはコードを省略して投稿しておられるのですか?

投稿時間:2003/01/20(Mon) 17:30
投稿者名:かず
Eメール:
URL :
タイトル:
Re^4: セルの検索を行う
> 検索する部分はここのサンプル同様
> Sheet.Cells.Find(StrSerial).Activate
> だけではだめなのでしょうか?

花ちゃんさんのご指摘どおり、やってみたのですが
やはりエラーは改善されませんでした。
もう少し、考えてみたいと思います。
本当にありがとうございます!