Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10305 / 13646 ツリー ←次へ | 前へ→

【22484】ユーザーフォームから印刷を実行 satoko 05/2/22(火) 18:56 質問[未読]
【22503】Re:ユーザーフォームから印刷を実行 kazu 05/2/22(火) 23:26 発言[未読]
【22508】Re:ユーザーフォームから印刷を実行 satoko 05/2/23(水) 8:46 質問[未読]
【22541】Re:ユーザーフォームから印刷を実行 kazu 05/2/23(水) 15:46 発言[未読]
【22575】ユーザーフォームから印刷を実行 satoko 05/2/24(木) 8:56 質問[未読]
【22576】Re:ユーザーフォームから印刷を実行 kazu 05/2/24(木) 9:37 発言[未読]
【22577】Re:ユーザーフォームから印刷を実行 satoko 05/2/24(木) 10:54 質問[未読]
【22578】Re:ユーザーフォームから印刷を実行 kazu 05/2/24(木) 11:56 発言[未読]
【22580】ユーザーフォームから印刷を実行 satoko 05/2/24(木) 12:59 質問[未読]
【22587】Re:ユーザーフォームから印刷を実行 kazu 05/2/24(木) 13:25 発言[未読]
【22604】ユーザーフォームから印刷を実行 satoko 05/2/24(木) 18:37 質問[未読]
【22606】Re:ユーザーフォームから印刷を実行 kazu 05/2/24(木) 18:45 発言[未読]
【22608】ユーザーフォームから印刷を実行 satoko 05/2/24(木) 19:07 質問[未読]
【22609】Re:ユーザーフォームから印刷を実行 kazu 05/2/24(木) 19:14 発言[未読]
【22611】Re:ユーザーフォームから印刷を実行 satoko 05/2/24(木) 19:37 質問[未読]
【22612】Re:ユーザーフォームから印刷を実行 kazu 05/2/24(木) 19:43 発言[未読]
【22614】ユーザーフォームから印刷を実行 satoko 05/2/24(木) 19:56 お礼[未読]

【22484】ユーザーフォームから印刷を実行
質問  satoko  - 05/2/22(火) 18:56 -

引用なし
パスワード
   初心者なので教えてください☆ユーザーフォームで開始番号1.番〜9.番まで印刷するというように入力したら一覧表の1番から9番のデータを別シートの「印刷」という様式に内容が転機されるようにしたいのです。印刷する様式には1ページで6つまでの番号分が入ります。1番から30番までを印刷するというときに、自動的に5ページで印刷してくれるようにしたいのですがさっぱりわかりません。印刷の様式は受付番号さえ入れば受付日などはvLookUp関数で呼び出せるようにしました。

☆一覧表☆ A   B     C    D    E    F   G
      2 受付番号  受付日 発送記号 発送番号 発送日 ・・・ 
      3   1    2月6日           2月2日 ・・・
      4   2    2月7日  ○砂   55  2月2日 ・・・
      5   3    2月9日 ○教委学 187  2月2日 ・・・
      6   4    2月9日 事務連絡      2月4日 ・・・
      ・   ・     ・    ・    ・   ・  ・・・
      ・   ・     ・    ・    ・   ・  ・・・  

☆印刷☆  A   B     C    D    E    F   G
      1 受付番号  受付日 発送記号 発送番号 発送日 ・・・
      2   1    2月6日           2月2日 ・・・
      3  出張日   出張先 ・・・・
      4
      5
      6 受付番号  受付日 発送記号 発送番号 発送日 ・・・
      7   2    2月7日  ○砂   55  2月2日
      ・   ・     ・    ・    ・    ・  ・・・
      ・   ・     ・    ・    ・    ・  ・・・

本当に初心者ですのでわかりやすく教えてください!よろしくお願いします!

【22503】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/22(火) 23:26 -

引用なし
パスワード
   satoko さん:

こんばんは。

疑問点が数点ありますので、とりあえず質問させて下さい。

ユーザーフォームで開始番号1.番〜9.番まで印刷するというように入力したら
という事ですが、ユーザーフォームには他の機能も付加しているのでしょうか?
開始番号の選択のみであれば、わざわざユーザーフォームにしなくてもInputBoxでも十分な気はします。

印刷の帳票側は出張日   出張先 等が記載されていますが、
これらは、表題のみ書き出せばいいのでしょうか?それとも内容がどこかにあるのでしょうか?

後、印刷する様式には1ページで6つまでの番号分が入ります。1番から30番までを印刷するというときに、自動的に5ページで印刷してくれるようにしたいのですが
との事ですが、印刷する様式は、印刷にのみ使用するのでしょうか?
それともデータとして必要ですか?

データとして必要なければ、
1-6までの帳票で一旦印刷して7-12を1-6の上に上書きして書いていけばページ設定等の手間が省けますし・・・。

とりあえず回答頂けたらそこから提案させてもらいます。

【22508】Re:ユーザーフォームから印刷を実行
質問  satoko  - 05/2/23(水) 8:46 -

引用なし
パスワード
   kazu さんへ

>ユーザーフォームで開始番号1.番〜9.番まで印刷するというように入力したら
>という事ですが、ユーザーフォームには他の機能も付加しているのでしょうか?
>開始番号の選択のみであれば、わざわざユーザーフォームにしなくてもInputBoxでも十分な気はします。

開始番号のみを入力するとなると最後まで印刷してしまうことになるのでは?毎回△番〜▲番まで、□番から■番までと変動するのでできれば終了まで入れたいのですが・・・。


>印刷の帳票側は出張日   出張先 等が記載されていますが、
>これらは、表題のみ書き出せばいいのでしょうか?それとも内容がどこかにあるのでしょうか?

出張日等の事項は一覧表の受付番号や受付日と同じ行にあって書ききれなくて書いていなかっただけです。受付番号が入れば受付日やらその他もろもろはvlookup関数で入るので説明を省いてしまいました。わかりにくくて申し訳ございません(>_<)


>後、印刷する様式には1ページで6つまでの番号分が入ります。1番から30番までを印刷するというときに、自動的に5ページで印刷してくれるようにしたいのですが
>との事ですが、印刷する様式は、印刷にのみ使用するのでしょうか?
>それともデータとして必要ですか?

印刷する様式は印刷のみに使います。


>データとして必要なければ、
>1-6までの帳票で一旦印刷して7-12を1-6の上に上書きして書いていけばページ設定等の手間が省けますし・・・。

確かに上記の印刷の仕方であれば何も悩まなくてもいいのですが、1日に20行ぐらいデータが増えていき印刷するのは3ヶ月に1度のペースで一気に印刷しているので・・・。このシステムを使うのが私だけならいいのですが、7人で使うことになっているので、なるべく印刷の手間を減らしたいんです!よろしくお願いします!

【22541】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/23(水) 15:46 -

引用なし
パスワード
   satoko さん

こんにちは。

マクロでの文字列の書き込み等は無く印刷のみみたいですので。

範囲指定してページ設定する感じで組んでみましたが・・・。

USER Form内に記述して下さい。

TextBox 開始番号入力用  Txt_StartId
TextBox 終了番号入力用  Txt_Txt_LastId

Command Bottan キャンセル用ボタン   Btn_Cancel
Command Bottan 実行用ボタン    Btn_Ret

というオブジェクト名として組んであります。

こんな感じでどうでしょうか?


Private Sub Btn_Cancel_Click()
Me.Hide
End Sub

Private Sub Btn_Ret_Click()

'帳票の先頭列番号
Const IntColStart As Long = 1
'帳票の末尾列番号
Const IntColLast As Long = 8
'帳票1番号分の行数
Const Cnt As Long = 5


Dim IntStartId As Long, IntStartRow As Long

Dim IntLastId As Long, IntLastRow As Long

Dim i As Long
  
'テキストボックスの入力エラー確認
'===================================================================================

  If Me.Txt_StartId = "" Then
    MsgBox "開始位置を入力してから実行して下さい。", vbExclamation, "開始位置未記入"
    Me.Txt_StartId.SetFocus
    Exit Sub
  End If
  
  IntStartId = Str_Chk(Me.Txt_StartId)
  If IntStartId = 0 Then
    MsgBox "開始位置の入力形式に誤りがあります。", vbExclamation, "開始位置エラー"
    Me.Txt_StartId.SetFocus
    Exit Sub
  End If


  If Me.Txt_LastId = "" Then
    MsgBox "終了位置を入力してから実行して下さい。", vbExclamation, "終了位置未記入"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If
  
  IntLastId = Str_Chk(Me.Txt_LastId)
  
  If Str_Chk(Me.Txt_LastId) = 0 Then
    MsgBox "終了位置の入力形式に誤りがあります。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If

' 開始行,終了行の設定
'===================================================================================
  IntStartRow = (IntStartId - 1) * Cnt + 1
  IntLastRow = (IntLastId) * Cnt
  
  ViewSet = ActiveWindow.View
  ActiveWindow.View = xlNormalView
  
  With ThisWorkbook.Sheets("印刷")
  
  ' 一旦印刷範囲の設定を初期化
  '===================================================================================
    .PageSetup.PrintArea = ""
  
  ' 一旦改ページを初期化
  '===================================================================================
    .Cells.PageBreak = xlPageBreakNone
    
  ' 印刷範囲の設定
  '===================================================================================
    .PageSetup.PrintArea = .Cells(IntStartRow, IntColStart).Address & ":" & .Cells(IntLastRow, IntColLast).Address
  
  ' 改ページの設定 (6項目毎でページを別ける)
  '===================================================================================
    .Columns(IntColLast + 1).PageBreak = xlPageBreakManual
    i = 1
    Do
      .Cells(i * Cnt * 6 + IntStartRow, IntColStart).PageBreak = xlPageBreakManual
      i = i + 1
    Loop Until i * Cnt * 6 + IntStartRow > IntLastRow
    .PrintOut
  End With

  ActiveWindow.View = ViewSet
  
End Sub


Function Str_Chk(StrTmp)
  On Error Resume Next
  Buf = CInt(StrTmp)
  If Err Then
    Buf = 0
    Err.Clear
  End If
  Str_Chk = Buf
End Function

【22575】ユーザーフォームから印刷を実行
質問  satoko  - 05/2/24(木) 8:56 -

引用なし
パスワード
   kazu さん

おはようございます☆さっそく実行してみたのですが、確かに印刷範囲が変わりました!感動です!!でも、受付番号を入れていくコードがないようで様式だけの印刷になってしまいます(。_。)どこらへんにどのようなコードを入れたらいいか教えてください(>_<)

あとテキストボックスの入力エラー確認のところで、開始番号が終了番号より大きい場合にもメッセージボックスを表示するようにしたいのですが、どのように記入したらいいかこちらの方もコードを教えてください!!

【22576】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/24(木) 9:37 -

引用なし
パスワード
   ▼satoko さん:
おはようございます。

追加1.にてレスの内容を入れてみました。
確認してみて下さい。


受け付け番号が入っていくところが違う様なら
Const IntNoRow As Long = 2  ← 2を適切な値に変更して下さい。

解らない事があれば聞いて下さい。解る範囲でお答えします。


Private Sub Btn_Cancel_Click()
Me.Hide
End Sub

Private Sub Btn_Ret_Click()

'帳票の先頭列番号
Const IntColStart As Long = 1
'帳票の末尾列番号
Const IntColLast As Long = 8
'帳票1番号分の行数
Const Cnt As Long = 5
'1ページ当りの受け付け番号数
Const CntNo As Long = 6

'受け付け番号書き出し列番号
Const IntNoCol As Long = 1
'受け付け番号書き出し行位置(帳票1番号分内での)
Const IntNoRow As Long = 2

Dim IntStartId As Long, IntStartRow As Long

Dim IntLastId As Long, IntLastRow As Long

Dim i As Long, j As Long
  
'テキストボックスの入力エラー確認
'===================================================================================
  If Me.Txt_StartId = "" Then       'Txt_StartIdが空白の場合
    MsgBox "開始位置を入力してから実行して下さい。", vbExclamation, "開始位置未記入"
    Me.Txt_StartId.SetFocus
    Exit Sub
  End If

  IntStartId = Str_Chk(Me.Txt_StartId)   '


  If IntStartId = 0 Then          'Txt_StartIdが数値に変換出来ない値だった場合
    MsgBox "開始位置の入力形式に誤りがあります。", vbExclamation, "開始位置エラー"
    Me.Txt_StartId.SetFocus
    Exit Sub
  End If    


  If Me.Txt_LastId = "" Then        'Txt_LastIdが空白の場合
    MsgBox "終了位置を入力してから実行して下さい。", vbExclamation, "終了位置未記入"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If
  
  IntLastId = Str_Chk(Me.Txt_LastId)

  If Str_Chk(Me.Txt_LastId) = 0 Then     'Txt_LastIdが数値に変換出来ない値だった場合
    MsgBox "終了位置の入力形式に誤りがあります。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If

  '追加1.ここから <------  
  If IntStartId = IntLastId Then       'Txt_StartId = Txt_LastIdの場合
    MsgBox "終了位置が開始位置と等しい為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  Elseif IntStartId < IntLastId Then     'Txt_StartId < Txt_LastIdの場合
    MsgBox "終了位置が開始位置より手前な為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If
  ' ------>  ここまで追加1.


' 開始行,終了行の設定
'===================================================================================
  IntStartRow = (IntStartId - 1) * Cnt + 1
  IntLastRow = (IntLastId) * Cnt
  
  ViewSet = ActiveWindow.View
  ActiveWindow.View = xlNormalView
  
  With ThisWorkbook.Sheets("印刷")

  '追加1.ここから <------  
  ' 受付番号の書き出し
  '===================================================================================
    For j = IntStartId To IntLastId
      .Cells((j - 1) * Cnt + IntNoRow , IntNoCol) = j
    Next
  ' ------>  ここまで追加1.

  ' 一旦印刷範囲の設定を初期化
  '===================================================================================
    .PageSetup.PrintArea = ""
  
  ' 一旦改ページを初期化
  '===================================================================================
    .Cells.PageBreak = xlPageBreakNone
    
  ' 印刷範囲の設定
  '===================================================================================
    .PageSetup.PrintArea = .Cells(IntStartRow, IntColStart).Address & ":" & .Cells(IntLastRow, IntColLast).Address
  
  ' 改ページの設定 (6項目毎でページを別ける)
  '===================================================================================
    .Columns(IntColLast + 1).PageBreak = xlPageBreakManual
    i = 1
    Do
      .Cells(i * Cnt * CntNo + IntStartRow , IntColStart).PageBreak = xlPageBreakManual
      i = i + 1
    Loop Until i * Cnt * CntNo + IntStartRow > IntLastRow
    .PrintOut
  End With

  ActiveWindow.View = ViewSet
  
End Sub


Function Str_Chk(StrTmp)
  On Error Resume Next
  Buf = CLng(StrTmp)
  If Err Then
    Buf = 0
    Err.Clear
  End If
  Str_Chk = Buf
End Function

【22577】Re:ユーザーフォームから印刷を実行
質問  satoko  - 05/2/24(木) 10:54 -

引用なし
パスワード
   ▼kazu さん

お返事ありがとうございます!教えていただいた通り入力してみたのですが、なぜか受付番号が入らず様式だけが印刷されてしまいます。

'受け付け番号書き出し列番号
>Const IntNoCol As Long = 1
>'受け付け番号書き出し行位置(帳票1番号分内での)
>Const IntNoRow As Long = 2

↑この部分は間違いないと思うので、受付番号の書き出しを追加したところのコードの意味がよくわかっていないため、どこを改善すべきかがわかりません。このコードの意味を教えていただけないでしょうか?また、改善策がありましたら教えていただけないでしょうか?よろしくお願いします(。_。)

>  ' 受付番号の書き出し
>  '====================================================================
>    For j = IntStartId To IntLastId
>      .Cells((j - 1) * Cnt + IntNoRow , IntNoCol) = j
>    Next

【22578】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/24(木) 11:56 -

引用なし
パスワード
   satoko さん

ども。

  '追加1.ここから <------  
  If IntStartId = IntLastId Then       'Txt_StartId = Txt_LastIdの場合
    MsgBox "終了位置が開始位置と等しい為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  Elseif IntStartId < IntLastId Then     'Txt_StartId < Txt_LastIdの場合
    MsgBox "終了位置が開始位置より手前な為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If
  ' ------>  ここまで追加1.

の部分で間違いがありましたので訂正します。(不等号が逆でした。ゴメンナサイ)
正)

  If IntStartId = IntLastId Then       'Txt_StartId = Txt_LastIdの場合
    MsgBox "終了位置が開始位置と等しい為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  Elseif IntStartId > IntLastId Then     'Txt_StartId > Txt_LastIdの場合
    MsgBox "終了位置が開始位置より手前な為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If

です。

For j = IntStartId To IntLastId
   .Cells((j - 1) * Cnt + IntNoRow, IntNoCol) = j
Next

の解説ですが、
jは 開始の受け付け番号 〜 終了の受付番号迄 1づつカウントアップしながら繰り返し処理をします。
(j - 1) * Cnt + IntNoRow ← 行番号   
IntNoCol         ← 列番号

(j - 1) * Cnt + IntNoRow は 受け付け番号を入力する行は受け付け番号の行によって変動ものと思いますので、

帳票1番号分の行数 * j - 1 で入力する受け付け番号の一個前の受け付け番号の最終行を導きだします。
+ IntNoRow で 帳票1番号分内での書き出し行位置を足す事により受け付け番号を入力する行が確定します。

(j - 1) * Cnt + IntNoRow にて確定した行の1列目に j を書き出す。
といった感じですね。


別の部分で質問ですが、
ちなみに、Vlookup関数を設定してあるセルは、何処から何処まで設定されていますでしょうか?
1ページ分だけ?

1ページ分だけとかならPrg側で数式書き出す処理も追加してあげないと値拾ってこないんで。

【22580】ユーザーフォームから印刷を実行
質問  satoko  - 05/2/24(木) 12:59 -

引用なし
パスワード
   ▼kazu さんへ

できました!!(ノε≦*)感動です!!ありがとうございます!!

>ちなみに、Vlookup関数を設定してあるセルは、何処から何処まで設定されていますでしょうか?
>1ページ分だけ?
>
>1ページ分だけとかならPrg側で数式書き出す処理も追加してあげないと値拾ってこないんで。

↑という質問をいただきましたが、様式に関してははじめは1ページ分だけしか作っていなかったのですが、30ページまでコピーして作りました☆(あまりページ数を増やすとファイルの容量が大きくなってしまうので)もし1ページだけの様式で何ページも印刷することができるんでしたら教えてください(>_<)お願いしてばかりですみません!

【22587】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/24(木) 13:25 -

引用なし
パスワード
   satoko さん:

下のでページだけの様式で何ページも印刷することができると思いますよ。

興味があったら試してみて下さい。

Private Sub Btn_Cancel_Click()
Me.Hide
End Sub

Private Sub Btn_Ret_Click()

'帳票の先頭列番号
Const IntColStart As Long = 1
'帳票の末尾列番号
Const IntColLast As Long = 8
'帳票1番号分の行数
Const Cnt As Long = 5
'1ページ当りの受け付け番号数
Const CntNo As Long = 6
'帳票の開始行
Const Int_Fst As Long = 1

'受け付け番号書き出し列番号
Const IntNoCol As Long = 1
'受け付け番号書き出し行位置(帳票1番号分内での)
Const IntNoRow As Long = 2

Dim IntStartId As Long, IntStartRow As Long

Dim IntLastId As Long, IntLastRow As Long

Dim i As Long, j As Long
 
'テキストボックスの入力エラー確認
'===================================================================================
  If Me.Txt_StartId = "" Then       'Txt_StartIdが空白の場合
    MsgBox "開始位置を入力してから実行して下さい。", vbExclamation, "開始位置未記入"
    Me.Txt_StartId.SetFocus
    Exit Sub
  End If

  IntStartId = Str_Chk(Me.Txt_StartId)   '


  If IntStartId = 0 Then          'Txt_StartIdが数値に変換出来ない値だった場合
    MsgBox "開始位置の入力形式に誤りがあります。", vbExclamation, "開始位置エラー"
    Me.Txt_StartId.SetFocus
    Exit Sub
  End If


  If Me.Txt_LastId = "" Then        'Txt_LastIdが空白の場合
    MsgBox "終了位置を入力してから実行して下さい。", vbExclamation, "終了位置未記入"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If
 
  IntLastId = Str_Chk(Me.Txt_LastId)

  If Str_Chk(Me.Txt_LastId) = 0 Then     'Txt_LastIdが数値に変換出来ない値だった場合
    MsgBox "終了位置の入力形式に誤りがあります。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If

  '追加1.ここから <------
  If IntStartId = IntLastId Then       'Txt_StartId = Txt_LastIdの場合
    MsgBox "終了位置が開始位置と等しい為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  ElseIf IntStartId > IntLastId Then      'Txt_StartId < Txt_LastIdの場合
    MsgBox "終了位置が開始位置より手前な為実行出来ません。", vbExclamation, "終了位置エラー"
    Me.Txt_LastId.SetFocus
    Exit Sub
  End If
  ' ------>  ここまで追加1.


' 開始行,終了行の設定
'===================================================================================

  Me.Hide
  ViewSet = ActiveWindow.View
  ActiveWindow.View = xlNormalView
 
  With ThisWorkbook.Sheets("印刷")


  ' 一旦印刷範囲の設定を初期化
  '===================================================================================
    .PageSetup.PrintArea = ""
 
  ' 一旦改ページを初期化
  '===================================================================================
    .Cells.PageBreak = xlPageBreakNone
  
  
  ' 改ページの設定 (6項目毎でページを別ける)
  '===================================================================================
    .Columns(IntColLast + 1).PageBreak = xlPageBreakManual
    .Cells(Cnt * CntNo + 1, IntColStart).PageBreak = xlPageBreakManual


  ' 印刷範囲の設定
  '===================================================================================
    .PageSetup.PrintArea = .Cells(Int_Fst, IntColStart).Address & ":" & .Cells(Cnt * CntNo, IntColLast).Address
 
 
  ' 受け付け番号書き出し + 印刷
  '===================================================================================
    j = 1
    For i = IntStartId To IntLastId Step 1
      .Cells((j - 1) * Cnt + IntNoRow, IntNoCol) = i
      j = j + 1
      If j = 7 Then
        .PrintOut
        For j = 1 To 6
          .Cells((j - 1) * Cnt + IntNoRow, IntNoCol).ClearContents
        Next
        j = 1
      End If
    Next
    
    If j <> 1 Then
      .PrintOut
    End If
    
  
  End With

  ActiveWindow.View = ViewSet
 
End Sub


Function Str_Chk(StrTmp)
  On Error Resume Next
  Buf = CLng(StrTmp)
  If Err Then
    Buf = 0
    Err.Clear
  End If
  Str_Chk = Buf
End Function

【22604】ユーザーフォームから印刷を実行
質問  satoko  - 05/2/24(木) 18:37 -

引用なし
パスワード
   ▼kazu さんへ

入力してみたのですが「印刷範囲の設定」の&”:”&のところでエラーが出てしまいます。修正候補は「ステートメントの最後」と出るのですが直せません(。_。)教えてください☆


>
>Private Sub Btn_Cancel_Click()
>Me.Hide
>End Sub
>
>Private Sub Btn_Ret_Click()
>
>'帳票の先頭列番号
>Const IntColStart As Long = 1
>'帳票の末尾列番号
>Const IntColLast As Long = 8
>'帳票1番号分の行数
>Const Cnt As Long = 5
>'1ページ当りの受け付け番号数
>Const CntNo As Long = 6
>'帳票の開始行
>Const Int_Fst As Long = 1
>
>'受け付け番号書き出し列番号
>Const IntNoCol As Long = 1
>'受け付け番号書き出し行位置(帳票1番号分内での)
>Const IntNoRow As Long = 2
>
>Dim IntStartId As Long, IntStartRow As Long
>
>Dim IntLastId As Long, IntLastRow As Long
>
>Dim i As Long, j As Long
> 
>'テキストボックスの入力エラー確認
>'===================================================================================
>  If Me.Txt_StartId = "" Then       'Txt_StartIdが空白の場合
>    MsgBox "開始位置を入力してから実行して下さい。", vbExclamation, "開始位置未記入"
>    Me.Txt_StartId.SetFocus
>    Exit Sub
>  End If
>
>  IntStartId = Str_Chk(Me.Txt_StartId)   '
>
>
>  If IntStartId = 0 Then          'Txt_StartIdが数値に変換出来ない値だった場合
>    MsgBox "開始位置の入力形式に誤りがあります。", vbExclamation, "開始位置エラー"
>    Me.Txt_StartId.SetFocus
>    Exit Sub
>  End If
>
>
>  If Me.Txt_LastId = "" Then        'Txt_LastIdが空白の場合
>    MsgBox "終了位置を入力してから実行して下さい。", vbExclamation, "終了位置未記入"
>    Me.Txt_LastId.SetFocus
>    Exit Sub
>  End If
> 
>  IntLastId = Str_Chk(Me.Txt_LastId)
>
>  If Str_Chk(Me.Txt_LastId) = 0 Then     'Txt_LastIdが数値に変換出来ない値だった場合
>    MsgBox "終了位置の入力形式に誤りがあります。", vbExclamation, "終了位置エラー"
>    Me.Txt_LastId.SetFocus
>    Exit Sub
>  End If
>
>  '追加1.ここから <------
>  If IntStartId = IntLastId Then       'Txt_StartId = Txt_LastIdの場合
>    MsgBox "終了位置が開始位置と等しい為実行出来ません。", vbExclamation, "終了位置エラー"
>    Me.Txt_LastId.SetFocus
>    Exit Sub
>  ElseIf IntStartId > IntLastId Then      'Txt_StartId < Txt_LastIdの場合
>    MsgBox "終了位置が開始位置より手前な為実行出来ません。", vbExclamation, "終了位置エラー"
>    Me.Txt_LastId.SetFocus
>    Exit Sub
>  End If
>  ' ------>  ここまで追加1.
>
>
>' 開始行,終了行の設定
>'===================================================================================
>
>  Me.Hide
>  ViewSet = ActiveWindow.View
>  ActiveWindow.View = xlNormalView
> 
>  With ThisWorkbook.Sheets("印刷")
>
>
>  ' 一旦印刷範囲の設定を初期化
>  '===================================================================================
>    .PageSetup.PrintArea = ""
> 
>  ' 一旦改ページを初期化
>  '===================================================================================
>    .Cells.PageBreak = xlPageBreakNone
>  
>  
>  ' 改ページの設定 (6項目毎でページを別ける)
>  '===================================================================================
>    .Columns(IntColLast + 1).PageBreak = xlPageBreakManual
>    .Cells(Cnt * CntNo + 1, IntColStart).PageBreak = xlPageBreakManual
>
>
>  ' 印刷範囲の設定
>  '===================================================================================
>    .PageSetup.PrintArea = .Cells(Int_Fst, IntColStart).Address & ":" & .Cells(Cnt * CntNo, IntColLast).Address
> 
> 
>  ' 受け付け番号書き出し + 印刷
>  '===================================================================================
>    j = 1
>    For i = IntStartId To IntLastId Step 1
>      .Cells((j - 1) * Cnt + IntNoRow, IntNoCol) = i
>      j = j + 1
>      If j = 7 Then
>        .PrintOut
>        For j = 1 To 6
>          .Cells((j - 1) * Cnt + IntNoRow, IntNoCol).ClearContents
>        Next
>        j = 1
>      End If
>    Next
>    
>    If j <> 1 Then
>      .PrintOut
>    End If
>    
>  
>  End With
>
>  ActiveWindow.View = ViewSet
> 
>End Sub
>
>
>Function Str_Chk(StrTmp)
>  On Error Resume Next
>  Buf = CLng(StrTmp)
>  If Err Then
>    Buf = 0
>    Err.Clear
>  End If
>  Str_Chk = Buf
>End Function

【22606】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/24(木) 18:45 -

引用なし
パスワード
   ▼satoko さん:


↓の2行をコピー 貼り付けでもエラーになりますか?

.PageSetup.PrintArea = .Cells(Int_Fst, IntColStart).Address & _
":" & .Cells(Cnt * CntNo, IntColLast).Address

【22608】ユーザーフォームから印刷を実行
質問  satoko  - 05/2/24(木) 19:07 -

引用なし
パスワード
   ▼kazu さん

>.PageSetup.PrintArea = .Cells(Int_Fst, IntColStart).Address & _
>":" & .Cells(Cnt * CntNo, IntColLast).Address

↑の2行を貼り付けたらなんとかエラーは出なくなったのですが、別のところでエラーが出てしまいました(>_<)

改ページの設定のところの2行目でRange クラスの PageBreakプロパティを設定できませんと表示されてしまいます(>_<)改善方法を教えてください!

【22609】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/24(木) 19:14 -

引用なし
パスワード
   ▼satoko さん:

意味的には同じなんですが・・・↓の様に変更してみて下さい。
これでもエラー出ますか?

(変更前)
.Columns(IntColLast + 1).PageBreak = xlPageBreakManual
.Cells(Cnt * CntNo + 1, IntColStart).PageBreak = xlPageBreakManual


(変更後)
.Columns(IntColLast + 1).PageBreak = -4135
.Cells(Cnt * CntNo + 1, IntColStart).PageBreak = -4135

【22611】Re:ユーザーフォームから印刷を実行
質問  satoko  - 05/2/24(木) 19:37 -

引用なし
パスワード
   ▼kazu さん:

先ほどのエラーは改善されましたが、次は「.Cells((j - 1) * Cnt + IntNoRow, IntNoCol).ClearContents」でエラーが出ました(°口°)!!結合されたセルはどうとかこうとかというエラーだったのですが...。私の入力ミスなのでしょうか...?
教えてください!!

>' 受け付け番号書き出し + 印刷
>'========================================================================
>
>   j = 1
>   For i = IntStartId To IntLastId Step 1
>     .Cells((j - 1) * Cnt + IntNoRow, IntNoCol) = i
>     j = j + 1
>     If j = 7 Then
>       .PrintOut
>       For j = 1 To 6
>         .Cells((j - 1) * Cnt + IntNoRow, IntNoCol).ClearContents
>       Next
>       j = 1
>     End If
>   Next
>   
>   If j <> 1 Then
>     .PrintOut
>   End If
>   
> 
> End With

【22612】Re:ユーザーフォームから印刷を実行
発言  kazu  - 05/2/24(木) 19:43 -

引用なし
パスワード
   satoko さん:

受け付け番号のセルって結合されてるんですか?
何かエラー出るはずないところでエラー出てるんですが・・・。

まぁ、いいや。
とりあえず、↓のところを変更して下さい。
どっちでも動作すると思うんで・・・。


.Cells((j - 1) * Cnt + IntNoRow, IntNoCol).ClearContents

.Cells((j - 1) * Cnt + IntNoRow, IntNoCol).Value = ""

【22614】ユーザーフォームから印刷を実行
お礼  satoko  - 05/2/24(木) 19:56 -

引用なし
パスワード
   できましたぁ(ノ≧▽≦)ノ☆ほんっとうにありがとうございましたぁ☆助かりましたっ!!もしかしたらまたお力を借りることがあるかもしれませんが、またよろしくお願いします!!ありがとうございました☆

10305 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free