dポイントプレゼントキャンペーン実施中!

下記コード内で、シートを選択する際、マクロ呼出前は意図したとおり
になるのですが、セル入力前だと上手くいきません。Activateにして
もダメでした。根本的に理解していないようなので、教えてください。
よろしくお願いします。

シートAの実行ボタンをクリック
Private Sub ButtonA_Click()
Application.ScreenUpdating = False
tempA = TextBox1
If ButtonB = True Then
tempB = "10"
End If
Sheets("B").Select
Call XYZ1
' ----------------- (問題あり ここから)--------------
Sheets("B").Select
Cells(1, 2) = 100
For i = 2 To 200
Cells(i, 2) = Range("B" & i - 1) - Range("A" & i)
Next
' ----------------- (問題あり ここまで)--------------
Sheets("A").Select
Call XYZ5
Application.ScreenUpdating = True
End Sub

A 回答 (2件)

こんにちは。



大変失礼な言い方だけど、コードが雑すぎるように思います。プロパティがほとんどありませんね。もう少し、コードはコントロールの名称を含めわかりやすくしたほうがよいと思います。なるべくデフォルトのままのほうがよいですし、入力も楽です。シートモジュールでは、Me.cなどと入れると、インテリセンスで、シートのコントロールの配下の名称が出てきます。(フォーム側は出せません)

まず、そのボタンは、何のボタンなのでしょうか?

>シートモジュールです。

ということは、コントロールツールのボタンですね。コントロールツールは、シートモジュールが基本です。それは、コントロールツールが、シートの配下にあるからです。

>If ButtonB = True
これはなんでしょうか? CommandButtonの場合は、インタンスでプロパティを設けないと、True は取れません。常に、Falseです。

Cells(1, 2) = 100

シートモジュールでは、CellsのRangeオブジェクトのプロパティは、シートの配下になりますから、そのままでは使えません。

With Sheets("B")
 .Select
 .Cells(1, 2) = 100
For i = 2 To 200
  .Cells(i, 2) = .Range("B" & i - 1) - .Range("A" & i)
Next
End With
Cell とRangeが、スタイルがごちゃごちゃですが、それはいいとします。

このように書きます。ただし、できれば、プロパティは入れたほうがよいです。この場合は、.Value プロパティのはずですが。
    • good
    • 0
この回答へのお礼

ご指摘含めてありがとうございます。上手くいきました。勉強します。

お礼日時:2006/12/21 12:46

>マクロ呼出前は意図したとおりになるのですが、セル入力前だと上手くいきません


 意味が不明です。補足をお願いしたいです。またダメが「エラーになる」という意味ならエラーコードも補足していただく方が良いと思いますよ。

またこのコードはどのモジュールシートに書いていますか。
標準モジュールシートに書いてもダメでしたか?

この回答への補足

失礼いたしました。シートモジュールです。
エラーではなくシートBが選択されません。

補足日時:2006/12/21 11:59
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございます。

お礼日時:2006/12/21 12:01

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