Word VBA質問箱 IV

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

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


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

【319】図の挿入について
質問  N.I E-MAIL  - 05/8/13(土) 17:21 -

引用なし
パスワード
   WORDでデジカメで撮った写真を挿入をしたいのですが、
黒枠の淵の部分だけが挿入されて写真の絵が挿入されません。
印刷プレビューでみるときちんと写真は挿入されている状態に
なっているのですが・・・・。
何が原因でしょうか?ご解答をお願いいたします。
・ツリー全体表示

【318】Re:見出しの設定や複数行の削除の方法
回答  H. C. Shinopy  - 05/8/12(金) 22:23 -

引用なし
パスワード
   まず、御質問の件ですが、
ワイルドカードを使って文字列を検索するのが、最もやり易いと思います。
「loop 機能を使わないでも…」についてですが、
検索する文字列が複数箇所ある場合は、使わないわけにはいかないでしょう。

『1.[Box・・・で始まる行を含め、そこから5行分をすべて削除する。』についてだけですが、
一例として下記のマクロを考えました。

他の条件は、このマクロの後に処理を継ぎ足すか、
繰り返し処理で検索文字列を差し替えるとかでできると思います。

検索した文字列が行の先頭か?その文字列の後に文字があるか?を
マクロで実現するのが難しいですね。
文書の内容によっては、マクロがもっと単純あるいは複雑になることもあると思いますが。
(例えば、実際の文書で『[Box・・・』が必ず行の先頭にあって
「・・・」が必ずあるなら、もっと単純で済みます。)

そのようなわけで「myString」の値(ワイルドカードの検索文字列)は、
文書の内容(文章をどう入力したか)を私なりに想像した一例ですので、
tootsieさんの文書ファイルに完全に適合しているかどうかは、
断言できませんので御容赦ください。

下のマクロは既存のものからコピーしてきたので、
検索範囲の判断という余分な処理もしています。
(不要な部分を削るのは簡単ですので、そのままにしてます。これも御容赦を。)

Sub myFindText()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 検索置換処理
 Rem カーソル位置から文書の末尾までの範囲を検索する。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myString As String
 Dim i As Integer
 Dim myRange As Range
 Dim myChrs As Characters
 Dim myChrsFound As Characters
 Dim myText As String
 Dim myLen As Long
 Dim myPos As Long
 Dim myCursor As Long
 '
 myString = "[[]{1,1}Box[!^8-^32]{1,}[^11^13]{1,}"
 '
 Rem カーソル位置の行の先頭に移動する。
 Selection.HomeKey Unit:=wdLine, Extend:=wdMove
 '
 Rem カーソル位置から文書の末尾までの範囲を選択する。
 Selection.EndKey Unit:=wdStory, Extend:=wdExtend
 '
 Set myRange = Selection.Range
 Set myChrs = myRange.Characters
 Selection.Collapse wdCollapseStart
 '
 With Selection.Find
  .ClearFormatting
  .Text = myString
  .Forward = True
  .Wrap = wdFindStop
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchFuzzy = False
  .MatchWildcards = True
  Do
   .Execute
   If Not .Found Then Exit Do
   '
   Set myChrsFound = Selection.Range.Characters
   '
   Rem 検索の範囲外の場合、処理しない。
   If myChrsFound.First.Start < myChrs.First.Start Then Exit Do
   If myChrsFound.Last.End > myChrs.Last.End Then Exit Do
   '
   Rem カーソルを行の先頭に戻す。
   Rem 検索した文字列が行の先頭かどうか判断する。
   myLen = Len(Selection.Range.Text)
   myPos = Selection.HomeKey(Unit:=wdLine, Extend:=wdMove)
   myPos = myPos + myLen
   '
   If myPos = 0 Then
    Rem 行の先頭だった場合
    Rem MsgBox "選択範囲は移動されませんでした。"
    Selection.MoveDown Unit:=wdLine, Count:=5, Extend:=wdExtend
    Selection.Range.Text = ""
   Else
    Rem 行の先頭でない場合、読み飛ばし。
    .Execute
    Selection.Collapse wdCollapseEnd
   End If
   '
   myCursor = myChrsFound.First.Start - myChrs.First.Start + 1
   i = Int(myCursor * 100 / myChrs.Count)
   Application.StatusBar = "myFindText" & ":処理中" & " " & Format(i, "##0") & "%"
  Loop
 End With
 '
 Rem カーソル位置を元に戻す。
 myRange.Select
 Selection.Collapse wdCollapseStart
 '
 Set myRange = Nothing
 Set myChrs = Nothing
 Set myChrsFound = Nothing
End Sub ' myFindText *----*----*  *----*----*  *----*----*  *----*----*
・ツリー全体表示

【317】見出しの設定や複数行の削除の方法
質問  tootsie  - 05/8/10(水) 13:12 -

引用なし
パスワード
   暑い日が続きます。お疲れさまです。

またまた虫のよい質問で大変恐縮ですが、ワード上で下記のようなマクロを作りたいときは、どのようにしたらよいでしょうか。loop 機能を使わないでもできる方法かどうか知りたいです。

よろしくお願いします。


1.[Box・・・で始まる行を含め、そこから5行分をすべて削除する。
2.行の先頭が◎で始まる行に「見出し1」を設定する。
3.【編・・・で始まる行を削除する。
4.EEEEで始まる行を含め、そこから3行分をすべて削除する。

(注)1〜3いずれも、文書中に該当する箇所が複数ある。「・・・」にはさまざまな文字が入っている。[、◎、【の3種類の記号は削除の際、いずれもキーになる記号かと思います。
・ツリー全体表示

【316】Re:Loopの使い方
お礼  tootsie  - 05/6/30(木) 16:06 -

引用なし
パスワード
   ご教示ありがとうございました。

tfというのは、方程式の代数の記号のように、たぶんtrue とfalseから象徴的に頭文字をとられたのですね。マクロを動かす上では別のアルファベットでもかまわないのですよね。

IT用語辞典で調べたら、「ブール型」というのは「真(true)と偽(false)の2種類の値だけを扱う最も単純な構造の型」とありました。ちょっとだけ分かったような気がしました。

まずは略儀ながらお礼まで。
・ツリー全体表示

【315】Re:ページ番号の付け方
発言  りん E-MAIL  - 05/6/19(日) 10:27 -

引用なし
パスワード
   OBARA さん、おはようございます。
>最初のページから2ページ目までは表紙と目次なのでページ番号を付けたくありません。3ページ目から1番の番号を付けたいのですが、どのように設定したらいいのでしょうか?ご存知の方教えてください。
マクロではないですが。

(1) 2ページでセクション開始を指定する(セクションを区切る)
(2) それぞれのセクションで
 ページ設定 ヘッダーとフッター 先頭ページのみ別指定をチェック
(3) セクション2のページ番号の書式 開始番号 = 0
(4) ページ番号の挿入
これで3頁から1,2,3と続いて行きます
もし、後もセクションを区切っているなら、前を引き継ぐで連番になります。

これしか方法を知らないので、すみません。
一太郎ならマイナスでなんとかなったと思うんですけどね。
・ツリー全体表示

【314】Re:Loopの使い方
回答  りん E-MAIL  - 05/6/19(日) 9:55 -

引用なし
パスワード
   tootsie さん、おはようございます。
>「マクロの記録」を使ってマクロを作りました。それを繰り返して行わせるには、Loopという命令方法があるようですが、その前に「Do While xxxx」または「Do Until xxxx」が必要だというところまでは判明しました。それをいろいろな場所に入れて試したのですが、さっぱりだめです。どこにどのように挿入すればいいか、おわかりでしたらご教授願えませんか。

Execute メソッド (Find オブジェクト)
指定された検索を実行します。検索が正しく実行できた場合、True を返します。
ということなので、TRUEを返すかどうかでLOOPを続けるかどうか判定します
'
Sub ANSA()
  Dim tf As Boolean 'ブール型
  'そのまま使用
  Selection.HomeKey Unit:=wdStory
  Selection.Find.ClearFormatting
  '検索条件設定(そのまま使用)
  With Selection.Find
    .Text = _
      "------------------"
    .Replacement.Text = "^m"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
    '========================
     '繰り返すのはここから
     tf = .Execute '検索実行:成功したらTRUE
     Do While tf = True 'tf = True 間、Do〜Loop間を繰り返す
      Selection.Delete Unit:=wdCharacter, Count:=1
      Selection.MoveDown Unit:=wdLine, Count:=3, Extend:=wdExtend
      Selection.Delete Unit:=wdCharacter, Count:=1
      Selection.InsertBreak Type:=wdPageBreak
      Selection.MoveDown Unit:=wdLine, Count:=1
      Selection.Style = ActiveDocument.Styles("見出し 1")
      '次を実行
      tf = .Execute
     Loop
    '========================
  End With
End Sub

こんな感じです。
・ツリー全体表示

【313】Loopの使い方
質問  tootsie  - 05/6/10(金) 17:00 -

引用なし
パスワード
   こんにちは。2回目の投稿です。(いまだ勉強をさぼったまま、付け焼刃で日々過ごしている初心者ですが)

ワードでの質問です。

「マクロの記録」を使ってマクロを作りました。それを繰り返して行わせるには、Loopという命令方法があるようですが、その前に「Do While xxxx」または「Do Until xxxx」が必要だというところまでは判明しました。それをいろいろな場所に入れて試したのですが、さっぱりだめです。どこにどのように挿入すればいいか、おわかりでしたらご教授願えませんか。

ちなみに、自動的に作成されたマクロはだいたい次のようなものです。

Sub ANSA()

  Selection.HomeKey Unit:=wdStory
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = _
      "------------------"
    .Replacement.Text = "^m"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
  End With
  Selection.Find.Execute
  Selection.Delete Unit:=wdCharacter, Count:=1
  Selection.MoveDown Unit:=wdLine, Count:=3, Extend:=wdExtend
  Selection.Delete Unit:=wdCharacter, Count:=1
  Selection.InsertBreak Type:=wdPageBreak
  Selection.MoveDown Unit:=wdLine, Count:=1
  Selection.Style = ActiveDocument.Styles("見出し 1")
End Sub

「------------------」を検索し、そこから数行を削除、強制改ページを入れてその次の行に「見出し1」を設定するという趣旨です。「------------------」がなくなるまで自動的に繰り返し作業を行うように設定できたらと思っています。Windows2000、Word2000を使用しています。

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

【312】自己解決
お礼  古屋  - 05/6/1(水) 13:48 -

引用なし
パスワード
   自己解決しましたのでご報告致します。

テーブルのセル数(Cells.Count)でループすることで、
セル結合を意識することなく値を取得することができました。

正しいコーディングではないかもしれませんが、記載いたします。


MsgBox "テーブル個数 " & ActiveDocument.Tables.Count
'テーブルの個数
For cnt = 1 To ActiveDocument.Tables.Count
 MsgBox "★テーブル[" & cnt & "]の処理"
 MsgBox "■セル数:" & ActiveDocument.Tables.Item(cnt).Range.Cells.Count

 '各テーブルのセル数ループ
  For Cell_cnt = 1 To ActiveDocument.Tables.Item(cnt).Range.Cells.Count
    MsgBox "■:(" & ActiveDocument.Tables.Item(cnt).Range.Cells.Item(Cell_cnt).RowIndex & _
          "," & _
          ActiveDocument.Tables.Item(cnt).Range.Cells.Item(Cell_cnt).ColumnIndex & _
          ")=" & _
          ActiveDocument.Tables.Item(cnt).Range.Cells.Item(Cell_cnt).Range.Text
  Next
Next
・ツリー全体表示

【311】行結合と列結合している表の各セルの文字列...
質問  古屋  - 05/5/26(木) 23:16 -

引用なし
パスワード
   WORD VBAに携わること1週間の者です。

動作環境:Windows2000 Word2000

結合していない表の場合には、下記のコードで取得することができましたが、
行結合と列結合していると、”コレクションメンバーが存在しない”ため取得できませんでした。

どのようにコードを書けば、正常に動作するのかわかりません。
どなたか、ご教授願います。


For cnt = 1 To ActiveDocument.Tables.Count
   MsgBox "テーブルの行 " & ActiveDocument.Tables(cnt).Rows.Count
   MsgBox "テーブルの桁" & ActiveDocument.Tables(cnt).Columns.Count
    
   For row = 1 To ActiveDocument.Tables(cnt).Rows.Count
     For col = 1 To ActiveDocument.Tables(cnt).Columns.Count
         MsgBox "■セル値:" & cnt & "(" & row & "," & col & ") :" & ActiveDocument.Tables(cnt).Cell(row, col).Range.Text
      Next
   Next
Next
・ツリー全体表示

【310】ページ番号の付け方
質問  OBARA  - 05/5/23(月) 12:12 -

引用なし
パスワード
   最初のページから2ページ目までは表紙と目次なのでページ番号を付けたくありません。3ページ目から1番の番号を付けたいのですが、どのように設定したらいいのでしょうか?ご存知の方教えてください。

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

【309】Re:特定のスタイルのテキスト枠のみ削除する
お礼  timtamlover  - 05/5/23(月) 10:17 -

引用なし
パスワード
   ありがとうございました。
解決できました。
・ツリー全体表示

【308】Re:試行錯誤してみましたが。。。
回答  こば  - 05/5/17(火) 15:14 -

引用なし
パスワード
   >Sub Macro()
>For Each s In ActiveDocument.Shapes
> With s.TextFrame
>  If .HasText = True Then
>   If Selection.Find.style = "api.graphiclabel" Then
>   ---ここになにか追加したいのですが---    
>   End If
>  End If
> End With
>Next
>End Sub
レス遅くてすみません。
おそらく、
シェイプを選択状態にして,
選択中の1つ目のシェイプを削除、
でOKだと思います。

   If Selection.Find.style = "api.graphiclabel" Then
    s.Select
    selection.InlineShapes(1).Delete
   End If

とりいそぎ。
・ツリー全体表示

【307】試行錯誤してみましたが。。。
質問  timtamlover  - 05/5/16(月) 18:02 -

引用なし
パスワード
   頼りきりでは、申し訳ないので、自分でも試行錯誤してみました。
以下のマクロで、レイアウト枠内にあるapi.graphiclabelという
スタイルのテキストボックスを探すところまでは、できました。

が、そのテキストボックスを削除するコマンドがわからず困っています。

本当の希望は、api.graphiclabelを別のスタイル(例えば、標準)に
変更したいのですが、、、

どちらの方法でも構いませんので、お分かりになる方、ぜひご教示
お願いいたします。

Sub Macro()
For Each s In ActiveDocument.Shapes
 With s.TextFrame
  If .HasText = True Then
   If Selection.Find.style = "api.graphiclabel" Then
   ---ここになにか追加したいのですが---    
   End If
  End If
 End With
Next
End Sub
・ツリー全体表示

【306】Re:特定のスタイルのテキスト枠のみ削除する
質問  timtamlover  - 05/5/12(木) 17:45 -

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

こばさんのマクロを実行したところ、
実行時エラー'13':
型が一致しません。
という、エラーが発生してしまい、

デバッグしてみたところ、どうやら
> myRange.Find.Execute FindText:="", Format:="api.graphiclabel", _
>   ReplaceWith:="", Replace:=wdReplaceAll
の辺りに問題があるようです、、、

こちらの環境は、Windows2000&Word2003です。
修正お願いできますでしょうか。
・ツリー全体表示

【305】Re:コマンドマクロ
お礼  timtamlover  - 05/5/12(木) 17:21 -

引用なし
パスワード
   こばさん、ありがとうございました。
目からウロコです。
・ツリー全体表示

【304】Re:特定のスタイルのテキスト枠のみ削除する
回答  こば  - 05/5/12(木) 17:15 -

引用なし
パスワード
   こばです。こんにちは。

Selection.Find.Execute Replace:=wdReplaceAll
は、地の文章にカーソルがあるときは地の文章にしか使えないのかもしれません。

たとえば、
インライン以外のテキストフレームは、
シェイプオブジェクトとしてRangeプロパティが取得可能です。

Dim myRange As Range
Dim Shp As Shape

For Each Shp In ActiveDocument.Shapes
 Set myRange = Shp.TextFrame.TextRange
 Debug.Print myRange.Text
 myRange.Find.Execute FindText:="", Format:="api.graphiclabel", _
   ReplaceWith:="", Replace:=wdReplaceAll
        
Next

こんなんでどうでしょう?
(WinXP & Word2003)
・ツリー全体表示

【303】Re:コマンドマクロ
発言  こば  - 05/5/12(木) 17:01 -

引用なし
パスワード
   こばです。

ヘルプには直接的には記載ないようですね。

「マクロの記録」をやってみましょう。
基本ですが、真理でもありますw

Sub Test1()
  Application.Run MacroName:="ToolsWordCount"
  CommandBars("Word Count").Visible = False
End Sub
(当方 WinXP & Word2003)
・ツリー全体表示

【302】コマンドマクロ
質問  timtamlover  - 05/5/12(木) 16:35 -

引用なし
パスワード
   [ツール]→[マクロ]→[マクロ]と選択して、
マクロダイアログボックスを開いたとき、
[マクロの保存先]ドロップダウンリストから
コマンドマクロというのが選べます。

これらは、すでにツールバーに含まれている
機能のマクロだと思うのですが。

このマクロを自作のマクロから呼び出すには
どうしたら良いのでしょうか?

具体的には、ワードカウントを調べたいので、
ToolsWordCountを呼び出したいと思います。
・ツリー全体表示

【301】特定のスタイルのテキスト枠のみ削除する
質問  timtamlover  - 05/5/10(火) 11:38 -

引用なし
パスワード
   FrameMakerのファイルをRTF形式に変換、
その後、WORDファイルに変換したもので作業しています。

RTFに変換する際、画像は消えてしまい、そのファイル名がテキスト枠に書かれて残ります。
このときの、ファイル名は、api.graphiclabelというスタイルになっています。

ファイル名の書かれたテキスト枠のみを削除したく、マクロの記録でマクロを作ったのですが、マクロを実行しても何も起こりません。

ひょっとして、テキスト枠内のスタイルをマクロは検索できないのでしょうか?

以下、作成したマクロです。

Sub FileName()
  Selection.Find.ClearFormatting
  Selection.Find.Style = ActiveDocument.Styles("api.graphiclabel")
  Selection.Find.Replacement.ClearFormatting
  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 Replace:=wdReplaceAll
End Sub
・ツリー全体表示

【300】Re:WORDマクロの解説本について教えてくだ...
回答  H. C. Shinopy  - 05/4/29(金) 23:02 -

引用なし
パスワード
   井川はるき・池谷京子「Excel VBAによるOffice連携プログラミング」
 秀和システム 税別2500円
(「Chapter 2 Excel-Word連携プログラミング」 
 ExcelからWordを起動するなど、19項目)
・ツリー全体表示

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