投稿日 | : 2006/01/16(Mon) 15:43 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: (VB6)Excelの行削除 |
> 「変数が定義されていません」と表示されてしまいます。
それは、どの部分に対して表示されていますか?
もし、それが分からないようであれば、一度「Option Explicit」を外し、
そのプロシージャの最初の処理(今回は、CreateObject の行) にて、
F9 キーでブレークポイントを張っておき、コードを一時停止してみてください。
その状態で、[表示]メニューの[ローカルウィンドウ]を確認してみてください。
値が Empty になっている変数はありませんか? もしあれば、それが未定義変数かも知れません。
> objExcel.Application.Workbooks.Open pstrDATAPATH
その表記は冗長でしょう。
objExcel と objExcel.Application は同じものを指しますので、
objExcel.Workbooks.Open pstrDATAPATH
objExcel.Application.Workbooks.Open pstrDATAPATH
objExcel.Application.Application.Workbooks.Open pstrDATAPATH
objExcel.Application.Application.Application.Workbooks.Open pstrDATAPATH
はいずれも同じ意味になります。
> For i = 0 To 10000
先の pstrDATAPATH や、この i という変数などは、Dim で定義してありますか?
> objWS.Rows(CStr(i + 2) & ":" & CStr(i + 2)).Select 'Excelマクロからコピー
> objWS.Selection.Delete Shift:=xlUp 'Excelマクロからコピー
3点ほど。
1) ここの xlUp という定数は、Const で定義してありますか?
2) Worksheetオブジェクトに Selection というプロパティはありません。
3) Select してから、Selection を操作するのは冗長です。
直接、Range オブジェクトの Delete メソッドを呼び出すようにしましょう。
> objExcel.Application.DisplayAlerts = False
> objExcel.Application.Workbooks.Close
> objExcel.Application.Quit
これらも、.Application が冗長かと。
> 'Excel開放
あながち間違いともいえないのですが、どちらかと言えば、
開放(open)よりも、解放(release, free)の方が適切かも。
> Set objExcel = Nothing
Nothing の代入は無くても大丈夫ですが、もしも書くのであれば、objExcel だけでなく、
それ以外のすべての使用済みオブジェクト変数に対しても Nothing するべきかと。