ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

 初心者です。
エクセルVBAでWordのプロパティ値を取得するためBuiltinDocumentProperties("Number of Pages")を使っているのですが、なぜかページ数が正しく表示されません。
 例えば6ページある文書の総ページ数が2というふうに全然関係ない数字が返ってきます。念のためマクロ後にプロパティ値を再確認すると、表示された2に変わってしまっているんです。もちろん実際の文書に存在するページ枚数は変わっていません。
 文書自体を開いて上書きしてやると、ページ数の数字は戻るのですが、マクロを実行すると同じ結果になります。どうしてでしょうか?
 EXCEL2000です。詳しい方お願いします。



 

このQ&Aに関連する最新のQ&A

A 回答 (11件中11~11件)

こんにちは。

KenKen_SP です。

ページ全体の読み込みが完了しないうちに、コードが実行されているとか?

lngPageCount = ActiveDocument.ComputeStatistics( _
  Statistic:=wdStatisticPages, _
  IncludeFootnotesAndEndnotes:=True)
MsgBox lngPageCount

だと、どうですか?

以下はオマケ(というより蛇足)の参考ですが、、、

 ・IncludeFootnotesAndEndnotes:=False とすると脚注部分を含まない
 ・統計情報の取得は文書の変更とみなされる
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qワードを開かずにページ数だけ調べたい!

宜しくお願いします。

ワードのファイルを開かずにページ数だけ調べることは出来るでしょうか?

アンケートを1000通程送り返送が着ているのですが、
人によってはかいたところだけ送ってくる人、
アンケートに複数の人が書いて、ページを増やして回答してくる人などがいます。

一つ一つ開いて、調べるのも1000通になると難しく・・・。

ファイル一覧が表示されるウィンドウでも、”詳細表示”にしても
ページ数までは表示されず。。。

知恵を貸してください

宜しくお願いします

Aベストアンサー

こんばんは。

最初に、BuiltInDocumentProperties は、一旦、開いて、開いたページを、Repaginate しないと取れません。#1の方の引用先のコードは、小さなファイルは可能ですが、大きなファイルでは正しいページが出てこないはずです。

私の考えたものです。

Sub GetWordProperties()
  Dim wdApp As Word.Application
  Dim wdDoc As Word.Document
  Dim Fname As Variant
  Dim Fnames As Object
  Dim msg As String
  Dim wdCnt As Long, wdtitle As String
 
  With Application.FileDialog(msoFileDialogOpen)
   .Show
  Set Fnames = .SelectedItems
  If Fnames.Count = 0 Then
   Exit Sub
  Exit Sub
  End If
  End With
  For Each Fname In Fnames
  Set wdDoc = Application.Documents.Open(Fname, , True)
  With wdDoc
   .Repaginate
   wdtitle = .BuiltInDocumentProperties(wdPropertyTitle)
   wdCnt = .BuiltInDocumentProperties(wdPropertyPages)
   .Close False
  End With
  Set wdDoc = Nothing
  msg = msg & vbCrLf & wdtitle & " 総ページ数: " & wdCnt
  Next Fname
  MsgBox msg
End Sub


開かないで、ページ数などの情報を取れる、Dsofile という、タイプライブラリを使う方法があるのですが、ひとつ欠陥があります。一旦、印刷していないものは出来ません。

http://support.microsoft.com/kb/224351/ja
Visual Basic .NET 2003 および Visual Basic .NET 2002 で Dsofile.dll を使用すると Office がなくても Office ドキュメントのプロパティを編集できる

それから、ファイル-ファイルを開くで、プロパティ表示をしたらどうでしょうか。人が一旦作って保存したものなら、プロパティが出てくるはずですから、1,000ぐらいなら、何とかなるかもしれません。ただ、すべてのDocument にプロパティが見れるとは限りません。

こんばんは。

最初に、BuiltInDocumentProperties は、一旦、開いて、開いたページを、Repaginate しないと取れません。#1の方の引用先のコードは、小さなファイルは可能ですが、大きなファイルでは正しいページが出てこないはずです。

私の考えたものです。

Sub GetWordProperties()
  Dim wdApp As Word.Application
  Dim wdDoc As Word.Document
  Dim Fname As Variant
  Dim Fnames As Object
  Dim msg As String
  Dim wdCnt As Long, wdtitle As String
 
  With Application....続きを読む

Q複数のワードファイルで合計ページ数を知りたい

あるフォルダに数十個というWordファイルがあり、その
ファイル一つ一つを開いてページ数を調べたりファイル1つ1つの
プロパティを調べてページ数を加えていくのは非常に手間なので
できれば「このフォルダにあるWordファイルの総ページ数を知りたい」
という要求に対して一発で解決したいと思っています。
各Wordファイルのプロパティを一覧化してくれたり、
Wordファイル分ループで回ってそれらを足しこんでくれる
ツールなどは無いでしょうか。
Wordはバージョン2003でOSはXP SP2を使っています。

Aベストアンサー

ツールは知りません。
質問者さんの立場と要求者との関係もわかりません。
もし質問者さんがご自分でスクリプトを書く覚悟があるのなら下記の VBScript をお試し下さい。

空のテキストファイルに以下のコードをコピペして保存し、そのテキストファイルの拡張子を vbs に変更してからファイルをダブルクリックしてみてください。
フォルダ選択ダイアログが表示され、Word ファイルが入っているフォルダを選択して [OK] をクリックすると Word が実行され、次々にファイルを開いては閉じるを繰り返し、最終的に合計ページ数が表示されます。

Option Explicit

Const wdStatisticPages = 2

Dim targetPath
targetPath = GetTargetDir

If TargetPathExists(targetPath) Then
wscript.Echo "ページ合計: " & CountPage(targetPath)
Else
wscript.Echo "フォルダ パスが不正です"
End If

Function GetTargetDir()
Dim objShell, objFolder
Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択", 0)
If Not objFolder Is Nothing Then
GetTargetDir = objFolder.Items.Item.Path
End If
Set objFolder = Nothing
Set objShell = Nothing
End Function


Function TargetPathExists(aTargetPath)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
TargetPathExists = fso.FolderExists(aTargetPath)
End Function


Function CountPage(aTargetPath)
Dim strComputer
strComputer = "."

Dim objWMIService
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Dim colFiles
Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='" & aTargetPath & "'} Where " & _
"ResultClass = CIM_DataFile")

Dim objWord
Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Dim intPages
intPages = 0

Dim objFile
For Each objFile in colFiles
If objFile.Extension = "doc" Then
Dim objDoc
Set objDoc = objWord.Documents.Open(objFile.Name)
intPages = intPages + objDoc.ComputeStatistics(wdStatisticPages)
objDoc.Saved = True
objDoc.Close
End If
Next

objWord.Quit

CountPage = intPages
End Function

ツールは知りません。
質問者さんの立場と要求者との関係もわかりません。
もし質問者さんがご自分でスクリプトを書く覚悟があるのなら下記の VBScript をお試し下さい。

空のテキストファイルに以下のコードをコピペして保存し、そのテキストファイルの拡張子を vbs に変更してからファイルをダブルクリックしてみてください。
フォルダ選択ダイアログが表示され、Word ファイルが入っているフォルダを選択して [OK] をクリックすると Word が実行され、次々にファイルを開いては閉じるを繰り返し、最終的...続きを読む

QExcelVBAで既に開いてるwordを閉じる

ExcelVBAで困っております。

現在Excelで住所録を作り、1度送付してから1ヶ月したら自動でwordを起動し
送付の印刷をするマクロを作ってます。

普通に開いて閉じることはできましたが、
既にwordが開いていた場合に読み込み専用になり、少し困っております。

理想としては、既に開いていた場合、1度保存して終了し、
再度開くようにしたいです。


分かる方がいらっしゃいましたら教えてください。

よろしくお願い致します。

Aベストアンサー

試してください。
(例)
Dim wdapp As Object
Dim wddoc As Object
Dim wdpath As String
Dim wdname As String

wdname = "abc.docx"

On Error Resume Next
Set wdapp = GetObject(, "Word.Application")
Set wddoc = wdapp.Documents(wdname)
On Error GoTo 0
If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub

wdpath = wddoc.FullName
wddoc.Save
wddoc.Close
wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False

Set wdapp = Nothing: Set wddoc = Nothing

試してください。
(例)
Dim wdapp As Object
Dim wddoc As Object
Dim wdpath As String
Dim wdname As String

wdname = "abc.docx"

On Error Resume Next
Set wdapp = GetObject(, "Word.Application")
Set wddoc = wdapp.Documents(wdname)
On Error GoTo 0
If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub

wdpath = wddoc.FullName
wddoc.Save
wddoc.Close
wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False

Set wdapp = N...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QEXCEL-VBAで印刷時のページ番号を取得したい

EXCEL97です。
ブックの目次を作るマクロを作っています。
ブック内のシート名を目次のシートに縦に並べることはできたのですが、
その横にセットしたページ数をどうやって取得するか悩んでいます。
過去ログも見たのですがHPageBreaks.Countでは
プレビューでは1ページしかないはずのシートで
1が返ってきたりしてどうもうまくいきません。
良い方法があればどなたか教えてもらえないでしょうか。

Aベストアンサー

Application.ExecuteExcel4Macro("get.document(50)")
で、印刷ページ数が取得出来ます。

http://www2.odn.ne.jp/excel/waza/print.html

QエクセルからWordファイルをオープン

Excel VBAで、雑誌を参考に、次の様に作りました。
Function EwWordWordOpen(totoFullName As Variant)
  Dim objWordApp As Word.Application
  Set objWordApp = CreateObject("Word.Application")
  objWordApp.Documents.Open (totoFullName)
  Set objWordApp = Nothing
End Function

↑の方法ですと、次の動作となります。
1回目は何もしない。
2回目以降は、「ファイルがロックされています。読取専用で開きますか」のMsgBoxが表示されて、OKを入力するとWordを読取専用で開きます。

次に4行目のOpen行を
  objWordApp.Documents.Open (totoFullName), ReadOnly:=True
とすると、このステートは無視される様で何も行なわれません。

正しく、Wordファイルを開く方法を教えて頂きたく、よろしくお願いします。

Excel VBAで、雑誌を参考に、次の様に作りました。
Function EwWordWordOpen(totoFullName As Variant)
  Dim objWordApp As Word.Application
  Set objWordApp = CreateObject("Word.Application")
  objWordApp.Documents.Open (totoFullName)
  Set objWordApp = Nothing
End Function

↑の方法ですと、次の動作となります。
1回目は何もしない。
2回目以降は、「ファイルがロックされています。読取専用で開きますか」のMsgBoxが表示されて、OKを入力するとWordを読取専用で開きます。
...続きを読む

Aベストアンサー

> 1回目は何もしない。

キーボードで、Alt+Ctrl+Delキーの同時押しでタスクマネージャを
確認してもらうとわかりますが、実際には指定したWordのファイルは
非表示で展開済みになっています。
(タスクマネージャ上では「WINWORD.EXE」と表示されます)

そのため、2回目以降は二重で開こうとしていることになるため、
「読み取り専用で」というMsgBoxが表示されることになります。

これ(非表示展開)を回避するためには、「Visible」プロパティを
使用します。
(最初の状態で非表示なのは、VBAでの自動処理を行う中では、
 ユーザーから隠した状態の方が一般的、ということなのかと
 思います)


Function EwWordWordOpen(totoFullName As Variant)
  Dim objWordApp As Word.Application
  Set objWordApp = CreateObject("Word.Application")
  objWordApp.Documents.Open (totoFullName)
  objWordApp.Visible = True   '←【Wordアプリケーションを可視化】
  Set objWordApp = Nothing
End Function

> 1回目は何もしない。

キーボードで、Alt+Ctrl+Delキーの同時押しでタスクマネージャを
確認してもらうとわかりますが、実際には指定したWordのファイルは
非表示で展開済みになっています。
(タスクマネージャ上では「WINWORD.EXE」と表示されます)

そのため、2回目以降は二重で開こうとしていることになるため、
「読み取り専用で」というMsgBoxが表示されることになります。

これ(非表示展開)を回避するためには、「Visible」プロパティを
使用します。
(最初の状態で非表示なのは、VBAでの自...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q複数あるPDFファイルのページ数を知りたい

当方は1,000個以上のPDFファイルを所有しています。それぞれのPDFファイルのページ数を知りたいのですが、このページ数を簡単に検索(一括表示)できる無料ツールなどを知っている方は是非、教えてください。

Aベストアンサー

初めまして。
私も同じようなことをしようと思い、色々探していました。

それで下記のサイトにある「ComPDF」を使ってみたらいかがでしょうか。
シェアウェアですが、ページ数を調べるのでしたら大丈夫でしたよ。
私が調べたアプリの中では精度がかなりいいです。

http://www.ne.jp/asahi/foresth/home/

QWORD VBA 繰り返し処理

WORD VBAについて教えてください。

つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか?

Sub Macro1()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "あ"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = True
End With
Selection.Find.Execute
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub

WORD VBAについて教えてください。

つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか?

Sub Macro1()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "あ"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
...続きを読む

Aベストアンサー

こんにちは。

>繰り返し処理の書き方を知りたい
それは、サンプルが良くないですね。
直接の回答にはならないかもしれませんが、こういうのはどうかしら?

Sub SampleTest1()
Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer

blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0

Do While blnFound = True
  With rngContent.Find
    .ClearFormatting
    .Wrap = wdFindStop
    .Text = "あ"
    .Execute
  End With
  blnFound = rngContent.Find.Found
  If blnFound = True Then intCount = intCount + 1
Loop
MsgBox (intCount & "個見つかりました。")
End Sub

こんにちは。

>繰り返し処理の書き方を知りたい
それは、サンプルが良くないですね。
直接の回答にはならないかもしれませんが、こういうのはどうかしら?

Sub SampleTest1()
Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer

blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0

Do While blnFound = True
  With rngContent.Find
    .ClearFormatting
    .Wrap = wdFindStop
    .Text = "あ"
    .Execute
  End...続きを読む

Qワードのプロパティ情報をVBスクリプトで抽出したい

以前、http://oshiete1.goo.ne.jp/qa3914477.html
にてWordファイルに埋め込まれているページ数情報をVBスクリプトで
抜き出す方法(temtecomai2に回答いただいている方法です。
そのほかの方法だと最新のプロパティ情報を抜き出せないようです)
を教えていただきましたが、
今度はページ数ではなく、個々のWordファイルの会社名やタイトル
表題なども「wscript.Echo」で表示したいと思っています。
(本当はテキストファイルに出力したいのですが、その部分は自分でやります。)
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.word.wdmappeddatafields(VS.80).aspx
に書かれているwdCompanyなどで会社名を表示できるのかと思ったのですが、うまくいきません。
objDoc.ComputeStatistics(wdStatisticPages)のカッコ内を
何に変えると会社名やタイトルなどが得られるのかお分かりに
なるかたいらっしゃいましたら教えていただけませんでしょうか。
「ここを自分で見て調べなさい」といった情報でも全然かまいませんので
よろしくお願いします。

以前、http://oshiete1.goo.ne.jp/qa3914477.html
にてWordファイルに埋め込まれているページ数情報をVBスクリプトで
抜き出す方法(temtecomai2に回答いただいている方法です。
そのほかの方法だと最新のプロパティ情報を抜き出せないようです)
を教えていただきましたが、
今度はページ数ではなく、個々のWordファイルの会社名やタイトル
表題なども「wscript.Echo」で表示したいと思っています。
(本当はテキストファイルに出力したいのですが、その部分は自分でやります。)
http://msdn.microsoft....続きを読む

Aベストアンサー

この点詳しくないのだが、前の質問に拘っている意味がわからないのだが、>ワードのプロパティ情報、をという言葉を頼りにやってみた。
メモ帳に下記コードを貼り付け、.vbsで保存。当方実行まではテスト済み。当然文書名、フルパスは書き換えること。
on error resume next
msgbox "property"
Set oWord = CreateObject("Word.Application")
Set oDoc = GetObject("C:\Documents and Settings\xxxx\My Documents\doc1.doc")
n=odoc.BuiltInDocumentProperties.count
For i = 1 To n
msgbox i & " " & odoc.BuiltInDocumentProperties(i).name & "="
x =odoc.BuiltInDocumentProperties(i).Value
msgbox x
Next
ーー
質問の路線と違うような(<ーobjDoc.ComputeStatistics(wdStatisticPages)。
こちらはワードのメニュのファイループロパティで出る情報だと思います。

この点詳しくないのだが、前の質問に拘っている意味がわからないのだが、>ワードのプロパティ情報、をという言葉を頼りにやってみた。
メモ帳に下記コードを貼り付け、.vbsで保存。当方実行まではテスト済み。当然文書名、フルパスは書き換えること。
on error resume next
msgbox "property"
Set oWord = CreateObject("Word.Application")
Set oDoc = GetObject("C:\Documents and Settings\xxxx\My Documents\doc1.doc")
n=odoc.BuiltInDocumentProperties.count
For i = 1 To n
msgbox i & " " & o...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング