[[20081124112727]] 『ファイル背表紙を自動で幅変更』(のViた) ページの最後に飛ぶ

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

 

『ファイル背表紙を自動で幅変更』(のViた)

 ここで見つけた自動印刷VBAを有り難く使わせていただいています。
 ファイルの背表紙も一覧表から自動で印刷させようと思ったんですが
 背表紙の幅が30mm〜80mmまで色々あります。
 そこで一覧表に背表紙の幅の値を入れて、印刷の幅を変えたいのですが
 方法が分かりませんのでお教え下さい。

    A      B    C
 1  名称   書庫番号  背幅
 2  説明書   5-1    80
 3  分類表   6-2    40

 Sub Form_Button1_Click()  '行選択プリント
 Dim PrintMenu As Long
 Dim r As Range
 Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = Worksheets("一覧表")
    Set ws2 = Worksheets("印刷画面")

    With ws1
        ActiveCell.Activate

        For Each r In Selection

            If r.Row > 1 And .Range("D65536").End(xlUp).Row >= r.Row Then

            ws2.Range("D7").Value = .Cells(r.Row, 1).Value
            ws2.Range("D10").Value = .Cells(r.Row, 2).Value

                ws2.Select

 PrtMsg:

                  PrintMenu = MsgBox("印刷を実行してもいいですか?。" & Chr (13) & _
                            " [は い]   : 印刷実行" & Chr(13) & _
                            " [いいえ]   : 印刷プレビュー" & Chr(13) & _
                            " [キャンセル] : 次を読込", 3, "フィルタ印刷")

                    If PrintMenu = 6 Then 'はい(印刷実行)
                         MsgBox "印刷します。"
                         Worksheets("印刷画面").PrintOut
                    ElseIf PrintMenu = 7 Then 'いいえ(印刷プレビュー)
                         Worksheets("印刷画面").PrintPreview
                         GoTo PrtMsg  'プレビューを閉じた後、確認メッセージに戻る。
                    ElseIf PrintMenu = 2 Then 'キャンセル(何もしない)
                    End If

            End If
    Next r

    End With
 End Sub


 背表紙って、結局幅に合わせて人が切らないとなりませんよね?
 また、幅によってデザイン(フォントサイズ)を変えなくて良いのですか?

 簡単なのは、幅ごとにデザインを用意しておいて、そこにタイトルを設定して
 印刷する処理をすればよいと思いますが、印刷データ等はどこで指定するの
 でしょうか。

 上記の中には該当するデータが見当たりませんので、そのあたりをどうしたいか
 説明してはどうでしょうか。
 (Mook)

 >背表紙って、結局幅に合わせて人が切らないとなりませんよね?
 >また、幅によってデザイン(フォントサイズ)を変えなくて良いのですか?
 切る作業は人手が必要なのは致し方なしと思っています。
 またフォントは同じ大きさで揃えるつもりです。

 >印刷データ等はどこで指定するのでしょうか。
 印刷指定は印刷したい範囲をどこか1列内でドラッグすると
 その行分印刷できるというVBAです。
 ですのでたとえば「名称」の列を、印刷したい分ドラッグして印刷する事になります。

 >簡単なのは、幅ごとにデザインを用意しておいて、そこにタイトルを設定して
 >印刷する処理をすればよいと思います
 「幅ごとにデザインしたSheetを用意しておいて幅のデーターで
 印刷Sheetの行き先を自動で選択させるとと良い」と言う意味でしょうか?
 もしそうしようと思ってもそのVBAが思いつかないです。よろしくお願いします。
 (のViた)

 1枚、1背表紙でよいのであれば(不経済ですが)、1枚にすべてのサイズの
 背表紙をおいてしまってはどうですか。

 一番説明が欲しいのは、背表紙のデータをどこから持ってくるかです。
 単純に、セルの参照でよいのではないかと思うのですが。
 (Mook)

 >1枚、1背表紙でよいのであれば(不経済ですが)、1枚にすべてのサイズの
 >背表紙をおいてしまってはどうですか。
 1枚の紙に、全ての背幅分を同時に印刷してしまうという事ですか?
 最初それも考えましたが折り返し部分の余白も含めると
 A4短辺210mmには、入りきらないのであきらめました。
 (かといってA3にすると捨てる部分が多くなり過ぎてしまいます)

 >一番説明が欲しいのは、背表紙のデータをどこから持ってくるかです。
 >単純に、セルの参照でよいのではないかと思うのですが。
 背表紙の”幅量”のデーターと言う意味でしょうか?
 ご質問の内容がよく分からないので、
 もう少し分かりやすく表現していただけますでしょうか?
 (のViた)

 >一覧表に背表紙の幅の値を入れて
 とありますが、一覧表の構成はまったく例示されていませんので、
 どこを参照してよいかは質問からはわかりません。

 また、背表紙に表示する内容はどのように指定するつもりでしょうか。
 これも一覧表の中にあるものなのですか?

 また、背表紙に表示する際に、そのデザイン(配置、フォントのサイズ)
 はどうするのでしょうか。

 また、印刷の処理のタイミングはどうなのですか?
 最初に示された、印刷のマクロとなんらか同期を取って行うのでしょうか。
 それとも、独立した機能として実装したいのでしょうか。

 想定される、条件をなるべく詳しく説明されたほうが解決が早いかと思います。
 (Mook)

 最初の例として背幅80と、背幅40を書いておられますが
 >印刷の幅を変えたい
 と思った時に、手作業では印刷画面シートのどの列の幅を
  背幅80のときは いくつに
  背幅40のときは いくつに
 変更しようと思っているのか
 具体的なセル番地(列番号?)と数値を上げて
 説明して見られてはどうでしょう。

 また
 >背表紙の幅が30mm〜80mmまで色々あります。
 ということですが、10mm刻みで6種類?

 このブックを他の事でも使用するなら ご希望のように
 印刷画面シートの列の幅を変更しながら印刷するのが良いように思いますが
 これにしか使用しない場合で、種類が6個程度なら
 それぞれの印刷にあったシートを6つ作っておくのが良いように思います。

 ・・・実際の状況と、私が想像している状況に食い違いがなければ・・・。
 最初にのせておられる印刷のマクロが
 背表紙を印刷するマクロなんですよね・・・?
 それとも、Mookさんが読んでおられるように 背表紙印刷マクロとは
 違うマクロなんですかね・・・?

 (HANA)

 うっ、失礼しました。ぜんぜん質問を読み違えていたでしょうか。
 印刷画面に、すでにデザインがされているということですね。

 ただ、幅の指定は非常に厄介です。モニタの解像度や指定されている
 フォントのサイズで異なるので、印刷するPCに特化して設定してしまった
 方が良いかもしれません。
http://allabout.co.jp/computer/msexcel/closeup/CU20070415A/index2.htm
http://sapporo.cool.ne.jp/freepeace/column/excelsize.html
 であれば、
            ws2.Range("D7").Value = .Cells(r.Row, 1).Value
            ws2.Range("D10").Value = .Cells(r.Row, 2).Value
 の後ろに
 Select Case .Cells(r.Row, 3).Value
     Case 40
            ws2.Columns("D").ColumnWidth = 12.345  ' 適切な値を設定
     Case 60
            ws2.Columns("D").ColumnWidth = 18.567  ' 適切な値を設定
     Case 80
            ws2.Columns("D").ColumnWidth = 25.678  ' 適切な値を設定
 End Select
 として、適切な値を設定しておきます。

一回うまく数値が求められれば、そのPCそのプリンタでは正しく印刷
できるようになるかと思います。

 実際、列幅を10、20、30 程度にして数セル印刷してみれば、1cmあたりの数値が計算
 できると思いますので、あとはそれに指定幅をかければよいでしょう。
 ほとんど正比例でしたら数値にその定数を書ける式にしても良いと思います。

 こちらでやった場合、若干オフセット(数ミリ)があったので、厳密には倍数を
 かけても駄目なようでした。実用的には問題ないかもしれませんが、そこは実際の
 状況により判断ください。
 (Mook)

 (Mook)さん、説明がつたないにもかかわらず、
 回答していただき有り難うございます。
 早速試させていただきましたが、以下のエラーが出てストップしてしまいます。
 ”コンパイルエラー:構文エラー”
 ※「End Slect」が反転しています。
 ※「Sub Form_Button1_Click()  '行選択プリント」が黄色くなって左端に矢印が出ています。

 ヘルプを見てもちんぷんかんぷんです。
 エラーの原因と対策を教えて下さい。
 (のViた)

 すみません、スペルミスです。
 End Select に修正してください(コード修正済み)。

 印刷の種類だけCase 文を増やして、同様に設定しいけばよいと思います。
 (Mook)

 広がったり狭くなったりと見事に変化しました。
 有り難うございました。
 (のViた)

コメント返信:

[ 一覧(最新更新順) ]


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