Word VBA質問箱 IV

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

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


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

【346】Re:あるTableオブジェクトの直近の見出しを...
回答  H. C. Shinopy  - 05/9/17(土) 23:08 -

引用なし
パスワード
   取り敢えず、回答させて頂きます。

誠に臭い手段ですが、
カーソルの移動によって[見出し3]の文字列を取得したら、
どうでしょうか?
表の中を処理した後で、カーソル移動で[見出し3]を取り込むのです。

Sub myTableAndHeading3()
 Dim myTable As Table
 '
 Rem 表ごとの処理
 For Each myTable In ActiveDocument.Tables
  Rem ここで、表の中の処理をしておく。
  '
  Rem 見出しの処理
  myTable.Select ' 表を選択状態にする。
  Selection.MoveUp Unit:=wdLine, Count:=1 ' カーソルを1行上に移動する。
  Selection.EndKey Unit:=wdLine, Extend:=wdExtend ' 移動先の行を選択する。
  '
  If Selection.Range.Style = "見出し 3" Then
   Rem 見出し3の処理
   MsgBox "見出し 3:" & Selection.Range.Text ' 見出し3の文字列を表示する。
  Else
   MsgBox "Untitled!"
  End If
 Next ' myTable
 '
 Rem 後処理
 Selection.HomeKey Unit:=wdStory ' カーソルを文書の先頭に移動する。
End Sub ' myTableAndHeading3
・ツリー全体表示

【344】Re:フォルダー内のテキストファイルを連結...
回答  H. C. Shinopy  - 05/9/16(金) 23:58 -

引用なし
パスワード
   このごろは、朝夕の気温が下がってきました。さて、

「テキストデータの連結」ということですが、
Word文書上でファイルの挿入の操作をマクロですると解釈して、話を進めます。

ダイアログボックスでファイルを選び、
Word文書上に挿入するマクロが既にありますので、
これにファイル操作の処理を継ぎ足して、
載せておきます。

いきなりファイルの削除をお考えのようですが、
ファイル名の変更で処理するようにしています。

問題がないのであれば、Remを付け替えれば、
ファイル削除に変更できるようにしましたが、
このマクロを実行する前に、ファイルのバックアップをして下さい。

Sub myTxtInsert()
 Rem テキストファイルの挿入
 Dim myDlgPick As FileDialog
 Dim mySelectedItem As Variant
 Dim myWord As Word.Application
 '
 Dim myFso As Variant
 Dim myFile As Variant
 Dim myNewFile As String
 '
 ' 前処理
 If Documents.Count >= 2 Then
  MsgBox "文書を閉じて下さい。"
  Exit Sub
 End If
 If Documents.Count = 1 Then
  If ActiveDocument.Characters.Count > 1 Then
   MsgBox "文書を閉じて下さい。"
   Exit Sub
  Else
   If ActiveDocument.Words(1).Text <> vbCr Then
    MsgBox "文書を閉じて下さい。"
    Exit Sub
   Else
    ActiveDocument.Close
   End If
  End If
 End If
 '
 ' ファイルの指定
 Set myDlgPick = Application.FileDialog(msoFileDialogFilePicker)
 With myDlgPick
  .AllowMultiSelect = True
  .InitialFileName = "C:\Documents and Settings\User\My Documents\Zzz"
  .Filters.Add "テキストファイル", "*.txt", 1
  If .Show = 0 Then
   Rem [キャンセル]
   Set myDlgPick = Nothing
   Set myWord = Nothing
   Application.Documents.Add
   Exit Sub
  End If
 End With
 '
 ' ファイルの挿入
 Set myFso = CreateObject("Scripting.FileSystemObject")
 Set myWord = GetObject(, "Word.Application")
 Application.Documents.Add
 '
 For Each mySelectedItem In myDlgPick.SelectedItems
  With Selection
   .HomeKey unit:=wdStory, Extend:=wdMove
   .InsertFile FileName:=mySelectedItem, Range:="", ConfirmConversions:=False, _
    Link:=False, Attachment:=False
   .InsertBreak Type:=wdPageBreak ' 改ページ
   '
   Set myFile = myFso.GetFile(mySelectedItem)
   Rem *----*----*
   Rem myNewFile = myFso.GetFileName(mySelectedItem)
   Rem myFso.DeleteFile myNewFile ' ファイル削除
   Rem *----*----*
   myNewFile = "Zzz" & myFso.GetFileName(mySelectedItem)
   myFile.Name = myNewFile ' ファイル名を「Zzz〜」に変更
   Rem *----*----*
  End With
 Next mySelectedItem
 '
 ' 後処理
 Set myDlgPick = Nothing
 Set myWord = Nothing
 Set myFso = Nothing
 Set myFile = Nothing
End Sub ' myTxtInsert
・ツリー全体表示

【343】フォルダー内のテキストファイルを連結する
質問  tootsie  - 05/9/16(金) 18:11 -

引用なし
パスワード
   関東地方はようやく秋の気配で熱帯夜から解放されそうです。

さて、単刀直入ですが、

フォルダーの中にある複数のテキストデータを連結してワードの画面に表示するというワードマクロを作ることは可能でしょうか。

たとえば、
パソコンのCドライブにある「C:\Documents and Settings\monkey\デスクトップ」内の「作業ファイル」という名前のフォルダーにある複数のテキストファイル(テキストファイル名は位の定まらないランダムな数字で、012.txt、053987.txtなど)をすべて連結して、ワードの画面に表示させる。その後で作業ファイル内のテキストデータを消去する。
というやり方です。
ちなみに、パソコンはDELLでCドライブはPC本体です。

よろしくご教示ください。
・ツリー全体表示

【342】あるTableオブジェクトの直近の見出しを取...
質問  日比野桜子  - 05/9/16(金) 0:49 -

引用なし
パスワード
   Wordドキュメント内の表オブジェクトの内容を、Excelに出力するマクロを作成しています。
Tablesコレクションを順に処理する方法で実現させていますが、この際、カレントTableオブジェクトが属する段落の見出しを取得するにはどのようにすればよいでしょうか。

例)Table-1に注目している場合、"1.1.1 見出し3"という文字列を取得したい。

 1. 見出し1
  1.1 見出し2
  1.1.1 見出し3
   [ Table-1 ]
   [ Table-2 ]
  1.1.2 ....
   [ Table-3 ]
  1.2 ....

なにぶん超初心者なので五里霧中です。
お力添えいただければ幸いです。
なお、当方Word2000を使用しています。
・ツリー全体表示

【340】Re:ルビを振ったときの悲しい現象
発言  Jaka  - 05/9/13(火) 16:57 -

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

どういう状況なのか良く解ってませんが、
ルビの配置が「左揃え」になっているだけではないでしょうか?
中央揃え、均等割付を選んだらどうなるのでしょうか?
by97
・ツリー全体表示

【339】ルビを振ったときの悲しい現象
質問  roal  - 05/9/9(金) 20:17 -

引用なし
パスワード
   こんにちは。
Wordでルビを振ったときに現れる現象につきまして、どなたか助言をいただけないでしょうか。
ルビを振るためにダイアログボックスを開き、「ok」をクリックして確定すると、ルビは振られるのですが、同時にルビの振られた語句が2つに増えてしまいます。
つまり、ルビの振られた単語の後ろにもう一つルビの振られていない単語が続くのです。
どなたか、この現象の解決方法をご存じの方、ご教授ください。
よろしくお願いします。
・ツリー全体表示

【338】おそらく解決していると思いますが、、、。
回答  一般ユーザー  - 05/9/9(金) 2:17 -

引用なし
パスワード
   4月の書込なのでおそらく解決していると思いますが、、、。
ツールバーに「チェック/コメント」というのがあります。
それを表示して表示内容を「最終版」して印刷してみてはいかがでしょうか?
ちなみに「最終版(変更箇所/コメントの表示)」の状態ですとご質問のFormatで印刷されます。
・ツリー全体表示

【337】Re:クリップボードについて
お礼  初心者  - 05/9/7(水) 15:45 -

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

【336】Re:クリップボードについて
回答  ちくたく  - 05/9/7(水) 14:52 -

引用なし
パスワード
   こんにちは。
昔、懐かしい感じがしますね。このショートカット。
さて、Ctrl+Insertは、コピーです。
貼り付けは、Shift+Insertです。
最近は、Ctrl+Vがよくあるでしょうね。

▼初心者 さん:
>ワードにダイヤログボックスのコピーが貼り付けできません。
>やり方)
>1).Alt+PRINTでダイヤログのコピーをして、
>2).Ctrl+Insretでコピーしたダイヤログを貼り付ける
>以上の方法で、やってみたのですが、貼り付けできませんでした。
>どこを設定すれば、貼り付けることができるのでしょうか?
・ツリー全体表示

【335】クリップボードについて
質問  初心者  - 05/9/7(水) 13:24 -

引用なし
パスワード
   ワードにダイヤログボックスのコピーが貼り付けできません。
やり方)
1).Alt+PRINTでダイヤログのコピーをして、
2).Ctrl+Insretでコピーしたダイヤログを貼り付ける
以上の方法で、やってみたのですが、貼り付けできませんでした。
どこを設定すれば、貼り付けることができるのでしょうか?
・ツリー全体表示

【334】文字確定前のマクロ実行に関して。
質問  99  - 05/9/5(月) 20:24 -

引用なし
パスワード
   http://pc8.2ch.net/test/read.cgi/tech/1122001458/99-100#tag99

2chに投稿しましたが、お返事いただけず、
より専門的なこちらで質問させていただきます。

ご回答は、こちらで賜りますようお願い申し上げます。

レスがあったらメールほしい設定にしました。


問題を端的にいうと:
VBAである動作(例えば選択文字列の拡張等)をさせたい。
しかし、入力された文字列が確定される前の段階、
即ち文字列が変換中は、上記のVBA動作を無効にしたい。
私は、WM_IME_Startcompositionを監視して、
上記の目的を達成しようと思っているのですが、
いまだ、いたりません。
他にも方法あるのではないかと、わらにもすがる思いです。
・ツリー全体表示

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

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