Word VBA質問箱 IV

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

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


28 / 308 ツリー ←次へ | 前へ→

【797】使いかけラベルシートに差込印刷 マナ 15/2/15(日) 23:07 質問[未読]
【798】Re:使いかけラベルシートに差込印刷 マナ 15/2/16(月) 22:52 発言[未読]
【799】Re:使いかけラベルシートに差込印刷 マナ 15/2/16(月) 23:21 発言[未読]
【801】Re:使いかけラベルシートに差込印刷 マナ 15/2/21(土) 22:24 発言[未読]
【800】Re:使いかけラベルシートに差込印刷 マナ 15/2/17(火) 21:13 発言[未読]

【797】使いかけラベルシートに差込印刷
質問  マナ  - 15/2/15(日) 23:07 -

引用なし
パスワード
   下記のExcel VBA掲示板での質問にこんなのがありました。
ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=167925&rev=0

こんな内容です。(勝手な解釈なので、ちょっと違うかも)
1)エクセルのデータをラベル印刷したい
2)ラベルシートは、8枚/シート
3)エクセルファイルの構成は
・フォーマットシート(ラベル1枚分)
・印刷シート
・データシート
4)印刷手順は
・印刷シートにフォーマットをコピペ
・印刷シートにデータをコピペ
・これをコピペ場所をずらしながら、指定したレコードについて繰り返す。
・コピペ終了後に印刷

5)質問は
・ラベルシートは、前回の使用残を無駄なく使いたい
・なので印刷シートへコピペを開始する位置が毎回変動させたい

すでに回答がついており、ほぼ解決していたのですが、
あえてWordの差込印刷を使う提案をしてみました。

でも、どうやら却下みたい。

そこで、こちらで一人で考えみたいと思います。

Wordの差込印刷の場合に、使いかけのシートで印刷する方法です。

単純にこう考えました。
1)使用済みのラベルと同数の空レコードを差し込む
2)なので、データシートには、7レコード分の空レコードを用意しておく
3)差し込むレコードを選択
4)差し込み文書を作成
5)先頭シートと最終シートにできる、空レコードのラベルをクリア
6)印刷

4)以降については、手操作でもよいけど、
せっかくなので、どんなマクロになるか。
自分への質問です。

【798】Re:使いかけラベルシートに差込印刷
発言  マナ  - 15/2/16(月) 22:52 -

引用なし
パスワード
   最初考えてたより、てこずっちゃいました。

Sub 使いかけラベルシートで差込印刷()
  Dim doc As Document
  Dim i As Long
  Dim t As Long, n As Long
  Dim n1 As Long, n2 As Long
  Dim msg As String
  Dim p As Long
  Dim c As Cell
  Const cnt As Long = 8  'ラベル数/シート
  
  Set doc = MacroContainer
  
  With doc.MailMerge
    With .DataSource
      '使用済み枚数(空レコード数)の計算
      .ActiveRecord = wdFirstDataSourceRecord
      For i = 1 To cnt - 1
        If .Included Then n1 = n1 + 1
        .ActiveRecord = wdNextDataSourceRecord
      Next
      
      '差込レコード数の計算
      .ActiveRecord = wdLastRecord
      t = .ActiveRecord
      
      .ActiveRecord = wdFirstRecord
      
      n = 1

      Do Until .ActiveRecord = t
         .ActiveRecord = wdNextRecord
        n = n + 1
      Loop
      
    End With
    
    msg = "シートの" & n1 + 1 & "枚目から" & n - n1 & "枚印刷します"
    If MsgBox(msg, vbOKCancel) <> vbOK Then Exit Sub

    '差込文書作成
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = False
    .Execute
  End With
  
  '最初のシートの不要ラベルを削除
  Set c = ActiveDocument.Tables(1).Cell(1, 1)
  For i = 1 To n1
    Do While c.Range.Words.Count = 1
      Set c = c.Next
    Loop
    c.Range.Text = ""
    Set c = c.Next
  Next
 
  '最終シートの不要ラベルを削除
  p = ActiveDocument.Range.Information(wdNumberOfPagesInDocument)
  n2 = cnt - (n Mod cnt)

  With ActiveDocument.Tables(p)
    Set c = .Cell(.Rows.Count, .Columns.Count)
  End With
  If n2 < cnt Then
    For i = 1 To n2
      Do While c.Range.Words.Count = 1
        Set c = c.Previous
      Loop
      c.Range.Text = ""
      Set c = c.Previous
    Next
  End If
  
End Sub

【799】Re:使いかけラベルシートに差込印刷
発言  マナ  - 15/2/16(月) 23:21 -

引用なし
パスワード
   こんな感じで、何個の空レコードを差込対象とするかどうかを
マクロで設定しようと試みたのですが、なぜか駄目でした??

Sub test失敗()
  Dim n As String, i As Long
  
  n = InputBox("使用済みラベル数入力")
  If n = "" Then Exit Sub
  If Not IsNumeric(n) Then Exit Sub
  
  With ActiveDocument.MailMerge.DataSource
    .ActiveRecord = wdFirstDataSourceRecord
    For i = 1 To 7
       If i <= CLng(n) Then
        .Included = True
      Else
        .Included = False
      End If
      .ActiveRecord = wdNextDataSourceRecord
    Next
  End With

End Sub


 

【800】Re:使いかけラベルシートに差込印刷
発言  マナ  - 15/2/17(火) 21:13 -

引用なし
パスワード
   使用済み枚数(空レコード数)の計算部分は
こっちのほうがよかったかも。

  With doc.MailMerge
    With .DataSource
      '使用済み枚数(空レコード数)の計算
      .ActiveRecord = wdFirstRecord
      Do While .ActiveRecord < cnt
        If .Included Then n1 = n1 + 1
        .ActiveRecord = wdNextRecord
      Loop


>  
>  With doc.MailMerge
>    With .DataSource
>      '使用済み枚数(空レコード数)の計算
>      .ActiveRecord = wdFirstDataSourceRecord
>      For i = 1 To cnt - 1
>        If .Included Then n1 = n1 + 1
>        .ActiveRecord = wdNextDataSourceRecord
>      Next
>


>

【801】Re:使いかけラベルシートに差込印刷
発言  マナ  - 15/2/21(土) 22:24 -

引用なし
パスワード
   >こんな感じで、何個の空レコードを差込対象とするかどうかを
>マクロで設定しようと試みたのですが、なぜか駄目でした??

完全な空レコードでなければ設定できるみたい。

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