アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境: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が発生します。さっぱり理解できません。で
きればこの違いも教えてください。続けての質問ですがよろしくお願いします。

A 回答 (3件)

>>xlPart、xlNext、xlByRowsが宣言されていないからでは?


>これは、定数ですか?ヘルプを見る限りはそのようですが。

そうです。定数です。
ExcelのVBE、または参照設定でExcelのオブジェクトを
追加したVBのオブジェクトブラウザで確認してみてください。

VBやVBAは、
Option Explicit
がソースの先頭にないと、関数中にはじめて出てくる
未定義の変数は、Variant型の変数として勝手に
処理します。

つまり、参照設定を行わない状況では、xlPart等の
定数の情報もないので、VBが勝手にVariant型の変数と
して処理されています。

これを回避するのは、
参照設定をするか、オブジェクトブラウザで調べた数値を直接指定or自分で定数宣言するかです。
    • good
    • 0
この回答へのお礼

何とか解決しました。

皆さん有り難うございます!

お礼日時:2004/02/20 13:48

開発時は、参照設定をする


メニューバー「プロジェクト」→「参照設定」
「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」プロパティはないような...

どこが分からないのかはっきりしてから、整理してから再度...

この回答への補足

アドバイスの通りにしたら動作しました!text.valueは自分の間違えでした...。最大の問題は参照設定だったようです。しかし、

> コメントアウトしたところを元に戻してから、
> 正常動作するか確認する
元に戻したら..動作しません。これにはどんな意図があるのでしょうか?

補足日時:2004/02/19 16:49
    • good
    • 0

xlPart、xlNext、xlByRowsが宣言されていないからでは?



参照設定してますか?
VBのオプションの"変数の宣言を強制する"のチェックをつけることをお勧めします。

この回答への補足

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

補足日時:2004/02/19 16:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!