Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8755 / 13644 ツリー ←次へ | 前へ→

【31336】日付 たかし 05/11/17(木) 20:21 質問[未読]
【31337】Re:日付 Kein 05/11/17(木) 20:37 回答[未読]
【31349】Re:日付 Jaka 05/11/18(金) 10:14 回答[未読]
【31366】Re:日付 Kein 05/11/18(金) 14:38 回答[未読]
【31373】Re:日付 たかし 05/11/18(金) 15:14 質問[未読]
【31376】Re:日付 Kein 05/11/18(金) 15:26 回答[未読]
【31391】Re:日付 たかし 05/11/18(金) 16:26 お礼[未読]

【31336】日付
質問  たかし E-MAIL  - 05/11/17(木) 20:21 -

引用なし
パスワード
   お世話になっております。
保存されているファイル(何でもいいです。作成しているものは
txtファイルなのですが・・・)には、
プロパティの情報に”更新日時”があると思うのですが、
それをマクロで読み出し、たとえばA1セルに書き出すって
事はできますでしょうか?
どなたか分かる方がいらっしゃれば、教えていただけないでしょうか?
よろしくお願いします。

【31337】Re:日付
回答  Kein  - 05/11/17(木) 20:37 -

引用なし
パスワード
   アクティブシートの A1 セルに、マクロ実行ブックの更新日時を表示するなら

Sub Test_TM()
  Range("A1").Value = _
  Format(FileDateTime(ThisWorkbook.FullName), "yyyy/m/d h:m:s")
  Columns(1).AutoFit
End Sub

と、します。
FileDateTime関数の引数に、ファイルのフルパスを渡せば良いのです。

【31349】Re:日付
回答  Jaka  - 05/11/18(金) 10:14 -

引用なし
パスワード
   備考(ブックのみ対象)
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=30134;id=excel

本命
http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=ntr;tree=7851;id=Excel

【31366】Re:日付
回答  Kein  - 05/11/18(金) 14:38 -

引用なし
パスワード
   他には、FSOで取得する方法もあります。

Dim FSO As Object
Const MyF As String = _
C:\Documents and Settings\User\My Documents\Test.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetFile(MyF).DateLastModified
Set FSO = Nothing

などとします。

【31373】Re:日付
質問  たかし E-MAIL  - 05/11/18(金) 15:14 -

引用なし
パスワード
   Keinさん、jakaさん、ありがとう御座います。
返信が遅くなり申し訳ありません。
早速試してみます。
先日この質問を書く前に、検索してみたのですが、うまく引っかからず
質問したのですが、そのあとにいくつか似たような事例を見つけることが
できました。しかし、そこではいまいち理解できず、回答を頂けて助かりました。

そこで、FileDateTimeのヘルプを確認してみたのですが、よく分からず、困っていました。
下記に作成したマクロを載せます。
Sheets(1).Cells(rowcount + i, 1) = 最終更新日
に、取得してきたファイルの最終更新日を書き込むにはどうしたら良いでしょうか?
取得する際に、複数のファイルを選択できるようにしたいです。
ちなみにこのマクロは、他人が作成したものを書き換えて作成しているので、
私が全ての意味を理解しているわけではありません。
特に "fp"と"UBound(fp)"で、どのような内容が取得できるのかも分かっていません。(UBound(fp)はファイルの個数?)
教えていただけると助かります。
以上、よろしくお願いいたします。


Sub 取込(inputmode As Integer)
  Dim fp As Variant
  Dim fso As Object, fnow As Object
  Dim temp As Variant, FCOFF As Variant, FC2OFF As Variant, AISOFF As Variant
  Dim LVOFX As Variant, LVOFY As Variant, LVONX As Variant, LVONY As Variant
  Dim i As Integer, j
  Dim rowcount
  
 
  Const ForReading = 1, ForWriting = 2, ForAppending = 8
  fp = Application.GetOpenFilename(MultiSelect:=True, _
      Title:=" ログファイルを選択して下さい(CtrlやShiftキーを使って複数選択可)")
    If Not IsArray(fp) Then
      MsgBox ("処理を中止します")
      Exit Sub
    End If
    
  Set fso = CreateObject("Scripting.FileSystemObject")
  DoEvents

  For i = 1 To UBound(fp)
    Set fnow = fso.OpenTextFile(fp(i), ForReading)
    Do While fnow.AtEndOfStream <> True
      temp = fnow.readline

'      ここに取得したファイルの最終更新日を入れたい。
'        Sheets(1).Cells(rowcount + i, 1) = 最終更新日

      If temp Like "*fcsadj.Dnocalib*" Then
        FCOFF = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 2) = FCOFF(1)
        DoEvents
        
      ElseIf temp Like "*Calib. Offset (FC2)*" Then
        FC2OFF = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 3) = FC2OFF(1)

      ElseIf temp Like "*fcsadj.Dcalib_ais*" Then
        AISOFF = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 4) = AISOFF(1)
        
      ElseIf temp Like "*lvladj.off.dx*" Then
        LVOFX = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 5) = LVOFX(1)
        
      ElseIf temp Like "*lvladj.off.dy*" Then
        LVOFY = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 6) = LVOFX(1)
        
      ElseIf temp Like "*lvladj.on.dx*" Then
        LVONX = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 7) = LVOFX(1)
        
      ElseIf temp Like "*lvladj.on.dy*" Then
        LVONY = Split(Right(temp, 10), "=")
        Sheets(1).Cells(rowcount + i, 8) = LVOFX(1)
      End If
      
    Loop
    fnow.Close
    Set fnow = Nothing
    Call Display_MyProgressBar(i, UBound(fp))
    DoEvents
  Next i
End Sub

▼Kein さん:
>他には、FSOで取得する方法もあります。
>
>Dim FSO As Object
>Const MyF As String = _
>C:\Documents and Settings\User\My Documents\Test.txt"
>
>Set FSO = CreateObject("Scripting.FileSystemObject")
>MsgBox FSO.GetFile(MyF).DateLastModified
>Set FSO = Nothing
>
>などとします。

【31376】Re:日付
回答  Kein  - 05/11/18(金) 15:26 -

引用なし
パスワード
   そのコードは、更新の日付を取得するというより、テキストファイルの中身を
エクセルのシートに展開するためのもののようですが、理解されてますか ?
もし選択した複数のテキストファイルの更新日を、アクティブシートの A列に並べて
入力したいということなら

Sub Get_DLM()
  Dim MyF As Variant
  Dim i As Integer
  Dim FSO As Object
  Dim GetD As Date

  MyF = Application _
  .GetOpenFilename("テキストファイル(*.txt),*.txt", MultiSelect:=True)
  If VarType(MyF) = 11 Then Exit Sub
  Set FSO = CreateObject("Scripting.FileSystemObject")
  For i = LBound(MyF) To UBound(MyF)
   GetD = FSO.GetFile(MyF(i)).DateLastModified
   Cells(i, 1).Value = Format(GetD, "yyyy/m/d h:m")
  Next i
  Set FSO = Nothing
End Sub

というコードで出来ます。

【31391】Re:日付
お礼  たかし E-MAIL  - 05/11/18(金) 16:26 -

引用なし
パスワード
   Keinさん

ありがとう御座いました。
うまくいきました。
textファイルの中身をエクセルシートに展開するものということは
理解できており、取得したtextファイルの中身に日付が表示されて
いなかったので、更新日を取得しようとしていました。
ひとつ勉強になりました。ありがとう御座いました。
次回から使えるように、さらに勉強しておきます。

8755 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free