• ベストアンサー

VBで作成したアプリからExcelを開き文字列を検索・置換したい

環境:OS.Win2000、Excel2000、VB6 VBで作成したアプリからExcelを開き文字列を検索・置換し保存して閉じる という流れの処理をしたいのですがエラーが発生してしまいます。 Private Sub Command1_Click() Dim xlApp As Object Dim xlBook As Object Dim ret As Object 'OPEN Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("c:\aaa.xls") xlApp.Application.Visible = True '置換 xlApp.ActiveCell.Replace what:=TextBox1.Value, _ replacement:=TextBox2.Value, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set ret = xlBook.Application.Cells.Find(what:=TextBox1.Value, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False) ret.Activate '終了 xlApp.Quit '開放 Set xlBook = Nothing Set xlApp = Nothing End Sub 上記の状態だと ”指定された文字列に置換” の所で ”オブジェクトが必 要です”とエラーが出てしまいます。エラーNOは424です。ちなみに検索 では”Rangeクラスのfindプロパティを取得できません”(1004)となりま す。どうすればエラーが出ないように出来るのか分かりません。また、外部 のアプリでオートメーションを利用する際に気おつけなければいけない事が あれば教えてください。ちなみにExcelのVBA上で実行すると置換までは動作 します。検索の所でエラー1004が発生します。さっぱり理解できません。で きればこの違いも教えてください。続けての質問ですがよろしくお願いします。

  • ta55
  • お礼率57% (8/14)

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>>xlPart、xlNext、xlByRowsが宣言されていないからでは? >これは、定数ですか?ヘルプを見る限りはそのようですが。 そうです。定数です。 ExcelのVBE、または参照設定でExcelのオブジェクトを 追加したVBのオブジェクトブラウザで確認してみてください。 VBやVBAは、 Option Explicit がソースの先頭にないと、関数中にはじめて出てくる 未定義の変数は、Variant型の変数として勝手に 処理します。 つまり、参照設定を行わない状況では、xlPart等の 定数の情報もないので、VBが勝手にVariant型の変数と して処理されています。 これを回避するのは、 参照設定をするか、オブジェクトブラウザで調べた数値を直接指定or自分で定数宣言するかです。

ta55
質問者

お礼

何とか解決しました。 皆さん有り難うございます!

その他の回答 (2)

回答No.2

開発時は、参照設定をする メニューバー「プロジェクト」→「参照設定」 「Microsoft Excel *.* Object Library」にチェック 変数の宣言を以下のように...   'Dim xlApp   As Object   'Dim xlBook   As Object   'Dim ret    As Object   Dim xlApp   As Excel.Application   Dim xlBook   As Excel.Workbook   Dim ret    As Excel.Range OPENのところを変更   'Set xlApp = CreateObject("Excel.Application")   Set xlApp = New Excel.Application 正常に動作することを確認したら、 参照設定の「Microsoft Excel *.* Object Library」にチェックをはずし、 コメントアウトしたところを元に戻してから、 正常動作するか確認する あと、VBのテキストボックスオブジェクトには、「Value」プロパティはないような... どこが分からないのかはっきりしてから、整理してから再度...

ta55
質問者

補足

アドバイスの通りにしたら動作しました!text.valueは自分の間違えでした...。最大の問題は参照設定だったようです。しかし、 > コメントアウトしたところを元に戻してから、 > 正常動作するか確認する 元に戻したら..動作しません。これにはどんな意図があるのでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

xlPart、xlNext、xlByRowsが宣言されていないからでは? 参照設定してますか? VBのオプションの"変数の宣言を強制する"のチェックをつけることをお勧めします。

ta55
質問者

補足

前回からありがとうございます。 >xlPart、xlNext、xlByRowsが宣言されていないからでは? これは、定数ですか?ヘルプを見る限りはそのようですが。

関連するQ&A

  • オブジェクト、プロパティ、メソッドの関係

    環境:OS.Win2000、Excel2000VBA プロパティやメソッドの呼び出し方法に疑問があります。 ExcelのVBAで以下の動作は確認しています。(例1) Dim xlApp As Application Dim xlBook As Worksheet '置換 xlApp.ActiveCell.Replace what:="A", replacement:="B", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set Oret = xlBook.Application.Cells.Find(what:="A", After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) 疑問に思っているのは「xlApp.ActiveCell.Replace」の”Replaceメソッド”を オブジェクトブラウザで調べるとRangeオブジェクトと、WorksheetFunctionオブ ジェクトにしか含まれないように受け取れます。またヘルプの「対象」を見ても Replaceが含まれているのは二つしかありません。ようするに以下の二通りでし か使えないように思えるのです。 Dim A As Range Dim B As WorksheetFunction A.Replace ~ B.Replace ~ しかし実際には(例1)のようにApplicationオブジェクトでも”Replaceメ ソッド”を使えます。”Replace関数”を見てみても引数を見ると”Replace メソッド”です。いまひとつ理解が浅いため目的の動作をさせるのにどのオ ブジェクトからメソッドを呼べば良いのか分かりません。基本的な事なのか もしれませんが、ぜひご回答くださいよろしくお願いします。

  • VBアプリでExcelファイル内の文字が置換された事を確認する方法

    環境:OS.Win2000、Excel2000VBA VBアプリでフォルダ、検索文字列、置換文字列を入力するとExcelファイ ルを探し出し、順に置換していく処理をしようと思っています。置換した ファイルの名前をリストにするため置換されたかどうか必要があります。 しかし.Replaceメソッドは置換に成功しても失敗してもTrueを返すとなっ ています。 そこで検索にヒットしたファイルを置換すればいいのではと思い以下のよ うにテストしてみました(この様な使い方をして良いのか解りませんが) Dim ChkVal As Boolean Dim a '検索 Set ret = xlBook.Application.Cells.Find(What:=Text1.Text, _ After:=xlApp.ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False) a = ret.Value '!!!エラー発生ポイント 'Emptyかチェックする ChkVal = IsEmpty(a) If ChkVal <> True Then MsgBox "見つけた" Else MsgBox "なし" End If 動作結果 (1)テキストボックスに何も入力せず実行 ⇒ 正常に動作 (2)ファイル内に存在する文字列を入力して実行 ⇒ 正常に動作 (3)ファイル内に存在しない文字列を入力して実行 ⇒ 異常終了 (3)では「オブジェクト変数または With ブロック変数が設定されていませ ん(Error 91)」とでます。 そこで質問です。 1.置換されたか確認するには、どのような方法が適当か 2.動作結果の(2)ではエラーにならないのに(3)ではなぜエラーになるのか 3.検索⇒置換⇒置換されたファイルの一覧作成という流れを皆さんだったら どのような組み立てをするか 質問が複数になってしまいましたがよろしくお願いします。

  • EXCEL マクロでの検索をお教えください

     下記のようなマクロを使いたいのですがこの場合×があるときは良いのですが、  無いときエラーが出ます。どの様にすれば良いのかお教えください。  無いときエラーは オブジェクト変数または With ブロック変数が設定されていません。  となります。 Sub 検索()    Range("K12:K70").Select    Cells.Find(What:="×", After:=ActiveCell, LookIn:= _    xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _    xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub

  • エクセル2003で特殊文字の置換方法

    エクセル2003、XPを使用しています。 エクセルのマクロで置換をしているのですが、 置換対象がCHAR(160)です。 セル上に上のを打ち込むと、実際は違いますが半角スペースに見えます。 特殊文字であっているのでしょうか。 それで、この文字を消したいと思い、以下の通りマクロで記述しているのですが、成功しません おわかりになる方いらしたらよろしくお願いします。 Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

  • EXCEL VBAでの 文字列検索

    セル内の文字列を部分一致で検索したいのですが、 下記の構文だと、検索対象シートを選択しなくてはならないため、 PGの動きが堅くなってしまいます。何かいい方法をご存知の方、 教えてください。 Selection.Find(What:=key, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate Cells.FindNext(After:=ActiveCell).Activate

  • エクセルでマクロを使用しての置換

    マクロ初心者です。 データを変換するシステムをマクロで作成していますが、 自分のPCではちゃんと実行できるのに、お客さんのPCで実行するとエラーが出てしまいます。 エラーが出る部分は、どうも置換するところらしく、 Selection.Replace What:="<BR>", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False ここが黄色く表示されるそうです。 どこを直せばよいですか?

  • エクセルの置換の検索場所に「ブック」を指定し置換

    エクセルの置換の検索場所に「ブック」を指定し置換するには? 過去ログを見たのですが http://okwave.jp/qa/q5268557.html シートをループするしかないのでしょうか? Sub Macro2() Cells.Replace What:="aaaa", Replacement:="zzz", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub のように、シート全体にするかブック全体にするかのプロパティは存在しないのでしょうか?

  • エクセルで置換のマクロの際

    Selection.Replace What:="あ", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False エクセルのマクロで置換をする際に 自動記録で書くとこうなります。 「あ」を「(空白)」におきかえる内容ですが 置き換え候補がたくさんある場合は 上記の記述をくりかえし記述するしかないのでしょうか? 例 「あ」を「」に 「い」「」に   というような具合です

  • Excelマクロ 置換について教えてください。

    A列の,10を,15に置換したいので下記マクロを記録しました。 ほかに,10を,16などにしたい場合もあるため、 入力画面を表示して初期値は,10から,15ですが、ほかを入力した場合は他の値で置換するマクロを教えてください。 Sub Macro1() Columns("A:A").Select Selection.Replace What:=",10", Replacement:=",15", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub

  • excelのvbaを使って日付を置換したいのです

    こんにちは。いつも質問ばかりですみません。 今、excell の VBAの勉強をしているのですが、たとえば、B列に2004/5/3 とか、2004/5/5とか、5月の日付ばかりはいっていたとして、その2004/5の部分を2004/6に置換したいとします。 それを、マクロでやらせてみて、VBAを見ると Sub Macro9() Cells.Replace What:="2004/5", Replacement:="2004/6", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub のようになるのですが、このプロシージャーを実行しても、うまく置換できません。 どのように記述したら、できるのか、教えていただけるとうれしいです。 よろしくお願いいたします。