• 締切済み

Word のVBAについて初心者なのですが、質問があります。

Word のVBAについて初心者なのですが、質問があります。 ワード文書内の表について、カーソルのある位置の行番号や列番号を取得する方法は Informationを使用して取得することができるのはわかったのですが、 文書内にある、複数の表について、行番号や列番号のように、 カーソル位置の表番号って取得することができるのでしょうか? 文書内の複数の表の総数をActiveDocument.Tables.Countで数えることができるらしい というのはネットで調べてわかったのですが、現在選択されている(カーソル位置)表が 文章内の何番目の表なのかというのができるのかどうか・・・・。 きっとInformationのように一つのコードではなくて、いろいろ組み合わせて 数えるのではないかと推測しているのですが・・・・。 すみません、誰かわかる方がいらっしゃいましたら教えてください。

noname#116465
noname#116465

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

#1です。 ブックマークはその名の通り「しおり」です。 他のOfficeアプリケーションでも使います。 ブックマークの説明 http://www.beagle-hc.com/It_program_word0/Word1.html http://msdn.microsoft.com/ja-jp/library/aa288619%28VS.71%29.aspx http://support.microsoft.com/kb/182305/ja (上記はMacのWordですが内容はそのまま使えます) 質問が、 >カーソル位置の表番号って取得することができるのでしょうか? >文書内の複数の表の総数をActiveDocument.Tables.Countで >数えることができるらしい という条件を満たしたものであればということで、 質問のご要望に沿ってアクティブになっている表の 位置を求めるコードを提示した、という次第です。 それ以上のことはしていません。 オブジェクトが多いのですが、特に難しいという コードではなく、ごく単純なコードですから、 ごゆっくりお茶でも飲みながら眺めてください。 それと、 >あと、一番最後のSelectでTbkを選んで、Deleteする操作は、 >MsgBoxと何か関係があるのですか? これは、まずMsgBoxで何を表示しようとしているのか 見てください。「表は " & j & "番目"」の中の 「j」です。「j」はどこで取得していますか。 Selectして、DeleteしているのTbkと名づけたしおりです。 コードの終わりにいらないものは破棄するという プログラミングの作法に則ったものです。この 意味はプログラミングの中でいろいろな ことに遭遇すると自覚するようになります。 したがって何の関係もありません。 以上です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

ご質問では「カーソルのある位置の行番号や列番号」と「カーソル位置の表番号」を取得するということでしょうか?まあ、こんな所でしょうか。私のWordのVBAのコードが気に入らない人もいるかもしれませんが……。 '//ThisDocument に貼り付けてください。 Sub TableInfo() 'ネストされた表は、情報が出ません。 Dim sTbl As Table Dim Tbls As Tables Dim i As Long, col As Long, rw As Long  On Error Resume Next  Set sTbl = Selection.Tables(1)  On Error GoTo 0  If sTbl Is Nothing Then MsgBox "表がないか、表を選択していません。", vbExclamation: Exit Sub  If sTbl.NestingLevel > 1 Then MsgBox "ネストされた表は、表示できません。", vbExclamation: Exit Sub  Set Tbls = ActiveDocument.Tables  For i = 1 To Tbls.Count   If sTbl.Range.Start = Tbls.Item(i).Range.Start Then    col = sTbl.Range.Cells(1).Column.Index    rw = sTbl.Range.Cells(1).Row.Index    MsgBox "現在は、" & i & "番目の表で、" & rw & "行目の " & col & " 列目のセルを指しています。"   End If  Next  Set sTbl = Nothing  Set Tbls = Nothing End Sub

noname#116465
質問者

お礼

返事がおそくなり申し訳ございません。 表番号の取得方法だけでなく、一緒に行番号、列番号の取得もできるマクロを 教えて頂けるとは思ってもいなかったので、うれしいです。 ただ、VBAの初心者のため、解読に少し時間がかかりそうですが、 試してみます。解読中にわからないことがあったらまた、質問します。 ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

どこかのサイトで見かけたのですが、 どこか忘れました。以下のような 感じです。 Sub GetSelectNumber() Dim i As Integer Dim j As Integer Dim tbl As Table Selection.Bookmarks.Add ("Tbk") For i = 1 To ActiveDocument.Tables.Count Set tbl = ActiveDocument.Tables(i) tbl.Select If Selection.Bookmarks.Exists("Tbk") Then j = i Exit For End If Next i ActiveDocument.Bookmarks("Tbk").Select ActiveDocument.Bookmarks("Tbk").Delete MsgBox "選択されている表は " & j & "番目" End Sub

noname#116465
質問者

お礼

返事が遅くなり申し訳ございません。 Bookmarksというコードがあるのをはじめて知りました・・・。 Bookmarksというのは、VBAのヘルプを見ても いまいち使い方がよくわからなかったのですが、 何か対象物を置いて、その対象物をチェックするということですか? あと、一番最後のSelectでTbkを選んで、Deleteする操作は、 MsgBoxと何か関係があるのですか? ん~~~~、Tbkという変数をAddってことは、 ブックマークに追加しているということでしょうか? 追加してそのブックマークを表の変わりに数えているということですかね? すみません、考えてはいるんですが、なんとなくという感覚でしかわからなくて。。。。

関連するQ&A

  • ワードのVBAで

    お世話になります。X = ActiveDocument.Tables(1).Cell(1, 2) のコードでワードの表から値を取得するとテキストの最後に改行マーク「・」が付いてきます。テキストだけ取得する方法をお教えください。 宜しくお願い致します。

  • WORD VBA 表の複数行選択を教えてください

    検索をしてみたのですが、うまく見つけられません。 ご存知の方がいらっしゃいましたら教えてください。 ActiveDocument.Tables(1).Rows(1).Select これですと文書上1つ目の表の1行目が選択されますが、 たとえば1~3行目を選択したい場合はどうすればいいのでしょうか? よろしくお願いいたします。

  • エクセルVBAでワードの文字を検索して置換えたい

    エクセル置換表を基に、開いてあるワードの文書内を検索して、該当の旧番号があれば、新番号に置換えるVBAのプログラムを 教えていただけませんか。 また、参考になる書籍等があれば教えていただけませんか。  【実施内容詳細】 エクセル置換表を基に、開いてあるワードの文書内(ヘッダー、フッター含)を検索して、該当の旧番号があれば、新番号に置換える。 使用ソフト ワード エクセル 2003 使用ファイル名  A.doc B.xls ステップ1 ワードの文書内に旧番号A1がないか検索して、A1があれば、新番号B1に置き換える。 ステップ2 ワードの文書内に旧番号A2がないか検索して、A2があれば、新番号B2に置き換える。 ステップ3 エクセルA列の最後(空欄)まで実施して終了する。 エクセル置換表      A列  B列     旧番号 新番号  行2  A1    B1  行3  A2    B2  以下同様   追記: マクロを使用したことはありませんので事前設定方法も教えていただけませんか。 

  • WORD2002文書保存について

    最近、ワード2002を使い始めました。 早速ですが、質問です。 まず、2頁にわたるワードの文書を作成し、 2頁目の最終行で保存します。 そして、一旦そのファイルを閉じ、 再度、そのファイルを開きます。 その時のカーソル位置が文書の最初の行になります。 以前のバージョンだと、保存した位置にカーソル位置が 来ていたのですが・・・ どこかにその機能を設定する所があるのでしょうか? ワードのバグなのでしょうか? わかる方、教えてください。 宜しくお願い致します。

  • ワード VBA

    ワードのマクロについて教えてください。 以下のようなマクロをボタンに登録しています。 Sub Macro10() Dim myReg As Object Dim st As String Dim match As Variant Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "\x0d\x0d(|$)" myReg.Global = True st = ActiveDocument.Range.Text ActiveDocument.Range(1, 1).Select For Each match In myReg.Execute(st) With Selection .Find.Text = match.Value .Find.Replacement.Text = vbCr .Find.Execute , , , , , , , , , , wdReplaceAll End With Next st = ActiveDocument.Range.Text If myReg.Test(st) Then _ ActiveDocument.Range.Text = myReg.Replace(st, "") Set myReg = Nothing End Sub ここで教えていただきたいのは,上記のマクロを実行するためにボタンを押した際,実行前にカーソルが置かれていたのと同一の場所に実行後のカーソルを戻す方法です。(ちなにみ上記のマクロを実行する際にカーソルが置かれているのは,空白行ではない行の先頭です。※処理とは関係ないかもしれませんが,念のために。) そのような処理を行うには,上記のマクロにどのような記述を追加すればよいのでしょうか。 どなたかご教示いただければと思います。 どうぞよろしくお願いいたします。

  • Word版VBで表の任意の箇所を取得する(Cellメソッド)

    Visual Basic でワードの表を操作する際の方法をお伺いします。 通常は、Cellメソッドを利用して、  ActiveDocument.Tables(1).Cell(2,3) のように、Cellメソッドに行・列を引数として与えますが、セルが結合されている場合に引数はどのように指定するのでしょうか。 会社のPCだと結合されたセルは飛ばして列数を数えているようでしたが、自分のPCだと結合されたセルも数えています。結合されている(他に併合された)セルの行・列を指定するとエラーがでます。 Wordのバージョンによっても違うのでしょうか。あるいはTableオブジェクトのプロパティか何かを指定することで、結合されたセルを数えるかどうかを指定できるのでしょうか。

  • Wordでの質問(初歩的です)

    Wordで、例えば6行の表を作成し、それぞれ文字を入力したとします。 1.3.5行目の文字列の配置を縦横共中央揃えにしたい場合、まず1行目を縦横中央揃えにし、あとはF4キーを使うしかないのでしょうか? Ctrlキーを使って1.3.5行目を一度に操作しようとしてもできませんよね? 文字のフォントなどはCtrlキーを使い複数個所を選択して、一度に操作できるので、なぜ文字列の位置は変更できないのかがナゾです。 どういう場合にCerlキーが使え、どういう場合に使えないのでしょうか?

  • Word文書の保存方法について

    Word文書を開いたときに、前回保存したときの状態(カーソルの位置)で開けるようにする方法があれば教えてください。 ちなみに、Excel表の場合は、前回保存したときのカーソルの位置で開けるのですが・・・

  • Word2003で表のタイトル内に連番を入れる

    いつもお世話になっています。 Word2003についての質問です。 表を使って社外向けの文書のフォーマットを作成しています。  ----------------- |               | 文書番号 | |    タイトル      | 日付    | |               | 発行元  |  ----------------- |                        | |      本文               | |                        | |                        |  ----------------- ここで、設定したい内容は以下の通りです。 (1)本文が複数ページに渡る際、2ページ目以降にもタイトルの行を  表示させたい (2)タイトルの文書番号は「100-1」「100-2」のように表示したい  →「文書番号-ページ番号」という形式 (1)については、[表のプロパティ]-[行]-[各ページにタイトル行を 表示する]でタイトル行の設定を行いましたが、(2)の設定方法が 分かりません。 どなたかお分かりになる方がいらっしゃいましたら、お教えいただけ ませんでしょうか。 どうぞよろしくお願いいたします。

  • Word2003の表の行数を取得するには

    お世話になっております。 表の行を複数選択された場合、VBA等でその行の番号を所得する事は出来るでしょうか。 たとえば[罫線]→[挿入]→[表]を選択し、 5行*1列の表を作成して、1行目と3行目と5行目を選択している場合、1と3と5の数字をVBAで取得したいのです。 出来ない場合は出来ないと回答頂けると助かります。 よろしくお願いします。

専門家に質問してみよう