Word VBA質問箱 IV

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

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


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

【332】Re:ComboBoxの使い方について
お礼  緑の狐  - 05/9/1(木) 18:51 -

引用なし
パスワード
   Jaka さん
緑の狐ですどうもありがとう御座いました。
また宜しくお願いいたします。
・ツリー全体表示

【331】Re:ComboBoxの使い方について
発言  Jaka  - 05/9/1(木) 12:42 -

引用なし
パスワード
   マクロです。(ワードのマクロ全然解りませんが...。)
ThisDocumentに

Private Sub Document_Open()
  For i = 1 To 10
    ComboBox1.AddItem i
    ComboBox1.ListIndex = -1
  Next
  '上か下のどちらか
  CmbLst = Array("aaaa", "bbbb", "cccc", "dddd", "eeee", "ffff")
  ComboBox2.List = CmbLst
  ComboBox2.ListIndex = -1
End Sub
・ツリー全体表示

【329】ComboBoxの使い方について
質問  緑の狐  - 05/8/25(木) 17:51 -

引用なし
パスワード
   初めて参加させて頂きます。
『緑の狐』と申します。
ワード文章の中にデザインモードからComboBoxを作成しました。
さて
そのリストはどのように入力するのかわかりません。
何方か宜しくご教授ください。
宜しくお願いいたします。
・ツリー全体表示

【328】xmlについて
質問  K  - 05/8/18(木) 14:16 -

引用なし
パスワード
   突然ですがワードMLを使う利点というのはどのような点ですか?
リッチテキスト形式などとの関連があるために便利というようなことを聞いたのですが、具体的に教えていただけないでしょうか?
また、リッチテキスト形式で保存できるのですが、xml形式で保存ができないのですが、無料でできるようになるのですか?
・ツリー全体表示

【327】Re:フォントの上下位置について
お礼  akki  - 05/8/18(木) 9:45 -

引用なし
パスワード
   H. C. Shinopy さん、

おぉ!すごいです。これで解決しました!
同様に下がっている文字を下付き文字に変えるようにも設定できました。
ありがとうございました!(*^o^*)
・ツリー全体表示

【326】Re:フォントの上下位置について
回答  H. C. Shinopy  - 05/8/17(水) 23:37 -

引用なし
パスワード
   実際に文字の位置に「上げる」「2.5pt」を指定して、
次のマクロを実行すると、「2」と表示されます。
やはり整数しか認識しないようです。
MsgBox Selection.Font.Position

単に上がっている文字を上付き文字に変えるだけなら、
条件に「….Font.Position > 0」を指定すれば、
変換できます。

Sub myChrsFont()
 Dim myChrs As Range
 '
 Selection.HomeKey unit:=wdStory
 '
 For Each myChrs In ActiveDocument.Characters
  If myChrs.Font.Position > 0 Then
   myChrs.Font.Position = 0
   myChrs.Font.Superscript = True
  End If
 Next ' myChrs
 '
 MsgBox "処理が終了しました。"
End Sub
・ツリー全体表示

【325】Re:複数の見出しの設定
お礼  tootsie  - 05/8/17(水) 16:15 -

引用なし
パスワード
   早速のご教示ありがとうございました。
快適かつスマートに機能してくれています。

今回、ワードでマクロの「ヘルプ機能」を使えるようにしたので(いままでリムーバルディスクからダウンロードされておらず使用できませんでした)理解の助けになります。
ただ、専門用語が多く、技術的な基礎知識がないので難解です。コンピュータ・プログラムの門外漢でも簡単にマクロを組める仕組みがあれば、労働集約的作業から解放されるオフィスワーカーも少なくないのではないかしらん、と想像したりします。

まずは略儀ながらお礼申し上げます。
・ツリー全体表示

【324】Re:複数の見出しの設定
回答  H. C. Shinopy  - 05/8/16(火) 22:32 -

引用なし
パスワード
   残暑お見舞い申し上げます。

まず、マクロ処理の前提として、
文書の先頭から末尾まで検索したらそれで処理を終わること、
「◎」が行の先頭・途中・末尾のどこかにあるということにします。

マクロの記録では、「.Wrap = wdFindContinue」となり、
検索・置換の内容によっては、処理が無限ループに陥ります。
これが、tootsieさんを困惑させている原因です。

ヘルプで「Wrap」を調べると、次のような説明が表示されます。
wdFindAsk 選択範囲または指定範囲を検索し、
 文書の残りの部分も検索するかどうかをたずねるメッセージを表示します。
wdFindContinue 検索範囲の先頭または末尾まで検索し、さらに検索を続けます。
wdFindStop 検索範囲の先頭または末尾まで検索したら、検索を終了します。

「.Wrap = wdFindStop」を指定すれば、文書の末尾まで検索すると、
Do〜Loop内の「If Not .Found Then Exit Do」で
処理を終わらせることができます。

Sub myStyle1()
 ' 文書の先頭から末尾まで「◎」を検索する。
 ' 見出し1を設定する。
 Selection.HomeKey Unit:=wdStory
 Selection.Find.ClearFormatting
 '
 With Selection.Find
  .Text = "◎"
  .Forward = True
  .Wrap = wdFindStop ' wdContinueではなく…
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchFuzzy = False
  .MatchWildcards = False
  Do
   .Execute
   If Not .Found Then Exit Do
   '
   Selection.HomeKey Unit:=wdLine, Extend:=wdMove
   Selection.MoveDown Unit:=wdLine, Extend:=wdExtend
   '
   Selection.Style = ActiveDocument.Styles("見出し 1")
   Selection.Collapse wdCollapseEnd
  Loop
 End With
End Sub


また、ヘルプでStyleを調べてみたら、
次のような例が出てきました。御参考までに。

Sub myStyle2()
 ' 次の使用例は、
 ' 作業中の文書の "第 " という語から始まる各段落に
 ' [見出し 1] スタイルを適用します。
 '
 For Each para In ActiveDocument.Paragraphs
  If para.Range.Words(1).Text = "第 " Then
    para.Style = ActiveDocument.Styles(wdStyleHeading1)
  End If
 Next para
End Sub
・ツリー全体表示

【323】複数の見出しの設定
質問  tootsie  - 05/8/16(火) 13:25 -

引用なし
パスワード
   ようやく猛暑も一段落している今日この頃です。
いつもお世話になります。

さっそくですが、以下のようなワードのマクロを作成するにはどのようにしたらよいでしょうか。

「◎」を検索し、その行に「見出し1」を設定する。(◎は文書中複数存在する)

以下のように、「マクロの記録」と「loop」を使って作ってみましたが、◎を検索したところで、作業が終わってしまいます。つらつら思うに、◎は見出し設定後も常に存在しつづけるので、true or faulse で判断するやり方ではだめでしょうか。

よい方法があればご指導ください。
よろしくお願いします。


以下、試しに作成したマクロ

Sub マクロ試作()

ここは蛇足です。

  'EEEEを削除する
  Dim tf As Boolean 'ブール型
  Selection.HomeKey Unit:=wdStory
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = "EEEE"
    .Replacement.Text = "^x"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = True
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
  '繰り返すのはここから
   tf = .Execute '検索実行:成功したらTRUE
   Do While tf = True 'tf = True 間、Do〜Loop間を繰り返す
  Selection.MoveDown Unit:=wdLine, Count:=2, Extend:=wdExtend
  Selection.EndKey Unit:=wdLine, Extend:=wdExtend
  Selection.Delete Unit:=wdCharacter, Count:=1
  '次を実行
      tf = .Execute
     Loop
    '========================
  End With
 
  '[BoxNo]を削除する
  Selection.HomeKey Unit:=wdStory
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = "[BoxNo]"
    .Replacement.Text = "^x"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
  '繰り返すのはここから
   tf = .Execute '検索実行:成功したらTRUE
   Do While tf = True 'tf = True 間、Do〜Loop間を繰り返す
  Selection.HomeKey Unit:=wdLine
  Selection.MoveDown Unit:=wdLine, Count:=5, Extend:=wdExtend
  Selection.Delete Unit:=wdCharacter, Count:=1
  '次を実行
      tf = .Execute
     Loop
    '========================
  End With

ここからが見出しの設定です。

  '見出し1を設定する
  Selection.HomeKey Unit:=wdStory
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = "◎"
    .Replacement.Text = "^x"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
'繰り返すのはここから
   tf = .Execute '検索実行:成功したらTRUE
   Do While tf = True 'tf = True 間、Do〜Loop間を繰り返す
  Selection.Style = ActiveDocument.Styles("見出し 1")
    '次を実行
      tf = .Execute
     Loop
    '========================
   End With
End Sub
・ツリー全体表示

【322】Re:見出しの設定や複数行の削除の方法
発言  tootsie  - 05/8/16(火) 13:09 -

引用なし
パスワード
   いただいたマクロをそのまま使ってみましたが、うまくいかないので、もう一度「マクロの記録」と「loop」を使って、それを追加していく形で作り直してみました。
うまくいかなかった原因は、よけいな場所に「Selection.Find.Execute」が入っているためだと判明。解決しました。

問題は「見出し」の設定ですが、こちらは、別の質問として、もう一度改めてお伺いしたいと考えております。

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

【321】Re:見出しの設定や複数行の削除の方法
お礼  tootsie  - 05/8/16(火) 12:20 -

引用なし
パスワード
   早速のご指導、ありがとうございます。
こちらで試してみます。

実は、「4. EEEE・・・」で、マクロの記録とloopを使って作ってみたのですが、うまくいかない場合があります。(EEEEが削除されないものが出てくる場合が、かなりあるのです)
どうしてそうなってしまうのか分からないのですが、いただいたマクロと比較しながら試行錯誤してみます。

また、お返事いたします。まずは取り急ぎお礼まで。
・ツリー全体表示

【320】フォントの上下位置について
質問  akki  - 05/8/16(火) 11:54 -

引用なし
パスワード
   文書内で文字位置が上がっている/下がっている文字を上付き/下付きの文字に変換するマクロを作成したいのですが、マクロの記録機能で整数範囲の位置の文字は変更することができました。

次に、小数点の範囲の文字、たとえば
font.position = 2.5
などの文字を変換したいのですが、できませんでした。
マイクロソフトのページを見るとこのコマンド(?)はread/write as Longと書いてあったのですが、これはやはり整数しか認識してくれないということでしょうか?
もしそうであれば、2.5pt等上にずれている文字を通常の上付き文字に変換する方法は他にあるのでしょうか。

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

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

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