アプリ版:「スタンプのみでお礼する」機能のリリースについて

色々とやってもうまくいきませんでしたので、教えていただければ嬉しいです。

Aワークブックを開けてシートをコピーして、シートを編集する。
Bシートの値を別シートに入れて、連続印刷していく。

この2つのプログラムを1つずつ実行したときはうまく作動するのですが、2つをcallステートメントで合わせて実行したときうまく作動しません。

不具合の内容は、印刷したい対象が3つあるのですが、1つだけ印刷して終了してしまいます。

Valueで値を代入した後の印刷処理を「 wS1.PrintOut」だけにした場合対象3つともうまく印刷されます。

お助けいただけると、嬉しいです。

Sub テスト()

Dim i As Long
Dim wS As Worksheet
Dim wS1 As Worksheet

Set wS = Worksheets("データ")
Set wS1 = Worksheets("KI-01")

wS.Activate

For i = 2 To Cells(Rows.Count, "I").End(xlUp).Row

If Cells(i, "I").Value = "KI" Then
wS.Activate
wS1.Cells(4, "B").Value = wS.Cells(i, "B").Value
wS1.Cells(4, "G").Value = wS.Cells(i, "A").Value
wS1.Cells(5, "G").Value = wS.Cells(i, "E").Value
wS1.Cells(5, "J").Value = wS.Cells(i, "C").Value
wS1.Cells(6, "B").Value = wS.Cells(i, "G").Value

If Cells(i, "F").Value < 24000 Then

Sheets(Array("KI-01", "KI-02", "KI-03")).PrintOut
Sheets("KI-04").PrintOut Copies:=2
Else
Sheets(Array("KI-01", "KI-02")).PrintOut
Sheets("KI-03").PrintOut Copies:=2
Sheets("KI-04").PrintOut Copies:=2
End If

Else
End If

Next i

End Sub

A 回答 (4件)

上手く作動しない、とは?



エラーが出る?
どんなエラー?
どこまでは処理されてる?
    • good
    • 0
この回答へのお礼

印刷したい対象が3つあります。

Sheets(Array("KI-01", "KI-02", "KI-03")).PrintOut
Sheets("KI-04").PrintOut Copies:=2
上記のプログラム通り、3枚+2枚=5枚を印刷しただけで終わります。

本当は対象A 3枚+2枚=5枚、
対象B 3枚+2枚=5枚、
対象C 2枚+2枚+2枚=6枚(24000以上のため)
合計 16枚印刷したいのですが対象Aだけ印刷して終わります。

エラーではありません。最後まで印刷がされないだけです。
よろしくお願いします。

お礼日時:2019/12/20 22:22

ステップ実行すれば分かると思う。


分からないならググって。

それからactivateは無意味。
cellsのところは全てシートを指定して。
してる所としてない所が混在してる。
間違いの元。

単純に印刷する条件満たしてないだけだと思う。
なので、ステップ実行するか机上でトレースしてください。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます。

今ググっています。
何とかできるようにがんばります。

お礼日時:2019/12/20 22:51

こんばんは!



コードを拝見すると
F列のデータが24000未満にかかわらず
KI-01・KI-02シートは各1部ずつ、KI-04シートは2部
KI-03シートのみがF列の値によって部数が変化するだけですよね。

そして、次々ループさせているようですが、印刷編集が追い付いていないのでは?
特に計算式などが入っていると少し待つ時間を持たせた方が良いコトがあります。

  Worksheets("KI-01").PrintOut
  Worksheets("KI-02").PrintOut
  With Worksheets("KI-03")
   If Cells(i, "F") < 24000 Then
    .PrintOut
   Else
    .PrintOut copies:=2
   End If
  End With
  Worksheets("KI-04").PrintOut copies:=2
  Application.Wait Now() + TimeSerial(0, 0, 3) '//←3秒待ち//
 Next i

のようにNextの前に待ち時間を作ってみたらどうなりますか?
(上記コードは3秒待つようにしています)

※ 未検証なのでダメだったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

いつも困ったときに助けていただきありがとうございます。
わたしが常時使用しているvbaには、tom04さんに教えていただいたエッセンスがたくさん詰まっています。

vbaの勉強を始めて2年くらい経ちますが、最初の頃から色々と助けていただいてとても感謝しています。

お礼日時:2019/12/21 08:50

実際のシート内容が分かりませんので、頓珍漢な回答かも知れませんが、


>If Cells(i, "F").Value < 24000 Then (いきなりCellsで始まるコード) が気になります。(行の空き方も含め)省略しているコードありますか?
いずれにしても、With などを使うなりして (ブック)シートオブジェクトを明確にされた方が良いと思います。
(検証時表示されているシートで結果が変わるなどがあります)

また、ご質問の事象なら、ステップ実行などで問題点が分かると思うので検証される事を勧めます。
検証された上での疑問や不具合のご質問の場合、ランクの違う情報などの習得につながると思います。

VBAを導入、プログラム作成される場合にイミディエイトウィンドウ出力、ローカルウインドウ表示、ブレークポイント、ステップインなどは
デバッグに必須の知識として認識していただきたいと思います。(自己解決に繋がります)

直接の回答ではありませんが、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

ご指摘の通りでした。cellsで始まるコードの前に、「wS.」を3カ所入れたらうまく最後まで作動しました。

ありがとうございました。ようやく解決できました。

お礼日時:2019/12/21 08:42

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