• 締切済み

エクセルVBAでBOOKのダウンロード日時を取得したいのです。

社内のイントラネットに貼り付けたエクセルのBOOKを、社員が各自の端末にダウンロードした日時を、そのダウンロードされたBOOKのマクロで取得したいのです。 ためしに、以下のようにしてみました。 Sub test01() MsgBox "FileDateTime:" & FileDateTime(ThisWorkbook.FullName) End Sub これでは、常にそのBOOKを起動した日時が取得されるだけでした。 Sub test02() MsgBox "作成者は:" & ActiveWorkbook.BuiltinDocumentProperties(3).Value _ & vbCrLf & "最終更新者は:" & ActiveWorkbook.BuiltinDocumentProperties(7).Value _ & vbCrLf & "作成日時は:" & ActiveWorkbook.BuiltinDocumentProperties(11).Value _ & vbCrLf & "更新日時は:" & ActiveWorkbook.BuiltinDocumentProperties(12).Value End Sub これは、イントラに貼り付けたオリジナルのBOOKの作成日時、更新日時等のデータでした。 ダウンロード日時を取得することはできないのでしょうか? やりたいことは、改定等があった場合、いつまでも古いバージョンを使いつづけられないようにダウンロード日から例えば30日間を使用期限に設定するというようなことです。

みんなの回答

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

30日間の間に大改編がされても気付くのは最長で30日後ですから、どちらにせよ問題がある方法かと。ウィルスソフトや使用期限のあるソフトのように、通信してバージョン番号を常に対比させるようにしておけば済むかと思いますが。 どこかにバージョン情報をあげとくだけで、IEを使っても文字列を取得するだけでもよいですし、もっとおしゃれにやるならWSHやBASP21を使って比較するとか。

merlionXX
質問者

お礼

有難うございます。 わたしにそのような技術があればそうしたいのは山々なのですが・・・・。 いかんせん、初心者に毛の生えた程度のエクセルVBAしか出来ないものですからなんとかVBAでやりたかったのです。 > 30日間の間に大改編がされても気付くのは最長で30日後ですから いえいえ、改定の三十日以上前にはわたしのところに必ず連絡がありますから、(というか改定作業するのはわたしです)改定ときまれば、改定三十日前以降にダウンロードされたものはダウンロード日にかかわらず改定日で作動しないように細工できます。 ダウンロード日時を特定できれば問題は解決できるんです。

merlionXX
質問者

補足

Sub test03() Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox "DL日時:" & FSO.GetFile(ThisWorkbook.FullName).DateCreated End Sub で取得できました。 解決です。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 > そのダウンロードされたBOOKのマクロで取得したいのです。 どうやってダウンロードしたのでしょうか? Web サーバがあるんですか? という疑問はありますが、ご質問文にあるコードで取得できると思いますよ。 ただし、Web サーバーのブックを直接開いているのだとすれば、ご質問のマクロを 実行しているのはイントラのものです。したがって、 > イントラに貼り付けたオリジナルのBOOKの作成日時、更新日時等のデータでした。 という結果になるでしょう。 一度ローカルに保存したものを、ローカルで開けば求めている結果になると思います。 対策としては、イントラ上で直接開かれたものか、ローカル上なのかを判別してやれば 良いのですが、ThiwWorkbook.Path が使えると思います。 イントラ上(Webサーバ上と仮定)ならば、http:// などのアドレスが返りますので、 これで分岐処理できませんか? 以下、余談。 > いつまでも古いバージョンを使いつづけられないようにダウンロード日 > から例えば30日間を使用期限に設定するというようなことです。 ロジックそのものですが、、 会社で使用するファイルの場合、この手の問題は「ダウンロード日」ではなく、 「作成日」が使用期限の基点になるのでは? ならば、Workbook.Open イベント等で今日の日付けと使用期限を比較すれば良い のではないかと思います。

merlionXX
質問者

お礼

早速ありがとうございます。 > 一度ローカルに保存したものを、ローカルで開けば求めている結果になると思います。 Web上で開くのではなく、端末に右クリックで「対象をファイルに保存」させています。そのBOOKに Sub test02() を走らせてもオリジナルの作成・更新日時が表示されます。(今もやってみましたが) > 会社で使用するファイルの場合、この手の問題は「ダウンロード日」ではなく、「作成日」が使用期限の基点になるのでは? 現在はそうしていますが、そうだと改定がない場合でも30日ごとに、つねに新しい作成日のものに交換しなくてはなりません。 ダウンロード日から30日にしておけば、BOOKの改定の情報が最低でも30日前にはわかるので、改定がわかったときにダウンロードできなくしてしまえば一度で済みます。(その際、新版も使用開始日制限をつけてアップロードしますが) 本当はダウンロードさせずイントラ上で直接開かせて使うようにすれば、変更時に差し換えれば済むことなので、使用期限など関係なくなるのですが、 http://odn.okwave.jp/qa3279314.html Web上のエクセルのVBA操作について で、質問したようなことが解決できずにいますのでそれも出来ません。

merlionXX
質問者

補足

不思議なことに気づきました。 ダウンロードしたファイルを開き、メニューからファイル、プロパティでファイルの情報タブを見ると、作成日時はどうやらダウンロード日時のようです。 詳細情報タブで見るとオリジナルの作成日時になっています。 ファイルの情報タブの作成日時を取得したいです。

関連するQ&A

  • ファイルの作成日時を取得するにはどうすれば?

    エクセル2003です。 ファイルの作成日時を取得するにはどうすればいいですか? MsgBox FileDateTime(ActiveWorkbook.FullName) を実行すると、更新日時が取得されてしまいます。 FileDateTime 関数のヘルプを見ると、 ----------------------------------- 指定したファイルの作成日時または 最後に修正した日時を示すバリアント型 (内部処理形式 Date の Variant) の値を返します。 ----------------------------------- と書かれていますが、 どうすれば作成日時を取得できるのでしょうか?

  • エクセルVBAで、ファイルの情報の「作成日時」取得

    エクセル2000です。 メニューからファイル、プロパティでダイアログを呼び出すと、タブが「ファイルの情報」、「ファイルの概要」、「詳細情報」、「ファイル構成」、「ユーザー設定」と並んでいます。 そのうちの「ファイルの情報」タブと、「詳細情報」タブの両方に「作成日時」と「更新日時」があります。 同じ「作成日時」がなぜ二つあるのか、どう違うのが、試してみると更新日時はどちらも同じですが、作成日時が「詳細情報」はそのエクセルを初めて作成した日時、「ファイルの情報」は、そのエクセルに名前を付けて保存した日時のようです。 上記の理解で合っていますか? 次にそのエクセルBOOKに記述したVBAで作成日時を取得しようとした場合、 ActiveWorkbook.BuiltinDocumentProperties(11).Value で取得できる作成日時は、「詳細情報」にあるほうの日時のようですが、「ファイルの情報」にある作成日時(名前を付けて保存した日時)をVBAで取得するにはどうしたらよいのでしょうか? なにとぞよろしくお願い申し上げます。

  • 特定ファイルの更新日時を表示させたい。

    あるセル式に「=FileDateTime("フルパス")」入力で更新日時を表示させようとしているのですが、上手く表示されません。なにか間違っているのでしょうか? 検索で「インストラクターのネタ帳」でファイル更新日時取得を見つけました。 これは、そのブックの更新日時をアクティブシートに表示させるマクロのようですが、 これを応用してシートに特定ファイルの更新日時をセル表示させるにはどうすればいいのでしょうか? Function LastSaveTime() Application.Volatile LastSaveTime = ThisWorkbook.BuiltinDocumentProperties("Last save time").Value End Function どなたかアドバイス願います

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • エクセルVBAで作成した別ブックにVBAを記述したい

    VBAで別ファイルの作成は下記で出来ているのですが、出来上がったファイルにVBAを記述する方法がわかりません。 具体的には一番下のSub TEST()を新しいブックの標準モジュールに記述したいのと、sheet1に Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "ChangeTEST" End Sub を入れたいです。 また Private Sub Workbook_Open() MsgBox "OpenTEST" End Sub も入れたいのです。 どうぞご教示ください。 Sub 複製() Dim wb As Workbook, sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set wb = Workbooks.Add Application.SheetsInNewWorkbook = sc wb.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Cells.Copy wb.Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Buttons.Add(123, 195, 68.25, 15).Select Selection.OnAction = "TEST" Selection.Characters.Text = "TEST" ActiveWorkbook.Close ThisWorkbook.Activate Sheets("Sheet1").Select End Sub Sub TEST() MsgBox "TEST!!" End Sub よろしくお願いします。

  • Web上のエクセルのVBA操作について

    OSはWin2000、エクセルも2000です。 社内のイントラネット上にエクセルのBOOKを置いてあります。 ダウンロードせずにダブルクリックでイントラ上で開いたこのBOOKに対するVBA操作で、以下の3つを試しましたが、すべてエラーになり、プレビューすることができません。 どう直せばよいのでしょうか? Sub test() ActiveSheet.PrintPreview End Sub Sub test2() ThisWorkbook.ActiveSheet.PrintPreview End Sub Sub test3() x = ThisWorkbook.ActiveSheet.Name ThisWorkbook.Sheets(x).PrintPreview End Sub また Sub 終了() ActiveWorkbook.Close (False) End Sub もまったく働きません。 どうやったら終了できますか?

  • Excel-VBA 撮影日時の取得

    次の様な「For-Next」で撮影日時を取得しています。 "D:\Test1\"配下の"D3001.JPG"がヒットするまでループする…廻りくどい。 【やりたい事】 For-Nextを使わない。フルパス「"D:\Test1\D3001.JPG"」を指定して撮影日時を取得するには、どの様にソースコードを書けばよいのか分かりません。サンプルコードを提示いただければ有難いのですが、 誰かご教授宜しくお願いいたします。 '----------------------------------- Sub 撮影日時表示() Const sFile = "D3001.JPG" '…ターゲットファイル Dim wFile As Variant Dim wDate As Date With CreateObject("Shell.Application") For Each wFile In .Namespace("D:\Test1\").Items wDate = wFile.ExtendedProperty("WhenTaken") If wFile.Name = sFile Then MsgBox wFile & " 撮影日時: " & wDate Exit For End If Next End With End Sub '-----------------------------------

  • エクセルVBAで、閉じたブックを参照したい

    Excel97を使用しています。 過去のQ&Aを拝見しまして、 Application.ExecuteExcel4Macro を使うと閉じたままのブックを参照できることが判ったのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=373903 同じ要領で閉じたブック内を検索して、見つかったセルからOffset(0,-4)のセルの内容を取得するには、どのように記述したらよろしいでしょうか? Sub コード取得()  氏名 = "●● ●●"  MsgBox Worksheets("s主項目").Range(Cells(1, 5), Cells(Range("A65536").End(xlUp).Row, 5)).Find(氏名, , , xlWhole).Offset(0, -4).Value End Sub このように書いて「s主項目」シート上で実行すると、氏名に対応するコードNo.が出てきますが、これを他ブック上で氏名を入力し、「s主項目」のブックを閉じたままコードNo.を取得したいのです。 ご存知の方、どうぞよろしくお願いいたします。

  • エクセルVBAでシートの種類を取得したい

    エクセル2000です。 BOOK内の全シートに、ある処理をしようと思いますが、シートの種類によって分岐させたいのです。そのためにはシートが Worksheetか、古いですがDialogsheetか、あるいはグラフなのかを判別しなければなりません。 ためしに、 Sub test01() For Each st In Sheets st.Activate MsgBox st.Type Next End Sub としてみましたが取得できませんでした。 シートの種類を取得するにはどのような記述になるのでしょうか?

  • Excelで更新日時と更新者を表示させる

    Excel97で、ファイルの最終更新日時と最終更新者を任意のセルに表示させようとしています。 組込み関数では無理なようなので、VBAで関数を作成し始めました。 日時については、FileDateTime(パス名)で日付のシリアル番号を表示させることができましたが、これをセルの書式設定ではなく、VBA内で日付型にさせたいのです。 更新者は、BuiltinDocumentProperties(7)というのを使用するようですが、記述方法がまったくわかりません。 VBAは初心者です。 Functionステートメントを使用していますがこれ自体は間違いないでしょうか。 ご指導願います。

専門家に質問してみよう