Word VBA質問箱 IV

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

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


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

【728】ワードマクロ 条件一致の際、表の指定セル...
質問  みぃ  - 12/9/11(火) 22:40 -

引用なし
パスワード
   ワードマクロで質問です。

ワードで、一つのドキュメントに行数は不確定 7列の表を複数作成しています。

3列目のセルに指定文字列が含まれていた場合、6列目のセルの末尾に
指定文字列を追加するマクロを作成するのが目的です。

リファレンスやネット等で調べて、どうにかこうにか
下記二つのマクロ候補を作成しましたが
これをどう、発展させれば、希望のマクロになるのか
詰まってしまいました。

アドバイス等、いただけないでしょうか。

Sub カーソル位置のセルの文字列の末尾に指定文字列を挿入()
  Dim myRange As Range
  Set myRange = Selection.Range
  With myRange
    .Expand Unit:=wdParagraph
    .InsertAfter "【二】"
  End With
  Set myRange = Nothing
End Sub


Sub 表の指定セルに指定文字を追加()
'1番目の表の1番目のセルに文字列を追加
    With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
      .InsertAfter Text:="セル 1,1"
    End With
End Sub
・ツリー全体表示

【727】Re:WORDマクロの解説本 追加情報
発言    - 12/8/9(木) 23:04 -

引用なし
パスワード
   Michael Halvorson , Chris Kinata 著
「Microsoft Word97・Visual Basicステップバイステップ」
アスキー 1997年9月発行 価格3,200円+税


マクロの記録から始まって、わずか300ページほどで
ファイルとフォルダの操作、VBEの操作、OLEオートメーションまで学習。
アプリケーションレベルのイベントもあり。

いまどきの解説本のような かんで含める親切な文体ではないが、内容は充実。
かなり古い本とはいえ、初級レベルをクリアしたひとには一読の価値があるかと。

・ツリー全体表示

【726】Re:相互参照のダイアログボックス
お礼  りんぐ  - 12/3/5(月) 15:45 -

引用なし
パスワード
   >はい↓。
>後は知らない。
774さん、ありがとうございました!
もし、また何かいい案が思いついたら、教えてください。
よろしく御願いします。
・ツリー全体表示

【725】Re:相互参照のダイアログボックス
回答  774  - 12/3/5(月) 13:16 -

引用なし
パスワード
   > さらには、両方とも表示した状態で、本文の編集をしたいのですが。。。。

はい↓。
後は知らない。

Sub Sample3()
  Application.CommandBars.FindControl(ID:=775).Execute
  With Application.Tasks("相互参照")
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyHome, 0&
    .SendWindowMessage &H101, vbKeyHome, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyTab, 0&
    .SendWindowMessage &H101, vbKeyTab, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
    .SendWindowMessage &H100, vbKeyHome, 0&
    .SendWindowMessage &H101, vbKeyHome, 0&
    .SendWindowMessage &H100, vbKeyDown, 0&
    .SendWindowMessage &H101, vbKeyDown, 0&
  End With
End Sub
・ツリー全体表示

【724】Re:相互参照のダイアログボックス
お礼  りんぐ  - 12/3/2(金) 17:28 -

引用なし
パスワード
   まさにこんな感じです、ありがとうございました。

追加の御願いなのですが、このダイアログボックスを表示したまま、
本文の編集ができるようにしていただければ助かるのですが・・。

さらには、両方とも表示した状態で、本文の編集をしたいのですが。。。。

よろしく御願いいたします。
・ツリー全体表示

【723】Re:相互参照のダイアログボックス
回答  774  - 12/3/2(金) 15:02 -

引用なし
パスワード
   こんな感じ?

Sub Sample1()
  With Application.Dialogs(wdDialogInsertCrossReference)
   SendKeys "ff{TAB}{DOWN 2}{ENTER}"
   .ReferenceType = "図"
   .InsertAsHyperLink = 1
   .Show
  End With
End Sub

Sub Sample2()
  With Application.Dialogs(wdDialogInsertCrossReference)
   SendKeys "ff{TAB}{DOWN 2}{ENTER}"
   .ReferenceType = "表"
   .InsertAsHyperLink = 1
   .Show
  End With
End Sub
・ツリー全体表示

【722】相互参照のダイアログボックス
質問  りんぐ  - 12/3/1(木) 13:43 -

引用なし
パスワード
   相互参照ダイアログボックスを開くと、
参照する項目、相互参照の文字列、参照先を選択することになります。
ただ、私の場合、使う項目が非常に限られています。
以下のパターンだけです。

パターン1
参照する項目:図
(ハイパーリンクとして挿入する)
相互参照の文字列:番号とラベル

パターン2
参照する項目:表
(ハイパーリンクとして挿入する)
相互参照の文字列:番号とラベル


パターン1のみ(あるいはパターン2)を表示するダイアログがあればと思います。
レイアウトはどんなものでも構いません。
このようなマクロをご教示ください。
どうぞよろしくお願いします。
・ツリー全体表示

【721】マクロの実行速度向上
質問  流星バナナ  - 12/2/18(土) 16:13 -

引用なし
パスワード
   いつも参考にさせてもらっています。

Word VBAの実行速度が非常に遅く困っています。

マクロでやっていることは,既に配置している
ラインやテキストのTop,Left,width,height
に値を設定し,大きさを変えたり動かしたりして
います。オブジェクトに対しての処理が異常に
遅いです。

現在,処理速度向上の対策としては
Application.ScreenUpdating = False
をしていますが,他に何かありましたら
ご教授願います。
・ツリー全体表示

【720】Re:クリップボードをクリア
お礼  流星バナナ  - 12/2/7(火) 14:36 -

引用なし
パスワード
   希望の処理を実現できました。
ありがとうございました。
・ツリー全体表示

【719】Re:クリップボードをクリア
回答  774  - 12/2/7(火) 11:33 -

引用なし
パスワード
   単にメッセージが出るのを防ぐだけなら適当なのをコピーすれば良いのではないかと。

Public Sub Macro1()
  Dim rng As Range
  
  ActiveDocument.InlineShapes(1).Range.Copy
  For Each rng In ActiveDocument.Characters
    rng.Select
    If Selection.Type = wdSelectionNormal Then
      Selection.Copy
      Exit For
    End If
  Next
  Application.Quit
End Sub
・ツリー全体表示

【718】クリップボードをクリア
質問  流星バナナ  - 12/2/4(土) 17:52 -

引用なし
パスワード
   いつも参考にさせてもらっています。

Word VBAでクリップボードのクリア方法を
探しています。

やっていることは
1.VBAでオブジェクトをコピーして貼り付け
2.終了ボタンで保存せず終了
終了ボタン時にクリップボードに関しての
メッセージが出るのを防ぎたいです。
<word2000〜2010で使用>

なお,word2010(64bit)対策としてWinApiは使用しない
方向で考えています。

回答よろしくお願いします。
・ツリー全体表示

【717】Re:文字検索
お礼  ゆい  - 12/1/16(月) 16:14 -

引用なし
パスワード
   アドバイス頂いた内容をきちんと理解できていませんが、
何とか希望通りの動作をするマクロにすることが出来ました!
ありがとうござました。

アドバイス頂いたマクロの内容の勉強をこれから行います!
・ツリー全体表示

【716】Re:文字検索
回答  H. C. Shinopy  - 12/1/15(日) 22:42 -

引用なし
パスワード
   残念ながら簡単には行かないようです。
選択範囲の文字の位置を取り込んで、
Ifステートメントで範囲内かどうか判断しながら処理する方法はありますが、
どうしても範囲外の文字列を検索してしまいますし、
Ifステートメントが悪さをするのか下記の「二重検索」マクロより処理時間が長くなります。

私の場合は、まず正規表現で検索して、
再びFindで検索してカーソルを移動させ書き換えする方法でやっています。
(正規表現のメタキャラクタ(\|()[]{}^$*+?.など)に該当する文字列を検索する場合は、
その前に「\」を付ける必要があるので注意!)

下記のマクロは選択した範囲内の文字列で、
例えば「cx」(あるいは「c^」)・「a_」を検索して、
各々「^」の付いたc、「^」の付いたaに置換する処理です。

また、位置については下記マクロの
Dim myRangeStart As Word.Range

Set myRangeStart = Selection.Range ' 検索開始点を取得する。

myRangeStart.Select ' 検索開始点に戻る。
を見て下さい。
以下、マクロ。

Sub MyFindReplace()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 選択範囲内 文字列検索置換処理
 Rem 作譜:Hitrock Camellia Shinopy
 Rem 言語:Word VBA
 Rem 機能...
 Rem  1. 選択した範囲内で、指定した文字列を検索し置換する。
 Rem 注記...
 Rem  1. 正規表現で検索した文字列を再度Selection.Findプロパティで検索。
 Rem  2.
 Rem 履歴...
 Rem  第01版:2010/09/30:作成。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myRegExp As Object ' VBScript_RegExp_55.RegExp
 Dim myMatches As Object ' MatchCollection
 Dim myMatch As Object ' Match
 Dim myTextReplace As String
 '
 Dim myRangeStart As Word.Range
 '
 Dim i As Long
 Dim c As Long
 Dim myStatusBar As String
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 If Len(Selection.Range.Text) <= 0 Then
  Rem 範囲を指定しなかった場合は、カーソルより後で文書の末尾まで選択する。
  Selection.EndKey Unit:=wdStory, Extend:=wdExtend
 End If
 '
 Set myRegExp = CreateObject("VBScript.RegExp") ' New VBScript_RegExp_55.RegExp
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
MyFindReplaceSubEntry:
 With myRegExp
  .Pattern = "[cghjsu][x\^]|[aeiou]_" ' パターンを設定
  .IgnoreCase = False ' 大文字と小文字を区別する
  .Global = True ' 文字列全体を検索
  '
  If .Test(Selection.Range.Text) = False Then
   MsgBox "該当する文字列がありません。"
   Selection.Collapse wdCollapseStart
   GoTo MyFindReplaceSubExit
  End If
  '
  i = 0
  Set myMatches = .Execute(Selection.Range.Text)
  Selection.Collapse wdCollapseStart
  Set myRangeStart = Selection.Range ' 検索開始点を取得する。
  '
  For Each myMatch In myMatches
   With Selection.Find
    .Text = myMatch.Value
    .Execute
   End With
   '
   Select Case myMatch.Value
    Case "cx": myTextReplace = ChrW(265)
    Case "c^": myTextReplace = ChrW(265)
    Case "a_": myTextReplace = ChrW(226)
   End Select
   '
   Selection.TypeText myTextReplace ' 置き換え。
   '
   i = i + 1
   c = i * 100 \ myMatches.Count
   myStatusBar = Format(c, "##0") & "% " & i & "/" & myMatches.Count & "件"
   Application.StatusBar = "MyFindReplace" & ":処理中" & " " & myStatusBar
   DoEvents
  Next ' myMatch
 End With
 '
 myRangeStart.Select ' 検索開始点に戻る。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
MyFindReplaceSubExit:
 Set myRegExp = Nothing
 Set myMatches = Nothing
 Set myRangeStart = Nothing
 Application.StatusBar = "MyFindReplace" & ":" & "処理完了!"
End Sub ' MyFindReplace *----*----*  *----*----*  *----*----*  *----*----*

[End]
・ツリー全体表示

【715】文字検索
質問  ゆい  - 12/1/15(日) 18:04 -

引用なし
パスワード
   こんにちは
Word-VBA超初心者です。(Excel-VBAはそれなりに...)

Findを用いた文字検索において、位置情報を取得することは出来ますか?
  
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "■"
        .Replacement.Text = "■"
        .Wrap = wdFindStop
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    位置 = Selection.Start

このような感じで、「位置」に位置情報を格納したいのですが、なぜだか、格納される時と格納されない(1が入っている)時があります....

どなたか、正しい方法をお教え頂けないでしょうか?

また、Findを用いる際、選択範囲(マウスでドラッグして黒く反転させた範囲)のみ実行させる方法はござますか?今組んでいるマクロでは、選択範囲は無視されて、ドキュメントの最後まで検索してしまいます。

宜しくお願いいたします。
・ツリー全体表示

【714】Re:ドキュメント内検索でヒットした箇所を...
発言  りる  - 11/3/13(日) 16:00 -

引用なし
パスワード
   田吾作 さん、こんにちは。

>こちらを閉じた時刻
>2010/06/05(土) 22:23
>
>あちらの投稿時刻
>2010/06/05(土) 22:57:35

>これが何故にマルチになるのか理解できません。
時刻まではみてませんでした。
すみません。
・ツリー全体表示

【713】Re:ドキュメント内検索でヒットした箇所を...
発言  田吾作  - 11/2/27(日) 0:09 -

引用なし
パスワード
   こちらを閉じた時刻
2010/06/05(土) 22:23

あちらの投稿時刻
2010/06/05(土) 22:57:35

これが何故にマルチになるのか理解できません。
意味がわかって使っている?
・ツリー全体表示

【712】Re:ドキュメント内検索でヒットした箇所を...
発言  りる  - 11/2/17(木) 10:55 -

引用なし
パスワード
   ドサンピン さん、こんにちわ。

>同じような疑問を持って調べていたらここにたどり着きました。
>なぜ閉じてしまったのでしょう。経緯が分かりません。
マルチ先である程度納得のいく回答をもらったからでしょうね。
h t t p : //efcit.co.jp/office2000/exqalounge.cgi?print+201006/10060002.txt
・ツリー全体表示

【711】Re:ドキュメント内検索でヒットした箇所を...
発言  ドサンピン  - 11/2/12(土) 12:37 -

引用なし
パスワード
   ▼田吾作 さん:
>閉じます。
>お騒がせしました。

同じような疑問を持って調べていたらここにたどり着きました。
なぜ閉じてしまったのでしょう。経緯が分かりません。
自己解決であればその内容を書いていただきたかったです。
・ツリー全体表示

【710】Excel VBAからのWord置換
質問  とも  - 10/11/25(木) 23:02 -

引用なし
パスワード
   質問させてください。よろしくお願いします。

エクセルVBAからマクロを実行し、ドキュメントファイル名:テキスト.docに含まれる“昭和”の文字を“平成”に置換したいのです。(エクセルシートのA1セルには“昭和”の文字列が格納)

下記、マクロでは Excel2003 & Word2003 では実行されるのですが、Excel2007 & Word2007(OS:WindowsVist) ではエクセルが停止してしまいます。
これを回避する方法等があれば、教えて頂きたく宜しくお願いします。

Sub Macro()

Dim 修正前 As String
Dim 修正後 As String
Dim Wdoc as Word.Document

修正前 = "昭和"
修正後 = Range("A1").Value  '* 平成 *

Set Wdoc = GetObject("C:\My_desktop\文章\テキスト.doc")

With Wdoc.Content.Find
   .Text = 修正前
   .MatchByte = True
   .Format = False
   .Replacement.Text = 修正後
   .Execute Replace:=wdReplaceAll
end With

Set Wdoc = Nothing

End Sub
・ツリー全体表示

【709】Re:Wordのコメントの対象位置を抽出したい
回答  りる  - 10/11/22(月) 15:40 -

引用なし
パスワード
   雛 さん、こんにちわ。

>本文中に挿入されているコメントの内容は抽出できるのですが、
>それが何ページの何段目といった情報がどうしてのわかりません。

ScopeでコメントのRangeを取得できるので、その位置情報をInformationで確認します。

Sub Macro1()
  Dim obj As Comment
  For Each obj In ActiveDocument.Comments
    With obj.Scope
      MsgBox .Information(wdActiveEndPageNumber) & "ページ" & _
          .Information(wdFirstCharacterLineNumber) & "行" & _
          .Information(wdFirstCharacterColumnNumber) & "桁", _
          vbInformation, obj.Index & " : " & .Text
    End With
  Next
End Sub
・ツリー全体表示

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