プロが教えるわが家の防犯対策術!

Wordの[ファイル]→[プロパティ]の「作成者」や「会社名」「タイトル」等を一括で削除することは可能でしょうか?

Sub プロパティ削除()
ActiveDocument.BuiltInDocumentProperties(Author) = ""
End Sub

上記のようにすると「作成者」は削除できるんですけど、「Author」の部分を変えて「タイトル」や「会社名」を削除するしかないでしょうか?
全てのプロパティを簡単に削除するコードはありますか?

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

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

A 回答 (6件)

こんにちは。



>「プロパティの全て」というふうにできるでしょうか? 「Count」を使ってプロパティの数をカウントしてみましたが、それはできないようで・・・。

エラートラップはしてありませんが、一度で試してみてください。特別な設定していない限りは、全て通るはずです。ドキュメントのバイト数などは再取得されるようですね。

しかし、これでは、原作者名は消えません。その場合は、やはり、『隠しデータの削除』を使うか、もしくは別のマクロとActive X コントロール(Dsofile.dll)が必要になるのではないかと思います。それは、やってみないとわかりません。


Sub プロパティ削除r()
Dim v As Variant
For Each v In ActiveDocument.BuiltInDocumentProperties
 If v.Type = msoPropertyTypeString Then
    v.Value = ""
 ElseIf v.Type = msoPropertyTypeNumber Or v.Type = msoPropertyTypeDate Then
    v.Value = 0
 End If
Next v
 ActiveDocument.Save
End Sub
    • good
    • 0
この回答へのお礼

Wendy02さん、ありがとうございました。
教えていただいたコードで解決しました!
コードの内容はなんとなく分かる程度ですが、頑張って勉強します。

お礼日時:2007/05/29 17:44

ANo.1です


>試していますが、削除できません。
これは以下のURL先にあるオプションの項目にチェックを入れるマクロ
です。([保存時にファイルのプロパティから個人情報を削除する])
http://support.microsoft.com/kb/899877/ja

ですから、マクロを実行してチェック項目をオンにしないと意味が無い
ものですね。
マクロを書いて保存しただけではチェック項目がオンになっていません
から削除されないのです。マクロをお尋ねだったのでヘルプにあるもの
を載せましたが、実際にはオプションの項目をオン/オフするだけです
から、削除をするマクロという意味では、Wendy02 さんの提示したもの
ぐらいしかないのでしょうね。(私も勉強中ですがいまだ向上せず)
    • good
    • 1
この回答へのお礼

>ですから、マクロを実行してチェック項目をオンにしないと意味が無いものですね

今度はうまくいきました。ありがとうございました。

>(私も勉強中ですがいまだ向上せず)

私も勉強中です。早く回答できるくらいに成長したいものです。

お礼日時:2007/05/29 17:53

> なぜだかダウンロードできませんでした



そうですか。。残念です。

オフィスのファイルには、プロパティーの他、様々な場所に
個人情報が埋め込まれてしまいます。例えば、マクロの記録を
すると、

  ' Sample Macro
  ' マクロ記録日 : 2007/5/29 ユーザー名 : Administrator

のような個人情報(ユーザー名に本名を入れていたりした場合)
が記録されてしまいます。このツールはこのようなことろまで
スキャンし、削除してくれるので、データ提出時になにかと重宝
するんですが....

> コードを知りたいのですが・・・。

残念ながらコードは公開されていません。
    • good
    • 0
この回答へのお礼

>このツールはこのようなことろまで
スキャンし、削除してくれるので、データ提出時になにかと重宝
するんですが....

なるほど・・・。コードは公開されていないようなのは残念ですが、
便利そうですね。
Office2002が一部インストールしているために今回は使用できなかったので、また別の機会に使ってみようと思います。

No.3の方の回答で解決しましたが、後は回答順にポイントを付与します。
ポイントは付与できませんが、ありがとうございました。

お礼日時:2007/05/29 17:51

こんにちは。



一応、5まででよいと思います。
試してみてください。なお、これは、Normal.dot 側に入るものだと思います。

Sub プロパティ削除()
Dim i As Integer
For i = 1 To 5
 ActiveDocument.BuiltInDocumentProperties (i) =""
Next i
End Sub


これとともに、ツール-オプション-保存
□保存時にプロパティを確認する

にチェックを入れておくとよいと思います。
    • good
    • 0
この回答へのお礼

Wendy02さん、ありがとうございます。
For i = 1 To 5でできました!

ところで、「5」の部分を、数字ではなく、「プロパティの全て」というふうにできるでしょうか? 「Count」を使ってプロパティの数をカウントしてみましたが、それはできないようで・・・。


他に「For each・・・Next」を使用する方法を試みていますが、どうもうまくいきません。

お礼日時:2007/05/29 11:08

こんばんは。



Office2003/XP 限定ですが、MS 公式のツールが公開されてますよ。
http://www.microsoft.com/downloads/details.aspx? …

参考URL:http://www.microsoft.com/downloads/details.aspx? …
    • good
    • 0
この回答へのお礼

KenKen_SPさん、ありがとうごじます。
なぜだかダウンロードできませんでした(/_;)
Office 2003と同時にOffice2002のPPTを入れていて(Wordは入れていない)、そのせいで製品の確認に失敗してしまいました。

このツールはコードを確認できるのでしょうか? 今回のマクロは勉強のために作成しているので、コードを知りたいのですが・・・。

お礼日時:2007/05/29 11:03

Sub RemovePersonalInfo()


 ThisDocument.RemovePersonalInformation = True
End Sub

「 RemovePersonalInformation 」でVisual Basicのヘルプを参照すれば
出てきます。
    • good
    • 0
この回答へのお礼

enunokokoroさん、ありがとうございます。
コメントや変更履歴のユーザー情報を削除するプロパティのようですね・・・。試していますが、削除できません。コードはヘルプどおりなので、問題ないはずですが。。。
もうちょっと試してみます。

お礼日時:2007/05/29 11:00

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

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

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

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

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

QExcelブック保存前に個人情報を削除

Excel VBA 2007を使用しています。

ActiveWorkbook.RemovePersonalInformation = True

によって、ブック保存時に個人情報を保存しないようにできますが、

ユーザーインターフェースの操作の「ドキュメント検査」と同様に、ブック保存前に個人情報を削除するにはどうすれば良いでしょうか。

Aベストアンサー

こんにちは。

RemovePersonalInformation プロパティで操作できる個人情報というのも非常に限定的ではありますが、、、。

お訊ねに対するこちらの理解が十分ではないかも知れませんが、
ブックのファイルプロパティの[作成者]などは、変更・削除可能です。
[前回保存者]は、上書き保存時にのみ、変更のみ可能です。
ですので、これについては、"ブック保存前に個人情報を削除"という訳には行きません。

他に方法がない、と断言できるほどの情報は持ち合わせていませんが、私は知りません。

以下は、ファイルをアップロードする時等に個人的に使っていたものに手を加えたものです。
少しでも参考になることがあればいいのですが、、、。


' ' ///ブックのファイルプロパティについて
' ' /// [作成者][会社]を削除
' ' /// [前回保存者]は、削除出来ないので、
' ' /// 一旦、ユーザー名を(スペース等に)変更して
' ' /// そのまま上書き保存することで、ユーザー名を晒さない
Sub Re8465798a()
  Dim sUser As String

  sUser = Application.UserName
  Application.UserName = " "  '  Empty不可!(仮に半角スペースを指定)

On Error GoTo ErrOut_

  With ActiveWorkbook ' With Workbooks("ブック名") ' With ThisWorkbook ' With Me
    With .BuiltinDocumentProperties
      .Item("Author").Value = Empty  '  [作成者]
'      .Item("Last Author").Value = Empty  '  [前回保存者]消せない!上書き時に再設定される!
      .Item("Company").Value = Empty  '  [会社]
    End With

    .Save
  End With

ErrOut_:
  Application.UserName = sUser
End Sub


因みに、
[ドキュメント検査]の実行結果から、一部個人情報の削除を実行した際に
マクロの記録を録ってみたら、RemoveDocumentInformation メソッド というのがあることに気が付きました。
マクロの記録で得られたコードが以下。
  ActiveWorkbook.RemoveDocumentInformation (xlRDIPrinterPath)
  ActiveWorkbook.RemoveDocumentInformation (xlRDIDocumentProperties)
こちらで色々試すのはご勘弁、ということで、ヘルプの引用を最後に掲げて置きます。

因みの因みに、こちらxl2010では、未保存データがあったとしても、
保存を促されるのを無視して、[ドキュメント検査]を実行可能でした。

お望みに適わない話になってしまっているようでしたら、適当にスルーしてください。


<以下、引用>
Excel 開発者用リファレンス
===================================
Workbook.RemoveDocumentInformation メソッド
指定された種類の情報をすべてブックから削除します。
バージョン情報 追加バージョン: Excel 2007

構文

式.RemoveDocumentInformation(RemoveDocInfoType)

式 Workbook オブジェクトを表す変数です。

パラメーター

名前 必須/オプション データ型 説明
RemoveDocInfoType 必須 XlRemoveDocInfoType 削除される情報の種類を指定します。

===================================
XlRemoveDocInfoType 列挙
ドキュメント情報から削除するタイプ情報を指定します。
バージョン情報 追加バージョン: Excel 2007

名前 値 説明
xlRDIAll 99 文書情報をすべて削除します。
xlRDIComments 1 文書情報からコメントを削除します。
xlRDIContentType 16 文書情報からコンテンツ タイプのデータを削除します。
xlRDIDefinedNameComments 18 定義済みの名前を削除します。文書情報からのコメントです。
xlRDIDocumentManagementPolicy 15 文書情報から文書管理ポリシーを削除します。
xlRDIDocumentProperties 8 文書情報から文書プロパティを削除します。
xlRDIDocumentServerProperties 14 文書情報からサーバー プロパティを削除します。
xlRDIDocumentWorkspace 10 文書情報からワークスペース データを削除します。
xlRDIEmailHeader 5 文書情報からメール ヘッダーを削除します。
xlRDIInactiveDataConnections 19 文書情報から無効なデータ接続を削除します。
xlRDIInkAnnotations 11 文書情報からインク注釈を削除します。
xlRDIPrinterPath 20 文書情報からプリンターのパスを削除します。
xlRDIPublishInfo 13 文書情報から発行情報を削除します。
xlRDIRemovePersonalInformation 4 文書情報から個人情報を削除します。
xlRDIRoutingSlip 6 文書情報から回覧先を削除します。
xlRDIScenarioComments 12 文書情報からシナリオのコメントを削除します。
xlRDISendForReview 7 文書情報から [校閲者へ送信] 情報を削除します。

© 2010 Microsoft Corporation. All rights reserved.
===================================

こんにちは。

RemovePersonalInformation プロパティで操作できる個人情報というのも非常に限定的ではありますが、、、。

お訊ねに対するこちらの理解が十分ではないかも知れませんが、
ブックのファイルプロパティの[作成者]などは、変更・削除可能です。
[前回保存者]は、上書き保存時にのみ、変更のみ可能です。
ですので、これについては、"ブック保存前に個人情報を削除"という訳には行きません。

他に方法がない、と断言できるほどの情報は持ち合わせていませんが、私は知りません。

以下は、ファイ...続きを読む

QExcelファイルのプロパティの前回保存者名を変更する方法。

以前自分のパソコンで作成したExcelデータを会社のパソコン上で再加工しました。プロパティを開いて作成者の名前をチェックしてみると、作成者は私自身(beaurah)になってるのですが、その下の前回保存者の名前が全然違う人の名前(会社の人の名前)になって出てきます。このデータは100%私のオリジナルなので、その人はこのデータを全く触っていません。なので前回保存者にはなり得ません。(このパソコンはパスワード設定がしてあって、私以外の人は絶対立ち上げる事が出来ません。)にも拘わらずこの人の名前が前回保存者として出てくるのは何故なのでしょうか。因みに他に作成したデータや、ダウンロードしたエクセルデータを見てみましたが、やはり同じ人の名前が前回保存者の欄に出て来ました。前回保存者の名前を自分の名前に変更する事は出来ないのでしょうか。教えて下さい。宜しくお願い致します。

Aベストアンサー

>ワードの場合
「ツール」~「オプション」
「ユーザー情報」タブ
「名前」を変更すればいいと思います。

Q複数のファイルのプロパティの一括編集

複数のファイルのプロパティのタイトルに
それぞれのファイル名を一括で入力する方法はないでしょうか?
(タグではなく、ファイルのプロパティです)
ファイル形式はmp4です。

どなたかやり方をご存知の方、回答のほどよろしくお願いします。

Aベストアンサー

使っていませんが、下記URLのページのフリーソフトがご希望に沿えるようです。

「Propachange」
http://www.vector.co.jp/soft/winnt/util/se441540.html

Qファイルを開かずにカスタムドキュメントプロパティを操作したい

初めて質問させていただきます。

エクセルファイルの「右クリックメニュー」-「プロパティ」-「カスタム」の情報をVBを使って操作する方法を探しております。

通常は、workbook.CustomDocumentPropertiesを利用するかと思うのますが、

Dim wb As Workbook

Set wb = workbooks.Open Filename:="c:\aaa.xls") '(1)
'Set wb = Workbooks("c:\aaa.xls") '(2)
'Set wb = CreateObject("c:\aaa.xls") '(3)

debug.print wb.CustomDocumentProperties("顧客")

(1)~(3)の方法でオブジェクトを取得した場合、
一度ファイルを開く行為が行われているようです。

しかしながら、私が「カスタムドキュメントプロパティ」を参照しようとしてるファイルにはパスワードがかかっていることがあります。
複数のファイルを一括で処理しようとした際にファイルを開くとパスワードを求められ、プログラムが停止してしまうのが不都合となります。

ただ、エクスプローラなどで「カスタムドキュメントプロパティ」の内容を見るときはファイルを開く動作が不要と思われます。
(少なくともパスワードは求められません。)
なんらかの方法があるかと思うのですが心当たりのある方、お助けいただければと思います。

初めて質問させていただきます。

エクセルファイルの「右クリックメニュー」-「プロパティ」-「カスタム」の情報をVBを使って操作する方法を探しております。

通常は、workbook.CustomDocumentPropertiesを利用するかと思うのますが、

Dim wb As Workbook

Set wb = workbooks.Open Filename:="c:\aaa.xls") '(1)
'Set wb = Workbooks("c:\aaa.xls") '(2)
'Set wb = CreateObject("c:\aaa.xls") '(3)

debug.print wb.CustomDocumentProperties("顧客")

(1)~(3)の...続きを読む

Aベストアンサー

こんにちは。

DSO を使えばよいと思います。以下は、その Verion 2.0 を使っています。

Sub ReadOfficeCustomProperties()
Dim FileName As String
'http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
'DSO OLE Document Properties Reader 2.0 に参照設定
Dim DSO As DSOFile.OleDocumentProperties
Set DSO = New DSOFile.OleDocumentProperties
FileName = "c:\aaa.xls"
 DSO.Open sFileName:=FileName
 Debug.Print DSO.CustomProperties("顧客")
 DSO.Close
End Sub

Q作成した文書の「作成者」「前回保存者」の変更は?

ワードやエクセルで作成した文書のアイコンを右クリックでプロパティを選択し、概要・詳細設定を開いてでてくる「説明」「原作者」の項目のうち、いくつかの項目はクリックすることにより変更または削除ができますが「前回保存者」は変更も削除もできません。
中古で入手し半公共的グループで使用しているのですが、放出先の名前がはいっており、作成したものはメディアで残したり、データで渡したりがあるので困っております。
スタートをクリックしたり、ようこそ画面で出る名前は変更してあります。マイコンピュータ右クリ、プロパティの「全般」ででる画面の「使用者」欄は無表示(入力されてない?)です。
PCはLX50H,OSはXP-SP3、Office2003です。

Aベストアンサー

こちらとほぼ同様の内容と思われます。参考に。
http://questionbox.jp.msn.com/qa1175780.html

なお、前回保存者については、
Wordの場合、どこかにスペースを追加とか、何か変更を加えて上書き保存。
Excelの場合、セルを選び直すか、別のセルをアクティブに戻し上書き保存。
で、上書き保存のユーザーに書き換えされませんか。

その他、下記のようなツールを使用すれば変更・削除を可能と思われます。
http://bizmakoto.jp/bizid/articles/0609/07/news077.html
  

QEXCEL VBA でのワード置換

EXCEL VBA でのワード置換を教えてください。

EXCELからワードをオープンして文字列置換をしたいです。

Dim wdObj As Object
Dim wdDoc As Object
Dim objSelect As Object
Dim xResult As Boolean

Set wdObj = CreateObject("Word.Application")

wdObj.Visible = True
Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
Set objSelect = wdObj.Selection

objSelect.Find.Text = "*****"
objSelect.Find.Replacement.ClearFormatting
objSelect.Find.Replacement.Text = Format(35000, "###,###,###")

objSelect.Find.Execute(Replace:=wdReplaceAll)


上記コードで実行したところ、検索はできるのですが、置換ができません。
手動で置換フォームを出してみると、検索文字列、置換文字列ともに目的の文字列が入っています。
そのまま「全て置換」のボタンを押すと、問題なく置換されます。

色々調べてみたのですが、どのサイトもExecuteで置換できるように書かれていて、煮詰まってしまいました。

お知恵をお貸し下さい。

EXCEL VBA でのワード置換を教えてください。

EXCELからワードをオープンして文字列置換をしたいです。

Dim wdObj As Object
Dim wdDoc As Object
Dim objSelect As Object
Dim xResult As Boolean

Set wdObj = CreateObject("Word.Application")

wdObj.Visible = True
Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
Set objSelect = wdObj.Selection...続きを読む

Aベストアンサー

以下のマクロで試してみて。

Sub test()
 Dim wdObj As Object
 Dim wdDoc As Object
 Dim objSelect As Object
 Dim xResult As Boolean

 Set wdObj = CreateObject("Word.Application")
 wdObj.Visible = True

 Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
 Set objSelect = wdObj.Selection

 objSelect.Find.ClearFormatting
 objSelect.Find.Replacement.ClearFormatting
 
 With objSelect.Find
  .Text = "*****"
  .Replacement.Text = Format(35000, "###,###,###")
  .Forward = True
  .MatchFuzzy = True
  .MatchWholeWord = False
  .MatchCase = True
  .MatchWildcards = False
  .Forward = True
  .Wrap = 1 'wdFindContinue
  .Format = False
  .Execute , , , , , , , , , , 2 'wdReplaceAll
 End With

End Sub

ExcelでWordの置換を操作する場合
Find.Execute のパラメータを省略する場合「, , , , , , , , , , 2」の
ように書くほうが確実みたい。
https://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.word.find.execute(v=office.11).aspx

それと、Selection.Find を使う場合は、条件を省略しないほうが良い
らしいです。
https://oshiete.goo.ne.jp/qa/5559086.html

以下のマクロで試してみて。

Sub test()
 Dim wdObj As Object
 Dim wdDoc As Object
 Dim objSelect As Object
 Dim xResult As Boolean

 Set wdObj = CreateObject("Word.Application")
 wdObj.Visible = True

 Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
 Set objSelect = wdObj.Selection

 objSelect.Find.ClearFormatting
 objSelect.Find.Replacement.ClearFormatting
 
 With objSelect.Find
  .Text = "*****"
  .Replacement.Text = Format(350...続きを読む

QWordVBAで規定のところに文字列を挿入したい

 VBA超初心者の質問です。
 ExcelVBAでは値をセルに代入することは出来ますが、WordVBAで規定の場所に文字列を代入するといったことはどうすれば良いのでしょうか?
 できれば、テキストボックスの中身と連動できたらと思うのですが、できますか?
 ちなみに、私はVBAはほとんど知識がありません。
 ただ単にVBAの勉強の手始めにこれだけ教えてください。
 Web検索しても見つからないので、よろしくお願いします。

Aベストアンサー

私もワードのVBAは初心者です。
(テキストボックスの作り方・値のセットのし方)
値は手動でなく、プログラムでセットする方法です。
Sub test05()
ActiveDocument.Shapes.AddTextbox _(msoTextOrientationHorizontal,100 ,100,100,100).Select
Selection.TypeText Text:="東京都文京区"
End Sub
100,・・のところは、Left,Top,Width,Heightの指定です。ワードに貼り付けるコントロールはShapesでまとめられていて、エクセルなどと違うようです。
(所定のところへテキストボックスの値をセットのし方)
「所定のところ」と言うのが、ワードの場合は曲者なような気がする。取りあえず何行目の何文字目と言う指定を知りましたので、記します。
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox TextBox1.Text
Selection.MoveDown unit:=wdLine, Count:=3
Selection.MoveRight unit:=wdCharacter, Count:=8
Selection.TypeText Text:=TextBox1.Text
End Sub
テキストボックスのイベントを、どれで捕らえるかが難しいが、比較的人為的にしないと起こらないダブルクリックにしました。
テキストボックス内に文字を入れ、テキストボックス内で
ダブルクリックすると3行下の該当文字から8文字目に
入力文字が挿入されます。
ワードのVBAは(1)解説書が少ない。(2)エクセルのように、Cell(Range)に当たる基本的な単位に当たるものが、見つからない。(3)エクセル・アクセスVBAと統一されていない(4)ビジネスなどで利用応用出来る場面が良く見えない。など学習は苦難の道が待っている気がします。OKWEBの質問も回答も少ないようです。お互いに頑張りましょう。

私もワードのVBAは初心者です。
(テキストボックスの作り方・値のセットのし方)
値は手動でなく、プログラムでセットする方法です。
Sub test05()
ActiveDocument.Shapes.AddTextbox _(msoTextOrientationHorizontal,100 ,100,100,100).Select
Selection.TypeText Text:="東京都文京区"
End Sub
100,・・のところは、Left,Top,Width,Heightの指定です。ワードに貼り付けるコントロールはShapesでまとめられていて、エクセルなどと違うようです。
(所定のところへテキストボックスの値をセットのし方...続きを読む

QVBAで、強制保存してブックを閉じるには?

私の持っている書籍によると、

ActiveWorkbook.Close SaveChanges:=True

これで、上書き保存してクローズしてくれると思っているのですが、
ファイル指定のダイアログが表示されて、ファイル名の指定を促されます。
もちろん、ファイル名はすでについています。
また、上書き保存を指定しているつもりなのに、保存ボタンを押すと
上書きするか?と聞いてきます。

ダイアログなど表示せずに、静かにクローズしてほしいのですが、
どうすれば良いのでしょう?

Aベストアンサー

手元にExcelがないのですが、業務で使用している者です。

いろいろ調べてみると、確認ダイアログを表示しないようにする
Application.DisplayAlerts= Flase
が、あるようです。これを利用してみてはいかがでしょうか。


また、ファイル名が確定しているのにファイル名指定を促される場合、
もしかしたら、マクロによってCloseしようとしているのが、目当ての
ファイル(ブック)ではなく、別の新規ファイルということはないでしょうか。

保存ボタンを押すと上書き確認が出る場合は、そのファイルのいずれかの
シートに、DATE・TIMEなどといった、開くごとにセル内容の変更が行われる
数式・マクロが含まれていませんでしょうか。
業務での使用している限りでは、共有にしていてオートフィルタをかけているとき
開くごとに変更が行われるので、閉じるときに上書き確認が表示されます。

的外れでしたら申し訳ありませんが、いかがでしょうか。

QWordのプロパティ・総ページ数について(VBA絡み)

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



 

Aベストアンサー

> なぜかウチのEXCELはページ数ではなくて、総文字数を返します。

それは、恐らく参照設定の問題ですね。実行時バインド(CreateObject)
方式では ComputeStatistics に渡す引数のインデックス番号が正しく
渡らないのだと思います。参照設定を行えば問題なく動作します。

ちなみに私は昔から BuiltinDocumentProperties は当てにならない、、
と思いこんでましたから、ComputeStatistics を使ってました。
今回、Wendy02 さんが良い情報を提供して下さいましたので、私も今後は
BuiltinDocumentProperties 派でいこうと思います。
ただ、今回このスレッドで紹介された方法はいずれもファイル全体を一度
は読み込む方法ですから、処理速度は遅いですね。機会があれば、
バイナリー解析でページ数を取得する関数を作ってみたいと思います。

それから、蛇足で恐縮ですが、#8 発言の手前、一応アップしておきます。

ユーザー定義関数を作ってみました。が、、関数にする必要性はあまり
無かったです(;-ω-) =3

Word ファイルのパスを渡すと、各種情報が一次元配列で返されます。
使いかたは、サンプルコードを見てください。

Variant型の変数で関数の戻り値を一次元配列で受けます。その変数の
添え字に取得したい BuiltinDocumentProperties のインデックス番号
を指定します。

まぁ。。ファイル処理周りの例外処理をメインルーチン側で省けるので
意義は在ると言えば在るのですが。


Sub 使い方サンプルコード()

  Dim Fname  As String
  Dim aryInfo As Variant
  Dim sMes(8) As String
  Dim Sp   As String
 
  Fname = Application.GetOpenFilename("MsWordファイル(*.doc),*.doc")
  If UCase$(Fname) = "FALSE" Then
    Exit Sub
  End If
  '関数の戻り値は一次元配列なので Variant型 の変数で受ける
  aryInfo = GetMsWordBuiltinProperties(Fname)
  '結果表示
  If IsArray(aryInfo) = False Then Exit Sub
 
  Sp = vbTab & ": "
  sMes(0) = "ファイル名" & Sp & Dir(Fname)
  sMes(1) = "バイト数" & Sp & Format(aryInfo(22) / 1024, "#,##0") & " KB"
  sMes(2) = "タイトル" & Sp & aryInfo(1)
  sMes(3) = "文字数" & Sp & aryInfo(16)
  sMes(4) = "(SP含む)" & Sp & aryInfo(30)
  sMes(5) = "行数" & Sp & aryInfo(23)
  sMes(6) = "ページ数" & Sp & aryInfo(14)
  sMes(7) = "段落数" & Sp & aryInfo(24)
  sMes(8) = "単語数" & Sp & aryInfo(15)
  MsgBox Join$(sMes, vbCr)
 
End Sub

'MsWord ドキュメントの各種統計情報を取得
Function GetMsWordBuiltinProperties(strFilePath As String) As Variant

  '要参照設定:Microsoft Word x.x Object Library
  
  Dim wdApp   As Word.Application
  Dim wdDoc   As Word.Document
  Dim aryRet(1 To 30) As Variant
 
  On Error GoTo ErrorHandler
  
  '初期化
  GetMsWordBuiltinProperties = False
  'ファイルが無いまたは拡張子が異なる場合は False を返す
  If Dir(strFilePath) = "" _
    Or UCase$(Right$(strFilePath, 4)) <> ".DOC" Then
    Exit Function
  End If
 
  'MsWord ファイルオープン
  Set wdApp = New Word.Application
  Set wdDoc = wdApp.Documents.Open(strFilePath, ReadOnly:=True)
  'ドキュメントの統計情報を取得
  With wdDoc
    .Repaginate 'Thanks Wendy02 san!
    For i = 1 To 30
      aryRet(i) = .BuiltinDocumentProperties(i)
      'Index 24-29 は Word では使わないと思います
      If i = 24 Then i = 29
    Next i
  End With
  '戻り値をセット
  GetMsWordBuiltinProperties = aryRet
 
Terminate:
  On Error Resume Next
  wdDoc.Close False
  wdApp.Application.Quit
  Set wdDoc = Nothing
  Set wdApp = Nothing
  Exit Function

ErrorHandler:
  '想定外のエラー発生の場合には False を返す
  GetMsWordBuiltinProperties = False
  On Error GoTo 0
  GoTo Terminate

End Function

> なぜかウチのEXCELはページ数ではなくて、総文字数を返します。

それは、恐らく参照設定の問題ですね。実行時バインド(CreateObject)
方式では ComputeStatistics に渡す引数のインデックス番号が正しく
渡らないのだと思います。参照設定を行えば問題なく動作します。

ちなみに私は昔から BuiltinDocumentProperties は当てにならない、、
と思いこんでましたから、ComputeStatistics を使ってました。
今回、Wendy02 さんが良い情報を提供して下さいましたので、私も今後は
BuiltinDocumentPrope...続きを読む

QEXCELマクロで上書きメッセージ無しで保存する方法

EXCELマクロで上書きメッセージ無しで保存する方法をお願いします
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
の様にするとすでにファイルがある場合上書きメッセージが出ます
メッセージを出さずに上書きするプログラミングを教えて下さい
宜しくお願いします

Aベストアンサー

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
Application.DisplayAlerts = True


人気Q&Aランキング