Word VBA質問箱 IV

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

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


7 / 45 ページ ←次へ | 前へ→

【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
・ツリー全体表示

【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)以降については、手操作でもよいけど、
せっかくなので、どんなマクロになるか。
自分への質問です。
・ツリー全体表示

【796】Re:入力規制をしたい
発言  マナ  - 14/1/6(月) 19:09 -

引用なし
パスワード
   半年ぶりにワードの勉強をしてみました。

まずはネットでテキストボックスフォームフィールドについて検索。
マクロを登録すれば出来そうです
ht tp://office.microsoft.com/ja-jp/word-help/HP005186258.aspx

ここのWendy02さんのコードとか参考になります。
ht tp://qanda.rakuten.ne.jp/qa3076625.html


>入力する文字の改行をさせたくない

書いてみましした。Word2000がないので、2010で動作確認。
使い勝手があまり良くないかもしれませんが、こんな感じでしょうか。

Sub test()

  With Selection.Bookmarks(1).Range.Fields(1).Result
    If InStr(.Text, vbCr) > 0 Then
      MsgBox "改行はNG"
      .Text = Replace(.Text, vbCr, "")
    End If
  End With

End Sub
・ツリー全体表示

【795】Re:WORDマクロの解説本 追加情報
発言  H. C. Shinopy  - 13/9/20(金) 20:40 -

引用なし
パスワード
   土屋和人『最速攻略 Wordマクロ/VBA徹底入門 〔Word2013/2010/2007対応版〕 』

大型本: 320ページ
出版社: 技術評論社
言語 日本語
ISBN-10: 4774159441
ISBN-13: 978-4774159447
発売日: 2013/9/20

htt p://gihyo.jp/book/2013/978-4-7741-5944-7#toc

目次
第1章 Word VBAとは
1-01 Wordの基礎知識
1-02 Wordの作業を効率化する
1-03 マクロとVBA
1-04 VBAを利用するための準備
1-05 新しいマクロを記録する
1-06 マクロを実行する
1-07 マクロを含む文書を保存する
1-08 マクロを含む文書を開く
1-09 マクロを実行するその他の方法

第2章 Visual Basic Editorの基本操作
2-01 Visual Basic Editorを利用する
2-02 マクロのプログラムを編集する
2-03 マクロのプログラムを新規作成する

第3章 VBAプログラミングの基礎知識
3-01 VBAの記述ルールを理解する
3-02 コードの動作をテストする
3-03 関数を利用する
3-04 VBAのオブジェクトを理解する
3-05 データに名前を付けて操作する
3-06 条件に応じて異なる処理を実行する
3-07 同じ処理を繰り返し実行する
3-08 同一オブジェクトへの操作をまとめる

第4章 文書の作成
4-01 文書作成の一連の手順を実行する
4-02 新規文書を作成する
4-03 文章を入力する
4-04 文書を保存する
4-05 文書を印刷する
4-06 文書の作業を終了する

第5章 文書の編集
5-01 文書を開く
5-02 特定の位置に文章を挿入する
5-03 段落記号を挿入する
5-04 文字列を単語・文単位で編集する
5-05 操作対象の位置を変更する
5-06 文書の一部を削除する
5-07 文字列をコピー・移動する
5-08 フォントの設定を変更する
5-09 フォントの色を変更する
5-10 単語にルビを設定する
5-11 文字を線で囲む
5-12 段落の配置を設定する
5-13 行間を設定する
5-14 インデントを設定する
5-15 スタイルを設定する
5-16 書式オブジェクトを流用する

第6章 一括処理のための基本マクロ
6-01 文字列を検索する
6-02 文字列を置換する
6-03 パターンで検索する
6-04 パターンで置換する
6-05 文字種を変更する
6-06 コメントを一括で変更する
6-07 図形を一括で操作する
6-08 複数の文書を一括で操作する

第7章 文書を設計・管理するマクロ
7-01 用紙サイズを変更する
7-02 1ページの行数を変更する
7-03 ヘッダー・フッターを設定する
7-04 表を使ってレイアウトする
7-05 ページ罫線を設定する
7-06 文書全体のイメージを変更する
7-07 脚注を設定する
7-08 目次を作成する
7-09 索引を作成する
7-10 変更履歴を記録する

第8章 テンプレートの活用
8-01 Normalテンプレートの役割
8-02 自動実行マクロを利用する
8-03 テンプレートとして保存する
8-04 テンプレートから文書を作成する
8-05 テンプレートをアドインとして利用する

第9章 その他の上級テクニック
9-01 コマンドマクロを利用する
9-02 文書のイベントを利用する
9-03 アプリケーションのイベントを利用する
9-04 外部のオブジェクトを操作する

第10章 論文・レポートで便利なマクロ
10-01 論文・レポートのテンプレートを作成する
10-02 英数字を半角に変換する
10-03 パターンに応じてスタイルを適用する
10-04 複数の語句を連続して置換する
10-05 西暦年と和暦年を変換する
10-06 表の数値を一括で修正する
10-07 本文中の注釈を脚注に変更する
10-08 目次中の番号のみ書式を変更する

第11章 小説・エッセイで便利なマクロ
11-01 小説・エッセイのテンプレートを作成する
11-02 文字を縦書き用に変換する
11-03 2桁の数字を縦中横にする
11-04 数字を漢数字に変換する
11-05 ルビを一括で設定する
11-06 すべての画像の色調を変更する

第12章 カタログで便利なマクロ
12-01 カタログのテンプレートを作成する
12-02 単位の数字を上付きにする
12-03 各行の見出し部分を均等に割り付ける
12-04 ファイル名を画像に置き換える
12-05 連続番号の画像を一括で挿入する
12-06 文字列の折り返しを一括で変更する
12-07 サイズとトリミングを一括で設定する
12-08 カタログの製品紹介欄を追加する

[End]
・ツリー全体表示

【794】入力規制をしたい
質問  くまさん  - 13/8/13(火) 22:45 -

引用なし
パスワード
   Word2000を使っています。テキストボックスフォームフィールド
を使おうと思っていますが、Excelの様な入力規制(半角カナや
英数字、無効など)がしたいのですが、どのようにすれば良いか
教えて下さい。また、フォームに入力する文字の改行をさせたく
ないのですが、どうすればよろしいでしょうか。
・ツリー全体表示

【793】Re:文字検索及びページ削除
発言  マナ  - 13/6/30(日) 21:46 -

引用なし
パスワード
   勉強のために書いてみました。
やっぱり、Excelでいえば「行削除は下から」みたいなことでしょうか?

Sub test()
  Dim myStr As String
  Dim myP As Long
  Dim i As Long
  Dim myRng As Range
  
  myStr = "記入"
  
  myP = Selection.Information(wdNumberOfPagesInDocument)

  For i = myP To 1 Step -1
    Set myRng = Selection.GoTo( _
      what:=wdGoToPage, which:=wdGoToAbsolute, Count:=i)
    Set myRng = myRng.Bookmarks("\page").Range
    With myRng.Find
      .Text = myStr
      .Wrap = wdFindStop
      If .Execute Then
        myRng.Bookmarks("\page").Range.Delete
      End If
    End With
  Next

End Sub
・ツリー全体表示

【792】Re:スタイルの設定について
発言  マナ  - 13/6/16(日) 20:00 -

引用なし
パスワード
   こことか関係あるかもと試してみたのですが、
チェックがONでもOFFでも結果は同じでした。

リンクされたスタイルを使用不可にするとは?
ht tp://www.relief.jp/itnote/archives/003904.php
・ツリー全体表示

【791】Re:スタイルの設定について
質問  マナ  - 13/6/16(日) 19:37 -

引用なし
パスワード
   2007以降の場合、こうすべきなのかなと思いましたが?
よくわかっていません。
どなたか教えて下されば嬉しいです。

If s.Type = wdStyleTypeParagraph Or _
  s.Type = wdStyleTypeParagraphOnly Or _
  s.Type = wdStyleTypeLinked Then
・ツリー全体表示

【790】Re:スタイルの設定について
発言  マナ  - 13/6/16(日) 17:46 -

引用なし
パスワード
   今更ですが、勉強のために確認してみました。

>  ActiveDocument.Paragraphs(J).Style = ActiveDocument.Styles(J)
>
>どなたか右辺の書き方をご存知ないでしょうか。

右辺の書き方が間違っているわけではないようです。
左辺が段落スタイルなので、右辺も段落スタイルかどうか
事前にチェックをいれてみました。

Sub test()
  Dim n As Long
  Dim s As Style
  Dim j As Long

  n = ActiveDocument.Paragraphs.Count
  
  For Each s In ActiveDocument.Styles
    If s.Type = wdStyleTypeParagraph Then
      j = j + 1
      If j > n Then Exit For
      ActiveDocument.Paragraphs(j).Style = s
    End If
  Next
  
End Sub
・ツリー全体表示

【789】Re:画像の貼り付けについて
発言  マナ  - 13/6/15(土) 22:48 -

引用なし
パスワード
   んー。なんでコマンドマクロ使えないんでしょうか。
その上、図の圧縮はマクロ記録でも記録されないみたいです。

検索したらSendKeysを使ってる例がありました。
ht tp://www.vbaexpress.com/forum/showthread.php?t=34017

図の挿入マクロを、このマクロとつなぎ合わせれば、とりあえずですが出来そう。
こんな感じ。

Sub test()
  
  With Dialogs(wdDialogInsertPicture)
    .Display
    If .Name = "" Then Exit Sub
    ActiveDocument.InlineShapes.AddPicture _
      FileName:=.Name, _
      Range:=Selection.Range
  End With
  
  With Application.CommandBars.FindControl(ID:=6382)
    SendKeys "%A%W{Enter}"
    .Execute
  End With

End Sub
・ツリー全体表示

【788】Re:画像の貼り付けについて
発言  マナ  - 13/6/15(土) 21:24 -

引用なし
パスワード
   Word2010だとコマンドマクロにこんなのがあります。
使えそうなのですが、使い方がわかりませんでした。

DrawCompressPictures(図の圧縮)
・ツリー全体表示

【787】Re:脚注番号のフォントを調節するには?
発言  マナ  - 13/6/15(土) 15:19 -

引用なし
パスワード
   StoryRangesを使えばよかった?

参考にしたサイト
ht tp://word.mvps.org/faqs/customization/ReplaceAnywhere.htm
ht tp://www.relief.jp/itnote/archives/017995.php#extended

Sub test2()
  Dim myRng As Range
  
  If ActiveDocument.Footnotes.Count < 1 Then Exit Sub
  
  Set myRng = ActiveDocument.StoryRanges(wdFootnotesStory)

  With myRng.Find
    .Text = "^f"
    Do While .Execute
      myRng.Font.Size = 16
      myRng.Font.Name = "Courier New"
    Loop
  End With

End Sub
・ツリー全体表示

【786】Re:脚注番号のフォントを調節するには?
発言  マナ  - 13/6/13(木) 23:53 -

引用なし
パスワード
   出来てるかな?自信ありません。

Sub test()
  Dim myRng As Range
  
  If ActiveDocument.Footnotes.Count < 1 Then Exit Sub
  
  With ActiveWindow.ActivePane.View
    .Type = wdPrintView
    .SeekView = wdSeekMainDocument
  End With
  
  With ActiveDocument.ActiveWindow.View
    .SplitSpecial = wdPaneFootnotes
  End With

  ActiveWindow.Panes(2).Activate
  Selection.HomeKey wdStory
  Set myRng = Selection.Range

  With myRng.Find
    .Text = "^f"
    Do While .Execute
      myRng.Font.Size = 16
    Loop
  End With
  
  ActiveDocument.ActiveWindow.View.SplitSpecial = wdPaneNone

End Sub
・ツリー全体表示

【785】Re:塗りつぶしされた文字の検索を行いたい
発言  マナ  - 13/6/9(日) 12:44 -

引用なし
パスワード
   全然だめ。
複数の色が連続する場合は、色の特定はだめみたいですね。
でも解決策もちゃんと紹介されていました。

みんなのワードマクロ。ブックマークに追加させていただきます。
ht tp://ameblo.jp/gidgeerock/entry-10905373936.html
ht tp://ameblo.jp/gidgeerock/entry-11012321922.html

Sub test2()
  Dim r As Range
 
  Set r = ActiveDocument.Content

  With r.Find
    .Highlight = True
    Do While .Execute
      Do While r.HighlightColorIndex = wdUndefined
        r.MoveEnd Unit:=wdCharacter, Count:=-1
      Loop
      If r.HighlightColorIndex = wdBlue Then
        r.Delete
      End If
    Loop
  End With

End Sub
・ツリー全体表示

【784】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/8(土) 11:49 -

引用なし
パスワード
   参考まで。

Clear settings from Find and Replace dialog to prevent unexpected results from future Find or Replace operations
ht tp://word.mvps.org/FAQs/MacrosVBA/ClearFind.htm
・ツリー全体表示

【783】Re:塗りつぶしされた文字の検索を行いたい
発言  マナ  - 13/6/3(月) 21:05 -

引用なし
パスワード
   質問者さんは、もう見てないでしょうが。
自分でもやってみました。

まずはマクロの記録から。(Word2002と2010で試しましたが、どちらも同じ)
りるさんの回答は、大事な部分がコピペ漏れでしょうか。
Selection.Find.ClearFormatting
Selection.Find.Highlight = True

Sub Macro2()
'
' Macro2 Macro
' 記録日 2013-06-03 記録者 mana
'
  Selection.Find.ClearFormatting
  Selection.Find.Highlight = True
  With Selection.Find
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
  End With
  Selection.Find.Execute
End Sub


マクロ記録でキーとなる箇所がわかれば、あとは何とかなる。
勉強のために、何でもいいから今はとにかく沢山書いてみようと思っているので、適当に。
例えば、青色蛍光ペンの箇所を削除するマクロだと、こんな感じで。

Sub test()
  Dim r As Range
  
  Set r = ActiveDocument.Content

  With r.Find
    .Highlight = True
    Do While .Execute
      If r.HighlightColorIndex = wdBlue Then
        r.Delete
      End If
    Loop
  End With

End Sub
・ツリー全体表示

【782】Re:表の作成で
発言  マナ  - 13/6/2(日) 15:17 -

引用なし
パスワード
   質問とは少し違うかも知れませんが、勉強のつもりで、
自分でも使いそうなものを書いてみました。

まずは、りんさんの方法で。

Sub test()
  Dim t As Table
  Dim i As Long, j As Long
  Dim tmp As String
  
  For Each t In ActiveDocument.Tables
    For i = 2 To t.Rows.Count
      For j = 2 To t.Columns.Count
        With t.Cell(i, j).Range
          tmp = Replace(.Text, Chr(13) & Chr(7), "")
          If IsNumeric(tmp) Then
            If Val(tmp) > 100 Then
              .Font.Color = wdColorRed
            End If
          Else
            .Shading.BackgroundPatternColor = wdColorGray20
          End If
        End With
      Next
    Next
  Next

End Sub


他板↓の、んなっとさんの方法で
ht tp://www.moug.net/faq/viewtopic.php?t=65965
今の自分では、こんなの無理。
はやく、いろいろな方法で書けるようになりたいものです。

Sub test2()
  Dim t As Table
  Dim c As Cell
  Dim tmp As String
  
  For Each t In ActiveDocument.Tables
    Set c = t.Cell(1, 1)
    Do Until c Is Nothing
      If c.RowIndex > 1 And c.ColumnIndex > 1 Then
        With c.Range
          tmp = Replace(.Text, Chr(13) & Chr(7), "")
          If IsNumeric(tmp) Then
            If Val(tmp) > 100 Then
              .Font.Color = wdColorRed
            End If
          Else
            .Shading.BackgroundPatternColor = wdColorGray20
          End If
        End With
      End If
      Set c = c.Next
    Loop
  Next

End Sub
・ツリー全体表示

【781】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/2(日) 12:05 -

引用なし
パスワード
   >本来なら、今まで作ったマクロに修正を入れないといけないのですが、どれにClearFormattingを入れるべきなのか、調べるのが、ちょっと面倒なんです。

基本的には、必ずClearFormattingすべきじゃありませんか。
「取り消し線を削除するマクロ」も。

マクロ実行前にどんな操作をしたかで、結果がかわる心配はありませんか。
試しに、手操作で、赤文字の検索を実行後、マクロを実行するとどうなるでしょうか。

Selection.Findの場合、ClearFormattingし、オプション設定も省略しないのが原則だと思います。

私はそこまでしませんが、検索後にも、ご丁寧にClearFormattingしているコードを見たことあります。
・ツリー全体表示

【780】Re:マクロ作動で「検索/置換」コマンドで...
お礼  ひさっぷ  - 13/6/2(日) 11:26 -

引用なし
パスワード
   ありがとうございます!さっそくSelection.Find.ClearFormattingのマクロを単独で作って、活用しています。

本来なら、今まで作ったマクロに修正を入れないといけないのですが、どれにClearFormattingを入れるべきなのか、調べるのが、ちょっと面倒なんです。
・ツリー全体表示

【779】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/1(土) 15:59 -

引用なし
パスワード
   ごめんなさい修正です。
Selectionオブジェクトの場合
.MatchFuzzy = False
は省いちゃいけませんでしたね。

またこの場合、削除なので、
.Replacement.ClearFormatting
は不要でしょうか。たぶんあっても問題ないと思いますが。

Sub test()
  With Selection.Find
    .ClearFormatting
    .Text = "^13"
    .Replacement.Text = ""
    .Wrap = wdFindStop
    .MatchFuzzy = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

ということで、私はRangeオブジェクトを使うことが多いです。
・ツリー全体表示

7 / 45 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
207515
(SS)C-BOARD v3.8 is Free