投稿日 | : 2007/06/06(Wed) 17:30 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: 「オブジェクト変数または With ブロック変数が設定されていません。」というエラーが出てしまいます。 |
> Set XLSBook = CreateObject("excel.application.10")
変数名に Book という名前が付いていますが、ここで得られるオブジェクトは、
Excelブックをあらわすオブジェクト(Workbookオブジェクト)ではなく、
Excel本体をあらわすオブジェクト(Applicationオブジェクト)ですよ。
> With XLSBook.Application
すでに Application オブジェクトを取得済みですので、今回のコードで
Application プロパティを利用することは無意味かと思います。
上記の場合、「XLSBook」「XLSBook.Application」「XLSBook.Application.Application」は
同一のオブジェクトを参照することになりますので…。
> Fname = C:\Documents and Settings\User1\My Documents\book1.xls
誤記とは思いますが、両端を「"」で囲まないと。
> .Workbooks.Open (Fname)
括弧は不要です。付けたいのであれば、Call ステートメントを併用しましょう。
> row1 = .Range("A:A").Find("Start", lookin:=xlValues).Row
Find メソッドは、一致するデータが見つからなかった場合に Nothing を返しますので、
Set x = 〜.Find(…)
If x Is Nothing Then
'見つからなかったときの処理
Else
row1 = x.Row
End If
のようにすべきでしょう。
> タイトルのエラーメッセージが表示され、
Nothingすなわち、オブジェクト自体が存在しない状態であれば、そうなるでしょうね。
存在しないオブジェクトの Row プロパティを得ることはできませんし。
> .Range(Cells(row1, 2), Cells(row2, 2)) = num
『Cells』ではなく、『.Cells』です。
ドットが抜けていると、どのシートのセルを参照しているのかが曖昧になり、
幾つかの弊害を引き起こします。
http://hanatyan.sakura.ne.jp/vbhlp/ExcelErr.htm