[[20200623125701]] 『差込印刷風』(koooo) ページの最後に飛ぶ

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

 

『差込印刷風』(koooo)

雛形がsheet「用紙」に、データはsheet「リスト」の4行目からあります

自動で連続印刷しているのですが
プレビューで見てから印刷するように変更するにはどうしたらいいでしょうか
それと、sheet「用紙」のフォントのサイズをsheet「リスト」に入力して替えるようにしたいです

教えていただけますでしょうか。
よろしくお願いします

●sheetの関係性

sheet「用紙」A1 = sheet「リスト」J列
       A2 =         K列
       A3 =         L列
       A4 =         M列
       A5 =         I列  

●sheet「リスト」
フォント20、行数150の場合
I列、J列以外は空白の場合があります

	B	C
3	1行目	20
4	2行目	20
5	3行目	20
6	4行目	20
7	5行目	20
8		
9	行数	150

	I	J	K	L	M
3	??	1行目	2行目	3行目	4行目
4	1-1	あああ	いい	う	
5	2-3	いいい	え		

 Private Sub CommandButton2_Click()

msg = MsgBox("印刷しますか?", Buttons:=vbYesNo + vbExclamation)

  If msg = vbYes Then
    For i = 3 To 13
    'For i = 12 To Sheets("データ").Range("B8").Value
      Sheets("用紙").Range("A1").Value = Sheets("リスト").Cells(i, 9).Value
      Sheets("用紙").Range("A2").Value = Sheets("リスト").Cells(i, 10).Value
      Sheets("用紙").Range("A3").Value = Sheets("リスト").Cells(i, 11).Value
      Sheets("用紙").Range("A4").Value = Sheets("リスト").Cells(i, 12).Value
      Sheets("用紙").Range("A5").Value = Sheets("リスト").Cells(i, 13).Value

      Worksheets("用紙").PrintOut FROM:=1, To:=1, COPIES:=1, COLLATE _
       :=True
    Next i
  End If

End Sub

      

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 プレビューするには
  Worksheets("用紙").PrintOut FROM:=1, To:=1, COPIES:=1, COLLATE _
       :=True

 の部分を、   Sheets("用紙").PrintPreview
 または       Sheets("用紙").PrintOut Preview:=True    のようにします。

 フォントの変更は可能ですが、質問の内容からどこをどう変えるのか理解できませんでした。
 一般的には、

 Sheets("用紙").Range(変更する範囲).Font.Size = Sheets("リスト").Cells(サイズが入力されているセル).Value

 のようにすればできると思います。

(tora) 2020/06/23(火) 16:05


プレビューは見ることができました
が、連続することはできないのですね
途中でプレビュー終了することもできないのでしょうか?

それと、プレビューが終わった後に印刷開始をしたいのですが
どうしたらよいのか教えていただけないでしょうか。

 Private Sub CommandButton2_Click()

msg = MsgBox("印刷プレビューを表示しますか?", Buttons:=vbYesNo + vbExclamation)

   If msg = vbYes Then

     Sheets("用紙").Range("A1").Font.Size = Sheets("リスト").Cells(3, 3).Value
     Sheets("用紙").Range("A2").Font.Size = Sheets("リスト").Cells(3, 4).Value
     Sheets("用紙").Range("A3").Font.Size = Sheets("リスト").Cells(3, 5).Value
     Sheets("用紙").Range("A4").Font.Size = Sheets("リスト").Cells(3, 6).Value
     Sheets("用紙").Range("A5").Font.Size = Sheets("リスト").Cells(3, 7).Value

    For i = 4 To Sheets("リスト").Range("C9").Value
      Sheets("用紙?A").Range("A1").Value = Sheets("リスト").Cells(i, 10).Value
      Sheets("用紙?A").Range("A2").Value = Sheets("リスト").Cells(i, 11).Value
      Sheets("用紙?A").Range("A3").Value = Sheets("リスト").Cells(i, 12).Value
      Sheets("用紙?A").Range("A4").Value = Sheets("リスト").Cells(i, 13).Value
      Sheets("用紙?A").Range("A5").Value = Sheets("リスト").Cells(i, 9).Value

      Sheets("用紙?A").PrintOut Preview:=True

      'Worksheets("用紙?A").PrintOut FROM:=1, To:=1, COPIES:=1, COLLATE _
       :=True
    Next i
  End If

End Sub
(koooo) 2020/06/24(水) 13:07


 そうですね、連続してプレビューを見るにはその都度プレビュー画面を消す必要がありますし、
 途中でプレビューをやめるには Escキーを押しながらプレビューを消す、
 これはコードの実行を中断することになりますし、
 プレビューしたシートは印刷できますが、元に戻って印刷ということはできないです。

 なにか方法があるかもしれませんが、残念ながら私にはわかりません。

 私が通常使う方法は、一番最初にMsgBoxで印刷かプレビューかを選択するボタンを表示することです。
 プレビューの件数が多くなる場合は、例えば5件ごととか10件ごとにMsgBoxを表示して、
 プレビューを続けるか中断するかを選択できるようにする。
 また、その際にコード自体を中断してもいいし、印刷を継続することもできます。

 いずれにしても使い勝手がよくないかもしれませんが、ケースバイケースで自分の好みで仕様を考えたらどうでしょうか。

 また、ほかの方でいい案がありましたら私自身も教えてほしいです。

(tora) 2020/06/24(水) 14:09


Font.Sizeの所ですがエラー1004になってしまいました
「FontクラスのSizeプロパティを設定できません」
何が原因なのでしょうか?

toraさん MsgBoxで印刷orプレビュー選択できるようにしてみます
件数の制限もいいですね
少し検討してみます

(koooo) 2020/06/24(水) 15:21


 フォントのサイズを指定しているセルに数値で入力されていますか?
 12ポイントにしたい場合はただ「12」と入力してください。
 「12pt」などとなっているとそのようなエラーとなります。

 Sheets("用紙").Cells(i, "A").Font.Size = Sheets("リスト").Cells(i, "Z").Value

 のようにすると、リストのi行目に入力した数値により、用紙のA列i行目のフォントが変更されます。
 こちらで試してみてもエラーは出ていないのですが。
(tora) 2020/06/24(水) 16:23

toraさん Font.Size 行と列が反対でした
そこは直したらできるようになったのですが

プレビューをIf文で全部と一部だけに変更しました
If文が間違っているのか全部プレビューができません
どうしたらよいのか教えていただけないでしょうか。

 If メッセージボックスがYESなら
  全部プレビューする
 Elese
  メッセージボックスがNoなら
  4〜C10までプレビューする

  End If

 Private Sub CommandButton2_Click()

Unload UserForm1

msg1 = MsgBox("全部プレビューしますか?", Buttons:=vbYesNo + vbExclamation)

     Sheets("用紙").Range("A1").Font.Size = Sheets("リスト").Cells(3, 3).Value
     Sheets("用紙").Range("A2").Font.Size = Sheets("リスト").Cells(4, 3).Value
     Sheets("用紙").Range("A3").Font.Size = Sheets("リスト").Cells(5, 3).Value
     Sheets("用紙").Range("A4").Font.Size = Sheets("リスト").Cells(6, 3).Value
     Sheets("用紙").Range("A5").Font.Size = Sheets("リスト").Cells(7, 3).Value

  If msg = vbYes Then

    For i = 4 To Sheets("リスト").Range("C9").Value
      Sheets("用紙").Range("A1").Value = Sheets("リスト").Cells(i, 10).Value
      Sheets("用紙").Range("A2").Value = Sheets("リスト").Cells(i, 11).Value
      Sheets("用紙").Range("A3").Value = Sheets("リスト").Cells(i, 12).Value
      Sheets("用紙").Range("A4").Value = Sheets("リスト").Cells(i, 13).Value
      Sheets("用紙").Range("A5").Value = Sheets("リスト").Cells(i, 9).Value

      Sheets("用紙").PrintOut Preview:=True
    Next i

       Else

      For i = 4 To Sheets("リスト").Range("C10").Value        
    Sheets("用紙").Range("A1").Value = Sheets("リスト").Cells(i, 10).Value
        Sheets("用紙").Range("A2").Value = Sheets("リスト").Cells(i, 11).Value
        Sheets("用紙").Range("A3").Value = Sheets("リスト").Cells(i, 12).Value
        Sheets("用紙").Range("A4").Value = Sheets("リスト").Cells(i, 13).Value
        Sheets("用紙").Range("A5").Value = Sheets("リスト").Cells(i, 9).Value

        Sheets("用紙").PrintOut Preview:=True
      Next i
  End If

End Sub

(koooo) 2020/06/25(木) 12:53


 一見ですが、

 If msg = vbYes Then のmsg は msg1 の間違いじゃないですか。

 ちなみに エクセルのVBAには Option Explicit というオプションがあります。
 変数を使う場合に必ず Dim で宣言をしなければいけないというオプションです。

 これを適用すれば間違った変数名を使ったときにエクセルが教えてくれるので便利です。
 例えば

http://officetanaka.net/excel/vba/beginner/11.htm

 なんかを参考にされるといいと思います。

(tora) 2020/06/25(木) 13:52


コメント返信:

[ 一覧(最新更新順) ]


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