プロが教えるわが家の防犯対策術!

エクセル2003 OSはXP を使っています。
以下のとおり、全く同じコードにも関わらず、前者は動き、後者は動きません。
なお、ClearContents を Clear に変えても Copy に変えても、同様の結果です。
しかし、Cells を使わずに、"A4:C10" 等、番地で直接書くと、後者も動きます。
後者のコードを Cells で動かす方法は無いでしょうか?
また、何故こんな現象がおこるのでしょうか?
なお、シート名などは、間違いありません。
どなたか教えてください。

Sheets("基本データ作成").Range(Cells(3, 3), Cells(qwe, 4)).ClearContents

Sheets("検討データ").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents

A 回答 (4件)

Cellsプロパティはアクティブシートに対して指定が有効になるようです。


したがって、
Sheets("基本データ作成").Range(Cells(3, 3), Cells(qwe, 4)).ClearContents

Sheets("検討データ").Activate

Sheets("検討データ").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents

としてから実行すると「動く」のでは?
なお、「qwe」の変数の値は「0」以外が取得されていますよね?

この回答への補足

すみません。
大事なことを忘れてました。
前者も後者も、ワークシート上に配置したコマンドボタンから実行するようにしています。
なお、qwe の値は、必ず「1」以上になります。

補足日時:2004/05/11 13:56
    • good
    • 0

>前者も後者も、ワークシート上に配置したコマンドボタンから実行するようにしています。


>なお、qwe の値は、必ず「1」以上になります。
コマンドボタンが「Sheets("基本データ作成")」用、「Sheets("検討データ")」用にそれぞれのSheet上に別置きで配置されているなら、それぞれのボタン実行でVBAとして動作するはずですが(当方の環境 WinXP、Excel2002)。

Private Sub CommandButton1_Click() 'Sheets("基本データ作成")のボタン

Dim qwe As Integer
qwe = 10
Sheets("基本データ作成").Range(Cells(3, 3), Cells(qwe, 1)).ClearContents
End Sub


Private Sub CommandButton1_Click() 'Sheets("基本データ")のボタン

Dim qwe As Integer
qwe = 10
Sheets("基本データ").Range(Cells(3, 3), Cells(qwe, 1)).ClearContents
End Sub

この回答への補足

たびたび言葉足らずですみません。
前者は、同シート上、
後者は、別シート上に配置されています。
なお、実行時エラー1004
アプリケーション定義またはオブジェクト定義のエラーです。
と、エラー表示が出ています。

補足日時:2004/05/11 14:23
    • good
    • 0

>前者は、同シート上、


>後者は、別シート上に配置されています。
>なお、実行時エラー1004
>アプリケーション定義またはオブジェクト定義のエラーです。

と、いうことなら
Private Sub CommandButton1_Click() 'Sheets("基本データ")以外のSheetに配置されたのボタン

Dim qwe As Integer

Sheets("基本データ").Activate '追加コード(オブジェクト定義)
qwe = 10
Sheets("基本データ").Range(Cells(3, 3), Cells(qwe, 1)).ClearContents
End Sub

つまり、オブジェクト「Sheets("基本データ")」の定義エラーということのようです。

この回答への補足

何度もありがとうございます。
ご教示いただいた
Sheets("基本データ").Activate '追加コード(オブジェクト定義)
ですが、
実行時エラー438
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
と表示されまして、エラーになってしまいました。
名案は無いものでしょうか?

補足日時:2004/05/11 15:44
    • good
    • 0
この回答へのお礼

すみません。先ほどの補足は私の間違いです。
Activate を
Active と記述していました。
まことに申し訳ございませんでした。
おかげさまで、Activate '追加コード(オブジェクト定義)はクリアーできました。
どうもありがとうございました。

お礼日時:2004/05/11 16:06

コマンドボタンをSheet1に貼りつけた場合。


Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet2").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
はエラーになりました。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Worksheets("sheet2").Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
で動きました。
明示しないと、Rangeの( )の中のCellsをSheet1のRangeと解釈するので、Sheet2のActiveteと矛盾する。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
もだめでした。
ForNextにしたのは、qweの影響でないと思ったので
変化させました。
    • good
    • 1
この回答へのお礼

出来ました!
いつも適切的確なアドバイス、
定義とworkisheetsがポイントのようですね。
本当にありがとうございます!!

お礼日時:2004/05/11 16:30

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