[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/01/16(Mon) 14:52
投稿者名:たー
Eメール:
URL :
タイトル:
(VB6)Excelの行削除
VB6.0 Excel2000 Win2000Pro

VB.netの掲示板の方で、質問を出してしまったようで、こちらで再質問させて頂きたいと思います


まずExcelの方で、マクロを録画?し、下記のコードを書いているのですが、「変数が定義されてい
ません」と表示されてしまいます。

*****コード*****
Dim objExcel As Object 'アプリケーション(エクセル)
Dim objWB As Object 'ワークブック
Dim objWS As Object 'ワークシート

'Excel起動
Set objExcel = CreateObject("Excel.Application")
'テンプレートオープン
objExcel.Application.Workbooks.Open pstrDATAPATH
' テスト用 表示
objExcel.Application.Visible = True
Set objWS = objExcel.ActiveSheet

For i = 0 To 10000

If (Mid(strJOBNo, 2, 1) = "A") Then
'行削除
objWS.Rows(CStr(i + 2) & ":" & CStr(i + 2)).Select   'Ex
celマクロからコピー
objWS.Selection.Delete Shift:=xlUp           'Excelマクロからコピ


i = i - 1
End If

Next i

'保存メッセージ消去
objExcel.Application.DisplayAlerts = False
'Excel Close
objExcel.Application.Workbooks.Close
'Excel終了
objExcel.Application.Quit
'Excel開放
Set objExcel = Nothing
*****コード*****

「Excelマクロからコピー」のところを、どのように修正すれば上手くいきますでしょうか?^^;

最近プログラムをやり始めたばかりで、よく分かっていませんので、回答宜しくお願い致します。

投稿時間: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 するべきかと。

投稿時間:2006/01/16(Mon) 16:02
投稿者名:たー
Eメール:
URL :
タイトル:
Re^2: (VB6)Excelの行削除

魔界の仮面弁士様

何とか私が思っているように、動くようになりました。
ありがとうございます。

> > 「変数が定義されていません」と表示されてしまいます。
> どの部分で?
「xlUp」の部分が問題あったようでした。

>
>
> > 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 メソッドを呼び出すようにしましょう。
objWS.Range(CStr(i + 2) & ":" & CStr(i + 2)).Delete
と修正したところ、私が思っていた通りに動作してくれました。

その他、ご説明頂いた個所に関しては、現状完全には理解できませんでしたので
自分で調査していきたいと思います。
 ※オブジェクト、メソッド、プロパティ等

>
>
> > objExcel.Application.DisplayAlerts = False
> > objExcel.Application.Workbooks.Close
> > objExcel.Application.Quit
> これらも冗長。
>
> > 'Excel開放
> 開放(open)ではなく、解放(free)だと思います。
>
> > Set objExcel = Nothing
> Nothing の代入は無くても大丈夫ですが、もしも書くのであれば、objExcel だけでなく、
> それ以外のすべての使用済みオブジェクト変数に対しても Nothing するべきかと。

'Excel開放
Set objWS = Nothing
Set objWB = Nothing
Set objExcel = Nothing
このように、修正しました。


以上、ありがとうございました。