ファイルを開かずにカスタムドキュメントプロパティを操作する方法

このQ&Aのポイント
  • エクセルファイルの「右クリックメニュー」-「プロパティ」-「カスタム」の情報をVBを使って操作する方法を探しています。
  • 通常は、workbook.CustomDocumentPropertiesを利用するかと思いますが、ファイルを開くことが必要となります。
  • パスワードがかかっているファイルにはファイルを開く行為が行われるため、一括処理時に不都合が生じます。ファイルを開かずにカスタムドキュメントプロパティを操作する方法を知りたいです。
回答を見る
  • ベストアンサー

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

初めて質問させていただきます。 エクセルファイルの「右クリックメニュー」-「プロパティ」-「カスタム」の情報を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)の方法でオブジェクトを取得した場合、 一度ファイルを開く行為が行われているようです。 しかしながら、私が「カスタムドキュメントプロパティ」を参照しようとしてるファイルにはパスワードがかかっていることがあります。 複数のファイルを一括で処理しようとした際にファイルを開くとパスワードを求められ、プログラムが停止してしまうのが不都合となります。 ただ、エクスプローラなどで「カスタムドキュメントプロパティ」の内容を見るときはファイルを開く動作が不要と思われます。 (少なくともパスワードは求められません。) なんらかの方法があるかと思うのですが心当たりのある方、お助けいただければと思います。

質問者が選んだベストアンサー

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

こんにちは。 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&A

  • VBA 実行時エラーで、"プロパティまたはメソッド

    ・Sheet1(コード) Private Sub CommandButton1_Click() Call aaa End Sub ・Module1(コード) Sub aaa() Dim wb As Workbook Dim ws As Worksheet Workbooks.Open ("c:\test.xls") Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") wb.ws.Range("A2").Value = "CCC" End Sub wb.ws.Range("A2").Value = "CCC"の部分で 以下の実行エラーが出ます。 ------------------------------------------------------------------------ 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ------------------------------------------------------------------------ Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") の部分で特にエラーも出ないので、オブジェクトの取得は成功していると 思うのですが、WorkSheetオブジェクトのwsからRangeメソッドを呼ぶことが できません。 動かない原因と対策を教えてください!!

  • ドライブが違ってもファイルが正常に開けるようする

    windows7 Excel2007を使って、みようみまねでマクロ作成の初心者です。  現在 遠方の知人とEXCELブックのやり取りをしています。   フォルダの中にA・B・Cブックとマクロ記入用のDブックが入っており   これをフォルダごと送っています。双方とも以下のマクロで開いています。   Sub Eァイルを開く() Dim wb As Workbook On Error Resume Next '開いて作業中の場合 Set wb = Workbooks("Eファイル.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\Bフォルダ名\Eファイル.xls") End If End Sub   変更 私のマイドキュメントを外付けハードディスクのHドライブに移動する。        ¥H¥マイドキュメント¥計算処理      知人のマイドキュメントを外付けハードディスクのFドライブに移動する。        ¥F¥マイドキュメント¥計算処理      そしてやり取りは、マクロ記入のDブックのみとする。   そしてやりたいことは、双方のパソコンでエラーなくファイルを開けるようにしたいのです。試行錯誤的にコード書きましたがうまくいきません。どうコードを書いたらよろしいでしょうか? Sub  Eファイルを開く() Dim wb As Workbook On Error Resume Next ChDrive "F" ''フォルダが存在するかどうか調べます Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FolderExists("..\計算処理") Then '開いて作業中の場合。 Set wb = Workbooks("Eファイル.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\Bフォルダ名\Eファイル.xls") End If Else ChDrive "H" ChDir "計算処理" '開いて作業中の場合。 Set wb = Workbooks("Eファイル.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\Bフォルダ名\Eファイル.xls") End If Set FSO = Nothing End If End Sub

  • エクセル2000VBAでファイルを操作したい

    いつもお世話になっています。 エクセルVBAで別のワークブックを参照したいので workbooks.open Filename:="C:my documents\***.xls" とすると、そのオープンするワークブックのTisWorkbookのWorkbook_Open()で実行している(.show)メニュー(ユーザーフォーム)が開いてしまいます。 このとき、Workbook_Open()を実行させないでワークブックを開く方法って、 なにかありますか? Shiftを押しながらファイルを開くとき、実行されませんよね?それをVBAでできるのですか? よろしくお願いします。

  • ExcelVBAでの異なるファイル間のセルのコピーについて

    ExcelVBAでの異なるファイル間のセルのコピーについて セルのコピーでエラーが除去できなく困っています 同じファイル内のコピーでは、以下のコードが可能なのですが ----------------------------------------------------------------- Set XL1 = CreateObject("Excel.Application") Set WB1 = InXL1.Workbooks.Add Set XL2 = CreateObject("Excel.Application") Set WB2 = InXL2.Workbooks.Add WB1.WorkSheets(1).Range("A1").Copy WB1.WorkSheets(1).Range("A2") ----------------------------------------------------------------- 別ファイルへのコピーではエラーになってしまいます WB1.WorkSheets(1).Range("A1").Copy WB2.WorkSheets(1).Range("A2") なぜそうなってしまうのかわかりません 別ファイルへのコピー方法をご存じの方は是非教えて下さると助かります

  • ExcelVBA 標準モジュール内関数の呼出し

    VB6.0からExcelの標準モジュール内のパラメータ付関数を呼出すにはどうしたらよろしいでしょうか? Dim app As Excel.Application Dim wb As Workbook Set app = CreateObject("excel.application") Set wb = app.Workbooks.Open("TestXl.xls") Set app = Nothing 以上のように記述し指定のエクセルファイルをオープンすることはできたのですが ここからどうやって標準モジュールを参照し、その中の関数を実行するかがわかりません。

  • VBA

    VBAでstrFILENAMEにaaa.xlsを代入したいのですがどうしたらいいのでしょうか? このままだと定義エラーになっていまします。 Dim wbk As Workbook Set wbk = Workbooks.Open(Filename:="C:\Documents and Settings\Administrator\デスクトップ\strFILENAME", ReadOnly:=True)

  • VBAでBOOKを開かずにプロパティ変更

    エクセル2013です。 特定のフォルダ内のエクセルのBOOKのプロパティの作成者をすべて変えようと思います。 いろいろ試して、以下のコードでできるようになりました。 しかし、下記のコードではいちいちファイルを開かなくてはなりませんのでサイズが大きかったり、数が多いと結構時間がかかります。 手作業でファイルのプロパティを変えるときは、エクスプローラで右クリックすれば開かなくとも簡単にできます。VBAでもファイルを開かずにプロパティを変更するにはどうすればよいのでしょうか?お教えいただければ幸いです。 Sub TEST20190710()   Dim myFdr As String, fnm As String   Dim wb As Workbook   Dim n As Long   Const NEW_AUTHOR As String = "emaxemax"      Application.ScreenUpdating = False   Application.EnableEvents = False   myFdr = "C:\Users\User\Documents\TEST01"   fnm = Dir(myFdr & "\*.xls?")   Do Until fnm = Empty     Set wb = Workbooks.Open(myFdr & "\" & fnm)     Application.DisplayAlerts = False     wb.BuiltinDocumentProperties("Author").Value = NEW_AUTHOR     wb.Close SaveChanges:=True     Application.DisplayAlerts = True     n = n + 1     fnm = Dir   Loop   Application.ScreenUpdating = True   Application.EnableEvents = True   MsgBox n & "件のブックを処理しましました。", vbInformation End Sub

  • 開いているXLSファイルが読み取り専用か調べる

    Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\test.xls") Set xlSheet = xlBook.Worksheets(1) 開いたExcelファイルが読み取り専用になっているかどうかを調べるにはどうすればいいですか? ファイルの属性が読み取り専用かどうかは取得できるのですが、属性は読み取り専用ではなくても誰か他のユーザーがネットワークから開いているために読み取り専用で開いている場合もわかるようにしたいです。 お願いします。

  • ASPによるEXCELファイルの操作

    宜しくお願いします。 サーバーに保管してあるEXCELテンプレートが保管してあります。 ASPを用いて、テンプレートの特定セルにデータを入力したのち そのテンプレートをクライアント側のPCに保存したいのですが可能でしょうか。 ちなみに、自分のPC内(Localhost)では、下記のプログラムでうまく動いたのですが サーバーに移すと、このプログラムのところでエラーが出ます。 初心者で見よう見まねでプログラムしているので、理屈等が理解できていないのですが どなたかアドバイスいただけると幸いです。 宜しくお願いします。 '================================================= '----- EXCEL作成 '================================================= Sub excel_save() Dim strFileName Dim ex, wb, sh, objExcelBook strFileName = "C:\Temp\報告書.xls" Set ex = Server.CreateObject("Excel.Application") ex.visible=false ex.displayalerts=false Set objExcelBook = ex.Workbooks.Open(strFileName) Set wb = ex.activeworkbook Set sh = wb.Sheets("報告書") sh.Range("I3").Value = KanriNo objExcelBook.SaveAs ("【" & KanriNo & "】報告書.xls") objExcelBook.Close False ex.Application.Quit set sh = Nothing Set wb = Nothing Set objExcelBook = Nothing Set ex = Nothing End Sub

  • VBAでファイルを開いてないときに開くコード

    いつもお世話になります。 VBA(Excel2007)の初心者です。 目的のファイルが開いていない時は開き、 既に開いている時は何もしない。 という処理をしたいと思い以下のコードを 書きました。 Dim wb As Workbook Dim myfilename As String For Each wb In Workbooks If wb.Name = "予定表.xls" Then Exit For Else myfilename = "\\___\__\予定表.xls" Workbooks.Open Filename:=myfilename End If Next wb 実行したら何度もファイルを開こうとしてしまいます。 どこに問題があるのでしょうか? ちなみにこれは"予定表.xls"のセルを参照したくて ある処理の前に実行するつもりなのですが、 別のブックのセルを参照するときはやはり そのブックを開かなくてはならないのでしょうか? 何卒よろしくお願いします。

専門家に質問してみよう