Word VBA質問箱 IV

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

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


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

【673】Re:頁(目)および行(目)の取得
質問  あんぽんたん  - 10/2/17(水) 22:00 -

引用なし
パスワード
   るりさま

アドバイスありがとうございました。

WORDのVBA Project では問題なく動きました。


ただし、以下の操作でトラブルが発生しました。
アドバイスいただければ幸いです。

ExcelのVBA ProjectからWordを操作して

(定義したWorkbook).Sheet(i)Cells(m,n).value = Selection.Information(wdActiveEndPageNumber)
あるいは
(定義したWorkbook).Sheet(i)Cells(m,n).value = Selection.InformationwdFirstCharacterLineNumber)

として、ページ数あるいは行目を

取得してセルに入れようとすると

このコードで

  実行時エラー;"438"
  オブジェクトは、このプロパティまたはメソッドをサポートしていません

との警告が出ます。

このコードの前では、 (定義したWorkbook)の部分は難なくスルーします。

対応策をご教授願います。


なお、

> 参照設定を「参照不可」になっているものがないかを確認してみる。

参照不可 はありません。


> 参照設定を「参照不可」になっているものがないかを確認してみる。
> 名前つき定数を使用しないで直接数値を指定する。
>  wdActiveEndPageNumber     → 3
>  wdFirstCharacterLineNumber  → 10

この場合、表記法は、

MsgBox Selection.Information(3), vbInformation, "頁"

MsgBox Selection.Information(10), vbInformation, "行"

となるのでしょうか。

お尋ねします。


▼りる さん:
>おはようございます。
>
>>適当な選択位置での頁(目)および行(目)を取得
>>しようとしましたが、下記のような問題が発生しました。
>>解決策をお願いします。
>
>Word はどのように指定しているのかがわからないので、単純に文字位置で試してみました。
>
>Sub test()
>  '文字数はCharacters
>  Imax = ActiveDocument.Characters.Count
>  '適当な文字位置(乱数で取得)
>  Randomize Int(Now)
>  i = Int(Imax * Rnd + 1)
>  ActiveDocument.Characters(i).Select
>  'Word-VBA,Wd2003でエラーなし
>  MsgBox Selection.Information(wdActiveEndPageNumber), vbInformation, "頁"
>  MsgBox Selection.Information(wdFirstCharacterLineNumber), vbInformation, "行"
>End Sub
>
>適当な文書(複数ページ有)を開いて実行してみたら大丈夫でした。
>
>>解決法があれば教えてください。
>ワードVBAで実行できないのであれば、
> 参照設定を「参照不可」になっているものがないかを確認してみる。
> 名前つき定数を使用しないで直接数値を指定する。
>  wdActiveEndPageNumber     → 3
>  wdFirstCharacterLineNumber  → 10
・ツリー全体表示

【672】漢字あるいはカタカナからなる文字列の単語...
質問  初心者  - 10/2/11(木) 13:10 -

引用なし
パスワード
   お世話になります。

Word本文中の単語で

 その文字列全部が漢字
      全部が全角カタカナ
      全部が半角カタカナ
 のとき、その文字列を取得する
ケースで
 
 各項目を

 漢字列      Activedocument.words(i) = "[−-鶴]{1,}"
 全角カタカナ列  Activedocument.words(i) = "[ァ-ヾ]{1,}"
 半角カタカナ列  Activedocument.words(i) = "[ヲ-゚]{1,}"

のように定義し、

  Select Case Activedocument.words(i)
  Case"[−-鶴]{1,}","[ァ-ヾ]{1,}","[ヲ-゚]{1,}"
     '実行コード
  End Select

としましたが、対象文字列を拾ってくれません。

定義の仕方に問題があるのでしょうか。

教えていただければ幸いです。
・ツリー全体表示

【671】Re:頁(目)および行(目)の取得
お礼  あんぽんたん  - 10/2/11(木) 12:39 -

引用なし
パスワード
   るりさん

おはようございます。


勤務先(xpProffesional、Word2003)での
結果で質問さていただいた件です。

自宅のPC(xpHome Edd.、Word2000)では
すんなり実行できました。
ありがとうございます。

勤務先のPCは今後確認します。

>ワードVBAで実行できないのであれば、
> 参照設定を「参照不可」になっているものがないかを確認してみる。

もう少し具体的にご教示願います。


▼りる さん
>おはようございます。
>
>>適当な選択位置での頁(目)および行(目)を取得
>>しようとしましたが、下記のような問題が発生しました。
>>解決策をお願いします。
>
>Word はどのように指定しているのかがわからないので、単純に文字位置で試してみました。
>
>Sub test()
>  '文字数はCharacters
>  Imax = ActiveDocument.Characters.Count
>  '適当な文字位置(乱数で取得)
>  Randomize Int(Now)
>  i = Int(Imax * Rnd + 1)
>  ActiveDocument.Characters(i).Select
>  'Word-VBA,Wd2003でエラーなし
>  MsgBox Selection.Information(wdActiveEndPageNumber), vbInformation, "頁"
>  MsgBox Selection.Information(wdFirstCharacterLineNumber), vbInformation, "行"
>End Sub
>
>適当な文書(複数ページ有)を開いて実行してみたら大丈夫でした。
>
>>解決法があれば教えてください。
>ワードVBAで実行できないのであれば、
> 参照設定を「参照不可」になっているものがないかを確認してみる。
> 名前つき定数を使用しないで直接数値を指定する。
>  wdActiveEndPageNumber     → 3
>  wdFirstCharacterLineNumber  → 10
・ツリー全体表示

【670】Re:頁(目)および行(目)の取得
回答  りる  - 10/2/11(木) 9:16 -

引用なし
パスワード
   おはようございます。

>適当な選択位置での頁(目)および行(目)を取得
>しようとしましたが、下記のような問題が発生しました。
>解決策をお願いします。

Word はどのように指定しているのかがわからないので、単純に文字位置で試してみました。

Sub test()
  '文字数はCharacters
  Imax = ActiveDocument.Characters.Count
  '適当な文字位置(乱数で取得)
  Randomize Int(Now)
  i = Int(Imax * Rnd + 1)
  ActiveDocument.Characters(i).Select
  'Word-VBA,Wd2003でエラーなし
  MsgBox Selection.Information(wdActiveEndPageNumber), vbInformation, "頁"
  MsgBox Selection.Information(wdFirstCharacterLineNumber), vbInformation, "行"
End Sub

適当な文書(複数ページ有)を開いて実行してみたら大丈夫でした。

>解決法があれば教えてください。
ワードVBAで実行できないのであれば、
 参照設定を「参照不可」になっているものがないかを確認してみる。
 名前つき定数を使用しないで直接数値を指定する。
  wdActiveEndPageNumber     → 3
  wdFirstCharacterLineNumber  → 10
・ツリー全体表示

【669】頁(目)および行(目)の取得
質問  あんぽんたん  - 10/2/8(月) 21:39 -

引用なし
パスワード
   困っています。お願いします。

適当な選択位置での頁(目)および行(目)を取得
しようとしましたが、下記のような問題が発生しました。
解決策をお願いします。


実施例

ActiveDocument.word.count でWORD数を求め

適当な位置のWORDを選択

Activedocument.words(i).Select

その位置での頁(目)および行(目)を

'頁(目)
Selection.Information(wdActiveEndPageNumber)

行(目)
Selection.Information(wdFirstCharacterLineNumber)

とすると

コンパイルエラー 
dActiveEndPageNumber および wdFirstCharacterLineNumber が
変数として定義されていません

との警告がでます。

helpではこれらは、Information(Type)における Typeとして定義
されています。

解決法があれば教えてください。
・ツリー全体表示

【668】Re:タグを削除して、改行させるには
回答  ぶんた  - 10/1/7(木) 6:11 -

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

早速試してみました。
うまくいきました。

ご教授いただいたコードをいろいろ調べて応用したいと思います。

ありがとうございました。

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

【667】Re:タグを削除して、改行させるには
回答  りる  - 10/1/6(水) 20:29 -

引用なし
パスワード
   ぶんた さん、こんばんは。

>この件について自分で作ってみました。
>これで、ひとつのタグを消して改行させることができました。
>ただ、これを最後まで自動で続ける方法がわかりません。
>ご教授よろしくお願いします。

置き換えなので、ヘルプの「Replacement プロパティ」の使用例から引用してみました。
なお、"<BR>"は改行コードに置き換えたほうがよさそうなのでここは変更してあります。

Sub タグを消して改行()
  'A<BR>A<BR>A<BR>A を置き換えてテスト。
  With ActiveDocument.Range.Find
    .Text = "<BR>" '前
    .Replacement.Text = vbCr '改行に置き換える(改行コードを示す定数です)
    .Execute Replace:=wdReplaceAll, _
      Format:=True, MatchCase:=True, _
      MatchWholeWord:=True
  End With
End Sub

これでいかがでしょうか。
・ツリー全体表示

【666】Re:タグを削除して、改行させるには
質問  ぶんた  - 10/1/6(水) 11:18 -

引用なし
パスワード
   この件について自分で作ってみました。
(マクロを記録させて組み合わせたものです)

Sub タグを消して改行()
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = "<BR>"
    .Replacement.Text = ""
  End With
  Selection.Find.Execute
  Selection.TypeParagraph
  
End Sub

これで、ひとつのタグを消して改行させることができました。
ただ、これを最後まで自動で続ける方法がわかりません。
ご教授よろしくお願いします。
・ツリー全体表示

【665】タグを削除して、改行させるには
質問  ぶんた  - 10/1/3(日) 21:17 -

引用なし
パスワード
   はじめまして。ワードマクロ初心者です。
websiteのソースコードから、欲しい文章をコピペしたのですが、
HTMLのタグ(<BR>のようなもの)が入っているし、改行がされて
いないため、読みづらい状態です。
これらのタグを一つ一つ削除して改行していては日が暮れるので、
マクロでやってみたいのですが、ご指導お願いします。
マクロの勉強のため、できればワードの置換を使わずにマクロを
お教えいただければありがたいです。
よろしくお願いします。
・ツリー全体表示

【664】Re:ExcelとWordの連携でキーワードの頻出度...
回答  りる  - 10/1/3(日) 21:04 -

引用なし
パスワード
   weipuzhenfu さん、こんばんは。

>まず、Wordに文章
>   Excelに列A:番号
>         列B:キーワード
>         列C:出現回数
>があります。

>Wordの文章の単語が Excelのキーワードに
>該当すれば、Word文章中のその単語に識別のために
>何らかの書式設定(例えば、アンダーライン)を施し、
>かつ、Excelの列Cに頻出回数を累積してカウント
>する。

上記エクセルファイルの名前がLIST1.xls、リストのあるシートがSheet1、リストは1行目が見出しでこんなレイアウト。
 A    B     C
1    キー    カウント
2 1 Word
3 2 Excel
4 3 文章

ワード文書は質問投稿文をそのまま貼り付けてテストしました。

マクロはワードVBEに全部記述します。
Sub Main()
  Dim xlApp As Object, obj As Object, rr As Long, s1 As String
  'Excelの処理
  'ヘルプのCreateObjectからほぼそのまま転載
  Set xlApp = CreateObject("excel.application")
  'フォルダはdocファイルと同じところから開く。 ファイル名は LIST1.xls
  Set obj = xlApp.Workbooks.Open(ThisDocument.Path & "\LIST1.xls")
  rr = 1
  Do
   'B列
   rr = rr + 1
   s1 = obj.Worksheets("Sheet1").Cells(rr, 2).Value
   If s1 = "" Then Exit Do 'カラになったら終わる
   '結果はC列に入れる
   obj.Worksheets("Sheet1").Cells(rr, 3).Value = S1NN(s1)
  Loop
  'エクセルは終了せずに置いておく(そのままマクロは終了)
  xlApp.Visible = True
  Set obj = Nothing
  Set xlApp = Nothing  ' オブジェクトの参照を解放します。
End Sub
'////////////////////Wordの処理
Function S1NN(s1 As String) As Long
  '出現数をカウントするマクロ
  Dim tf As Boolean
  Dim NN As Long
  '文書の先頭に移動
  ActiveDocument.Range(Start:=0, End:=0).Select
  '検索条件設定→開始
  With Selection.Find
   .ClearFormatting
   .Text = s1
   .Replacement.Text = ""
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchByte = False
   .MatchAllWordForms = False
   .MatchSoundsLike = False
   .MatchWildcards = False
   .MatchFuzzy = True
   NN = 0 '検索を繰り返す
   Do
     tf = .Execute(Forward:=True)
     If Not tf = True Then Exit Do
     Selection.Range.HighlightColorIndex = wdYellow 'マーカーは黄色
     NN = NN + 1
   Loop
  End With
  '出現回数
  S1NN = NN
End Function

エクセルファイルが開いたままだと上書きできなくなります(読み取り専用)。
・ツリー全体表示

【663】ExcelとWordの連携でキーワードの頻出度を...
質問  weipuzhenfu  - 09/12/30(水) 18:49 -

引用なし
パスワード
   お世話になります。

まず、Wordに文章
   Excelに列A:番号
         列B:キーワード
         列C:出現回数
があります。

Wordの文章の単語が Excelのキーワードに
該当すれば、Word文章中のその単語に識別のために
何らかの書式設定(例えば、アンダーライン)を施し、
かつ、Excelの列Cに頻出回数を累積してカウント
する。

このような操作をVBAでできれば、文章中の重要度
の高いキーワードが半ば自動的に見つけられる。
しかも、摘出されていないキーワードの識別も容易に
なり、手動補正もできる。

上記のようなことにチャレンジしたいと思っていますが
可能性を含めて全く検討が付きません。

サジェスチョンをいただければ幸いです。

以上
・ツリー全体表示

【661】自動文章作成
質問  HIRO  - 09/12/10(木) 17:28 -

引用なし
パスワード
   教えていただきたく投稿いたしました。
環境はWinXP Word2000です。

Accessで作成したCSVファイルを読み込み、
文章を自動作成したいと考えてます。

フォームは下記のような感じです。
┌──────────────┐
│┌─────┐       │
││     │←(テキストボックス) │
││     │       │
││     │       │
│└─────┘      こ│←段組みしています。
│             こ│
│             か│
│             ら│
│             縦│
│             書│
│             き│
└──────────────┘
(テキストボックスと縦書き部分は段組みしています)


CSVファイルの内容
郵便番号、住所、氏名、文章
(項目名はデータに入れません)

郵便番号、住所、氏名はテキストボックス内に入力して、
文面は縦書きの部分に入力し、改ページをさせたいです。

例)
データ内容
111-1111 東京都○○ 山本太郎 元気ですか!
222-1111 東京都△△ 山下花子 久しぶり!

┌──────────────┐
│┌─────┐       │
││111-1111 │       │
││東京都○○│       │
││山本太郎 │       │
│└─────┘      元│
│             気│
│             で│
│             す│
│             か│
│             !│
│              │
└──────────────┘
改ページ

┌──────────────┐
│┌─────┐       │
││222-1111 │       │
││東京都△△│       │
││山下花子 │       │
│└─────┘      久│
│             し│
│             ぶ│
│             り│
│             !│
│              │
│              │
└──────────────┘

と動作させたいのです。


Selection.TypeText Text:="元気ですか!"

ActiveDocument.Shapes("テキストボックス").Select
Selection.TypeText Text:="111-1111"
Selection.TypeParagraph
Selection.TypeText Text:="東京都○○"
Selection.TypeParagraph
Selection.TypeText Text:="山本太郎"
などの処理は解るのですが、データを読み込み、
1件読み込んだら改ページして次の1件…、の
部分がさっぱり・・・。

よろしければヒントをいただきたいと思います。
よろしくお願いします。
・ツリー全体表示

【657】ページ全体の移動
質問  Weipu Zhenfu  - 09/10/18(日) 20:37 -

引用なし
パスワード
   お世話になります。

下記の件でお尋ねします。


特定ページの先頭位置あるいは先頭文字
      最後位置あるいは最後文字  の取得

あるいは特定ページのページ番号の 取得

は可能でしょうか。


さらにおそらくは上記を情報を用いることになると

思いますが、あるページのページ全体を他のページ

へ移動させることが可能でしょうか。


換言すれば、WORD VBAで EXCEL VBA

のようにページ管理が可能でしょうか。
・ツリー全体表示

【656】Re:文の最後はどのようにして見つけるの?
お礼  やっちゃん E-MAIL  - 09/10/18(日) 5:33 -

引用なし
パスワード
   りる様 返事が遅れまして申し訳ありません。
回答がなかなかつかなかったので、少しあきらめて何か別の方法を検討していました。本来ワードのVBAには能力が無いので良い方法は見つからないのですが。
 さて、提案いただいた方法でプログラムを改善したいと思っています。
でも残念ながら、提案いただいたプログラムの解析・意味を理解することが先決のような状態です。わからないことがありましたら、再度質問させてください。
 先ずはお礼まで。本当にありがとうございました。
・ツリー全体表示

【655】Re:AutoExit内でCommandbar制御がしたい
回答  りる  - 09/10/17(土) 10:26 -

引用なし
パスワード
   めそ さん、おはようございます。

>AutoCloseでは上記の問題があるため、可能であれば
>AutoExit内で制御できる事が望ましいのですが、どうぞご教示をお願いいたします。
AutoExitというイベントは聞いたことがないので、AutoClose内で保存が必要かどうかをチェックしてみてはいかがでしょうか。


  With ThisDocument
   '未保存かどうかチェックします
   If .Saved = False Then
     If MsgBox("保存しますか?", vbYesNo) = vbYes Then
      .Save '上書きします
     Else
      .Saved = True '上書きしないので保存したことにします
     End If
   End If
  End With
  '保存処理が終わったので以下Close時に必要な処理を書きます
  MsgBox "Close", vbInformation

End Sub

単独でdocを開いていることを前提にしていますので、複数docを開いて、
docのcloseではなくWordをQuitする可能性があるのならば、
全部のブックに対して保存しているかどうかをチェックする必要があります。
・ツリー全体表示

【654】AutoExit内でCommandbar制御がしたい
質問  めそ  - 09/10/16(金) 16:41 -

引用なし
パスワード
   はじめまして。
お分かりの方がいらっしゃいましたらご教示をお願いいたします。

文書をテンプレート化する為、AutoOpenにおいてCommandbarの
表示制御を行っています。

1.現在表示中の全てのCommandbarをVisible=Falseとする。
2.ユーザー独自のCommandbarをVisible=Trueにする。

ただしこの状態で文書を終了してしまうと、
次の別のWord文書を開いた際に、Commandbarが全て非表示の状態になってしまいます。

その為、1の前に一旦Commandbarの情報を退避(ファイルまたはバッファに保持)し、
AutoCloseまたはAutoExitにて戻すVBAを組みました。(以下、参考)

+---------------------------------------------------+
Sub AutoOpen()

  On Error Resume Next

  ' Commandbar情報をグローバル変数にバックアップ
  Dim i As Integer
  For i = 1 To ThisDocument.CommandBars.Count
    ReDim Preserve pub_Cmdbar(i - 1)
    pub_Cmdbar(i - 1) = ThisDocument.CommandBars(i).Visible
  Next i

End Sub
-----------------------------------------------------
Sub AutoClose()

  On Error Resume Next

  ' ツールバーを起動前の表示設定情報に戻す
  Dim i As Integer
  For i = 1 To CommandBars.Count
    ThisDocument.CommandBars(i).Visible = pub_Cmdbar(i - 1)
  Next i

End Sub
+---------------------------------------------------+

この方法だと上手くいくのですが、
文書に変更があった場合、AutoCloseだと保存確認メッセージが
表示され、その前に上記が実行されてしまうため、
メッセージをキャンセルすると、Commandbarがそのまま復元されてしまいます。
この状態は本来用途からすると望ましくありません。

そこでAutoCloseからAutoExitに変更をしてみましたが、
AutoExitでは上手く動作しません。(Commandbarが復元されない)

AutoCloseでは上記の問題があるため、可能であれば
AutoExit内で制御できる事が望ましいのですが、どうぞご教示をお願いいたします。
・ツリー全体表示

【653】Re:文の最後はどのようにして見つけるの?
発言  りる  - 09/10/11(日) 17:51 -

引用なし
パスワード
   追加。

>単ページ限定

>   Set objR = .Panes(1).Pages(1).Rectangles.Item(1)
Pagesの引数(ページ番号)を最終ページにしたら複数ページにも対応できるはずです。
・ツリー全体表示

【652】Re:文の最後はどのようにして見つけるの?
発言  りる  - 09/10/11(日) 16:16 -

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

>ワードのマクロは経験があまりなく、エクセル感覚で作成していますのでわかりにくいかもしれませんが。
文の最後はDocumentのEndで取得できますが、エクセル感覚で行くならLinesを使用したほうが感覚的につかみやすいかと思い、印刷ビュー(と単ページ限定)ですが、試してみました。

Sub Test()
  Dim tp, objR As Rectangle, LL As Long, Lmax As Long
  '表示→印刷レイアウト
  With Application.ActiveWindow
   tp = .View.Type '元のビュー
   If tp <> wdPrintView Then .View.Type = wdPrintView
   Set objR = .Panes(1).Pages(1).Rectangles.Item(1)
  End With
  '
  Lmax = objR.Lines.Count
  '下からループして、改行コードではないところを探す
  For LL = Lmax To 1 Step -1
   With objR.Lines.Item(LL).Range
     If Len(.Text) > 1 Then '改行のみの行以外を探す
      .Select '行選択
      Selection.Collapse Direction:=wdCollapseStart '選択解除
      Exit For
     End If
   End With
  Next
  '戻す
  With Application.ActiveWindow
   If tp <> .View.Type Then .View.Type = tp '元のビュー
  End With
End Sub
・ツリー全体表示

【651】文の最後はどのようにして見つけるの?
質問  やっちゃん E-MAIL  - 09/10/2(金) 14:49 -

引用なし
パスワード
   一塊の文(中には空白行{改行だけの行}も含む)があって、其の先頭行に
カーソルを合わせておき、マクロでカーソルを下げてきて、空白行が5つ続けば、
そこで其のデータの文の最後であると判断し、カーソルを元の位置まで戻させる、
させるマクロで作ろうとしました。以下のように作りましたら、空白行が5つある
ときはうまくいくのですが、一塊の文によっては5つも空白がなく、それ以降になんら文も改行もない場合、うまく作動しません。どのようにしたら良いのかお教えください。
ワードのマクロは経験があまりなく、エクセル感覚で作成していますのでわかりにくいかもしれませんが。

 Selection.HomeKey ' Cursorを行頭へ
 Br = 0 ' ブランクの数
 Cr = 0 ' 先頭よりの行数
1 A = Selection.Text
 If Asc(A) = 13 Then ' 空白行か?
  Br = Br + 1
  If Br >= 5 Then ' 改行の数が5ならDataの最終とみなす
   GoTo 2
  End If
 Else
  Br = 0
  Dr = Cr ' 最終の文字のある行の先頭からの行数
 End If
 Selection.MoveDown Unit:=wdLine, Count:=1
 Selection.HomeKey ' Cursorを行頭へ
 Cr = Cr + 1
 GoTo 1
2 Selection.MoveUp Unit:=wdLine, Count:=Cr 'cursorをCr分上に移動
                     (元の位置にカーソルを戻す)

データ例
sdfkjf;d;kじゃs
dkkdkdkdk
(CR)
dskふぁdskf
dkだs       ------ここまでが必要なデータ
(CR) 
(CR)
(CR)
(CR)
(CR)         ------(CR)が5つあれば処理は出来るが3なら
               うまくいかない
・ツリー全体表示

【650】Re:コンボボックスのRowSourceの利用
お礼  hikka  - 09/9/4(金) 0:09 -

引用なし
パスワード
   りるさん こんにちわ
回答goodです。
理想どおりとなりました。
いろいろ応用できそうです。
ありがとうございました☆
・ツリー全体表示

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