Excel (VBA) |
|
(Windows 11 Pro : Microsoft 365)
所定数のページ印刷について
投稿日時: 25/07/22 12:41:48
投稿者: えっくん
|
|---|---|
|
お世話になります。
|
|
|
|
投稿日時: 25/07/22 13:45:48
投稿者: Suzu
|
|---|---|
|
ご自身では、どこまでできているのでしょうか?
|
|
|
|
投稿日時: 25/07/22 14:16:51
投稿者: えっくん
|
|---|---|
|
Suzu さん
|
|
|
|
投稿日時: 25/07/22 16:41:57
投稿者: Suzu
|
|---|---|
引用: テストが不足しています。希望通りにはならないはずです。 A1 『10』 入力時、どれも印刷されません。 xRgVal = xSheets(1).Range("A1").Value
If (IsNumeric(xRgVal)) And (Len(xRgVal) = 1) Then
10 入力時、2つめの条件式 左辺 Len(xRgVal) は 2 を返すので、「1」との比較で False を返すので If 真 And 偽 Then の判定は、 全体として、偽となりますから、Select Case に進まず、End If まで 処理が飛び Select Case の Case 10 は 処理されませんので、 1 〜 10 の印刷がされません。 ループ方式が との事ですが、参考コードは既に提示しています。 試行錯誤してみてください。 |
|
|
|
投稿日時: 25/07/22 17:22:07
投稿者: gombohori
|
|---|---|
|
365ならSEQUENCE関数で連番を作れるので
Sub test()
SheetsPrint 5
End Sub
Sub SheetsPrint(ByVal to_no As Long, Optional ByVal fr_no As Long = 1)
to_no = WorksheetFunction.Min(to_no, Worksheets.Count)
Worksheets(WorksheetFunction.Sequence(Arg2:=to_no - fr_no + 1, Arg3:=fr_no)).PrintPreview
End Sub
|
|
|
|
投稿日時: 25/07/24 08:22:46
投稿者: えっくん
|
|---|---|
|
suzuさん
|
|
|
|
投稿日時: 25/07/24 09:45:24
投稿者: えっくん
|
|---|---|
|
Dim frmPage As String
|
|
|
|
投稿日時: 25/07/24 11:31:37
投稿者: Suzu
|
|---|---|
|
おかしい と すれば
引用: 引用:ここでは、アクティブシートの A2 に 代入 引用:ここでは、1枚目シートの A1 に代入。 シートに関しては、必ず 1 枚目シートが、アクティブシートになるのであれば問題ありませんが セル A1、A2 では、参照先が違います。 以降、問題とはならないでしょうが、参考までに・・ ・セルに値を代入するということは、セルの値を書き換えます。 「印刷だけ」を行うユーザーでも、ブックを閉じる時に 上書きしますか? と問われる事になります。 セルに代入を行う必要があるか、検討ください。 ・キャンセルと、何も入力しないでOK を ユーザーレベルの視点で見たとき分ける必要があるでしょうか? なにも入れず OK の時は、再入力を求める制御を行う様な時には必要があると思いますが 今回の中では、分ける必要はないと思います。 色々な場合のエラーに対してもメッセージを出されているので、 ある程度の問題に対し、内部判定を行いメッセージを出すようなコードを参考に提示します。 正常な場合のみ 印刷を行い、不正な場合はメッセージなしで終了するなら 「ここから」-「ここまで」は不要でも良いでしょう。 (印刷対象シートの存在確認を行ってから印刷を行っています。 入力値に問題があれば、存在しているシートが、印刷対象にならないだけ。 これだと、ユーザーが入力に問題がある事に気づきづらいので ステータスバー表示、終了時メッセージを追加しています) Sub Sumple()
Dim frmPage As String
Dim strMessage As String
Dim i As Long
Dim wst As Worksheet
frmPage = InputBox("連番を挿入して印刷します" & Chr(13) & "終了番号「数字のみ」を入力してください")
’ここから------------------------------
If StrPtr(frmPage) = 0 Then
'キャンセル又は右上の×をクリックした場合
strMessage = "キャンセル、終了します。"
ElseIf frmPage = "0" Then
'なにも入力しないでOKをクリックした場合
strMessage = "0は無効です、終了します。"
ElseIf frmPage = "" Then
'なにも入力しないでOKをクリックした場合
strMessage = "未入力、終了します。"
ElseIf IsNumeric(frmPage) = False Then
'数字でない値が入力されてOKをクリックした場合
strMessage = "数字以外が入力されています、終了します。"
ElseIf Abs(frmPage) > 32767 Then
'桁数が大きすぎる数値が入力されてOKをクリックした場合
strMessage = "桁数が大きすぎる値が入力されています、終了します。"
ElseIf CInt(frmPage) <> frmPage Then
'小数点を含む値が入力されてOKをクリックした場合
strMessage = "小数点を含む数字が入力されています、終了します。"
ElseIf CInt(frmPage) < 0 Then
'負の値が入力されてOKをクリックした場合
strMessage = "負の整数が入力されています、終了します。"
End If
If strMessage = "" Then
MsgBox "続けます"
Else
MsgBox strMessage
Exit Sub
End If
’ここまで------------------------------
If IsNumeric(frmPage) Then
For i = 1 To CInt(frmPage)
For Each wst In ThisWorkbook.Worksheets
If wst.Name = i & "枚目" Then
Application.StatusBar = wst.Name & "印刷中"
wst.PrintOut
Application.StatusBar = False
Exit For
End If
Next wst
Next i
End If
MsgBox "終了します"
End Sub |
|
|
|
投稿日時: 25/07/24 16:41:56
投稿者: えっくん
|
|---|---|
|
Suzu さん
|
|



