[[20111003134617]] 『構文エラーと出るのですが何が間違っているのか不』(不明ちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『構文エラーと出るのですが何が間違っているのか不明です』(不明ちゃん)
ウインドウズXP エクセル2007です。

”入力”のシートと”購入伝票”のシートがあります。
”入力”のシートのB21(セルの位置です)に何も入力されていなければ、”購入伝票”のシートのAL31:BP77部分を印刷し、B21に入力されていれば”購入伝票”の”AL31:BP77”部分と”bu31:cy77”の部分の両方をを印刷したいのです。以下のようにしてみたのですが、構文エラー と出て止まってしまいます。
何が間違っているのかわかりません。よろしくお願いします。

Sheets("入力").Select

Range("G10:g10").Select

 Selection.ClearContents
if Range(”b21″).value = "" Then
 Sheets("購入伝票").Select
        Range("AL31:BP77").PrintOut
   Sheets("横伝入力").Select
End If
Sheets("入力").Select
Range("G10:g10").Select
    Selection.ClearContents
   Sheets("購入伝票").Select
        Range("AL31:BP77").PrintOut
        Range("bu31:cy77").PrintOut
   Sheets("横伝入力").Select
End Sub


 ↓の行が赤字で表示されていますよね?
 if Range(”b21″).value = "" Then
  問題は ~~   ~~ ここが全角に成っているからだと思います。

 が、これでは要件を満たして居ません。

 お話としては、マクロを実行したら
  入力シートの G10セルの値を削除
  購入伝票シートの AL31:BP77 の範囲を印刷
  入力シートのB21セルに入力が有ったら(<>"" だったら)
      購入伝票シートの BU31:CY77 の範囲を印刷
   横伝入力シートを選択
 と言う流れで良いのではないかと思いますが。

 ちなみに、このマクロをどのシートがアクティブの時に実行するか決まって居ますか?
 また、入力シートと横伝入力シートは同じシートですか?違うシートですか?

 (HANA)

入力シートがアクティブ です。
入力シート と横伝入力シートは同じです。

よろしくお願いします。


 でしたら↓を確認してみて下さい。

 '------
Sub TEST()
    Range("G10").ClearContents
    With Sheets("購入伝票")
            .Range("AL31:BP77").PrintOut
        If Range("B21").Value <> "" Then
            .Range("BU31:CY77").PrintOut
        End If
    End With
End Sub
 '------

 簡単に書くと
    Sheets("入力").Select 
    Range("G10:g10").Select 
    Selection.ClearContents
 この3行は、入力シートを選択して、G10セルを選択しているので
 G10セルは、入力シートのG10セルと言う事に成りますので、一行で

    Sheets("入力").Range("G10:g10").Select 
    Selection.ClearContents
 そのあと、ClearContentsしようと選択したのは 入力シートのG10セルなので、これも一行にして

    Sheets("入力").Range("G10:g10").ClearContents
 ここで、このマクロを実行するのは「入力シートがアクティブの時」と決まっているので
 Sheets("入力"). を消します。

 標準モジュールにコードが有る場合で、セル番地の前に「どこのシート」と指定が無い場合は
 アクティブシートのセルに対して実行されます。
    Range("G10:g10").ClearContents →Range("G10").ClearContents

 次に、印刷の方ですが 
    Sheets("購入伝票").Select
    Range("AL31:BP77").PrintOut
 これも、PrintOutするのは、そのすぐ上で選択したシートなので
 セル番地にシートを指定する事で、一行にします。
    Sheets("購入伝票").Range("AL31:BP77").PrintOut
 もう一つの範囲も。。。
    Sheets("購入伝票").Range("BU31:CY77").PrintOut

 アクティブシート(入力シート)のB21セルの判定も加えると

    Sheets("購入伝票").Range("AL31:BP77").PrintOut
    If Range("B21").Value <> "" Then
        Sheets("購入伝票").Range("BU31:CY77").PrintOut
    End If

 と成りますが、「購入伝票」シートを指定する部分が2箇所に出てきているので
 With でまとめます。

    With Sheets("購入伝票")
        .Range("AL31:BP77").PrintOut
        If Range("B21").Value <> "" Then
            .Range("BU31:CY77").PrintOut
        End If
    End With

 セル番地の前が「.」で始まっている部分は With の後に書いてあるシートのセル
 セル番地の前に何も無い物は アクティブシートのセル

 と思ってもらえると良いと思います。

 (HANA)


いろいろと教えていただきありがとうございます。 if endifでできるのではと思いましたが、奥が深いですね。できました。感謝します。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.