Word VBA質問箱 IV

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

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


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

【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オブジェクトを使うことが多いです。
・ツリー全体表示

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

引用なし
パスワード
   私も勉強中で、間違ってるかもしれませんが、回答してみます。
あとは、ヘルプなりネットで調べてみてください。

Selection.Find.ClearFormatting
とか
Selection.Find.Replacement.ClearFormatting
で書式を解除できます。
マクロの記録でもわかりますし、検索・置換のマクロはサンプルが多いのでネットで簡単に調べることができます

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

また、SelectionオブジェクトではなくRangeオブジェクトを使う方法があります。

>その際、「取消線の削除」のフォント情報が、「検索/置換」の画面を見ると、引き継がれてしまっています。

Rangeオブジェクトの場合、「検索/置換」の設定とは関係なく実行できるらしいです。

Sub test2()
  Dim myRng As Range
  
  Set myRng = Selection.Range
  
  With myRng.Find
    .Text = "^13"
    .Replacement.Text = ""
  End With
  myRng.Find.Execute Replace:=wdReplaceAll
End Sub
・ツリー全体表示

【777】マクロ作動で「検索/置換」コマンドでフォ...
質問  ひさっぷ  - 13/6/1(土) 11:05 -

引用なし
パスワード
   当方、置換マクロを中心にWordマクロを使っています。

校正作業をする際に、「取消線の削除」→「改行の削除」というプロセスをマクロを使ってよく行います。

その際、「取消線の削除」のフォント情報が、「検索/置換」の画面を見ると、引き継がれてしまっています。

具体的に言うと、「編集/置換」で現れる、「検索する文字列」の下の「オプション」の欄が、

「書式」:取り消し線、二重取り消し線(なし)

となってしまっています。

それが原因で、「改行の削除」のマクロが効くのは、取消線が入っている部分のみになってしまいます。

「取消線の削除」を自作で簡単なのを作っているので、参考に挙げさせていただいています。
ここから、書式をデフォルトに戻すプログラムを足せばいいのは分かるのですが、どうすればできるのか分からないので、困っています。

true, falseといった情報を解除するためのコマンドを調べる方法が分からないので、そうした知識がない場合に、調べる方法というのもあわせて教えてくださると、賢くなるので非常に助かります。

●取り消し線を削除するマクロ
Sub 取消線削除()
  With Selection.Find
    .Font.StrikeThrough = True
    .Font.DoubleStrikeThrough = False
    .Text = "*"
    .Replacement.Text = ""
    .Wrap = wdFindStop
    .MatchFuzzy = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

●改行を削除するマクロ
Sub 改行削除()
  With Selection.Find
    .Text = "^13"
    .Replacement.Text = ""
    .Wrap = wdFindStop
    .MatchFuzzy = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub
・ツリー全体表示

【776】Re:ページ削除について
発言  マナ  - 13/5/27(月) 20:57 -

引用なし
パスワード
   検索してみたら、こういうのがありました

VBA code to delete a page in a Word doc
ht tp://us.generation-nt.com/answer/vba-code-delete-page-word-doc-help-113277822.html

↑のリンク先から、さらにリンク
Word Doesn't Know What a Page Is
ht tp://daiya.mvps.org/wordpages.htm
・ツリー全体表示

【775】Re:ページ削除について
発言  マナ  - 13/5/26(日) 19:30 -

引用なし
パスワード
   1行でも大丈夫かも?

Selection.GoTo(what:=wdGoToPage, which:=wdGoToAbsolute, Count:=myPage).Bookmarks("\page").Range.Delete
・ツリー全体表示

【774】Re:ページ削除について
発言  マナ  - 13/5/26(日) 19:25 -

引用なし
パスワード
   今更ですが書いてみました。

Sub test()
  Dim myPage As Long
  
  myPage = 2 '★ページ指定
  Selection.GoTo what:=wdGoToPage, which:=wdGoToAbsolute, Count:=myPage
  Selection.Bookmarks("\page").Range.Delete

End Sub
・ツリー全体表示

【773】Re:縦横の識別方法、セクションの連続の識...
発言  マナ  - 13/5/26(日) 16:51 -

引用なし
パスワード
   今更ですが、やりたかったであろうことは、こんな感じでしょうか。

Sub test()
  Dim s As Section
  
  For Each s In ActiveDocument.Sections
    With s.Headers(wdHeaderFooterPrimary)
      .LinkToPrevious = False
      If s.PageSetup.Orientation = wdOrientLandscape Then
        NormalTemplate.AutoTextEntries("横用H").Insert where:=.Range
      Else
        NormalTemplate.AutoTextEntries("縦用H").Insert where:=.Range
      End If
    End With
  Next

End Sub
・ツリー全体表示

【772】Re:セルの入れ替え
発言  マナ  - 13/5/25(土) 22:51 -

引用なし
パスワード
   >たとえば3列5行の表があり、
>すべての行に文字が入ってるとします。
>その中の、3列目の2行目と3行目を入れ替える方法、

今更ですが

Sub test()
  Dim tmp1 As String
  Dim tmp2 As String
  
  With ActiveDocument.Tables(1)
    tmp1 = .Cell(2, 3).Range.Text
    tmp2 = .Cell(3, 3).Range.Text
    .Cell(2, 3).Range.Text = Left(tmp2, Len(tmp2) - 2)
    .Cell(3, 3).Range.Text = Left(tmp1, Len(tmp1) - 2)
  End With
  
End Sub
・ツリー全体表示

【771】Re:ExcelでいうSaveCopyAs
発言  マナ  - 13/5/24(金) 22:03 -

引用なし
パスワード
   最近、覗いている掲示板でこんなのありました。
ht tp://www.vbaexpress.com/forum/showthread.php?t=14639

There is no...savecopyas for word as there is in Excel so you have to use a workaround. Make a copy of the file and then saveas the copy...then close the copy.

だそうです。

Application.Documents.Add ActiveDocument.FullName

こんな使い方できるのですね。
・ツリー全体表示

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