Excel 从txt文件中提取时间戳

Excel 从txt文件中提取时间戳,excel,vba,Excel,Vba,我有一个带有用户输入时间戳的txt文件日志。我正在编写一个代码,我可以在txt文件中搜索一个单词,并提取与该单词相关的时间戳。时间戳看起来像这样 +work=2019-08-30|08:41| [IRP] Diagnose 我希望能够输入单词(在本例中为Diagnose),程序从行中提取时间戳并将其放入单元格A1中。我当前的代码可以找到Diagnose,如果它是单独的(即没有时间戳),但由于某些原因,无法识别时间戳行中的Diagnose。这是我已经开始的代码。我正在寻找关于如何在我的搜索消息框

我有一个带有用户输入时间戳的txt文件日志。我正在编写一个代码,我可以在txt文件中搜索一个单词,并提取与该单词相关的时间戳。时间戳看起来像这样

+work=2019-08-30|08:41| [IRP] Diagnose
我希望能够输入单词(在本例中为Diagnose),程序从行中提取时间戳并将其放入单元格A1中。我当前的代码可以找到Diagnose,如果它是单独的(即没有时间戳),但由于某些原因,无法识别时间戳行中的Diagnose。这是我已经开始的代码。我正在寻找关于如何在我的搜索消息框中键入诊断的建议,A1单元格中的结果是2019-08-30 | 08:41 |感谢您提供的任何帮助

Sub Scan()

Dim stdesfile As String
Dim stdataline As String


stdesfile = Application.GetOpenFilename
Find = InputBox("which word")
Open stdesfile For Input As #1

Do While Not EOF(1)
   Input #1, stdataline
   If stdataline = Find Then
      bFound = True
      Exit Do
   End If
Loop

If bFound = True Then
   MsgBox "Item Found"
Else
  MsgBox "Item not found"
End If

Close #1

End Sub
尝试以下代码(假设日期格式固定为17个字符长度):

尝试以下代码(假设日期格式固定为17个字符长度):


如果stdataline类似于“*”&Find Then
如果InStr(31,stdataline,Find)>0则(假设时间戳总是相同长度)感谢您的帮助,这两种解决方案都是pull+work=2019-08-30 | 08:41 |[IRP],如何将时间戳打印到单元格a?我曾考虑使用Range(“A1”).Value=Mid(stdataline,Find+7,23),希望只捕获2019-08-30 | 08:41 |但我一直得到一个不匹配。很抱歉,如果这是基本的vba技能,请继续使用
如果stdataline像“*”&Find Then
如果InStr(31,stdataline,Find)>0 Then(假设时间戳总是相同长度)谢谢您的帮助,两种解决方案pull+work=2019-08-30 | 08:41 |[IRP],我如何将时间戳打印到单元格a?我曾考虑使用Range(“A1”).Value=Mid(stdataline,Find+7,23),希望只捕获2019-08-30 | 08:41 |但我一直得到一个不匹配。抱歉,如果这是基本的,我的vba技能仍然在工作,那么变量Find和stdataline不是很难编码吗?我希望它是流动的,这样我就可以键入我要查找的任何单词,它检索的时间戳总是相同的长度和格式,然后将其打印到单元格中A1@user11536789在这里,我已将我的修改放在您的代码中。@userMichałTurczyn代码使用范围(“A1”)非常有效。Value=dt我可以将我的值发送到单元格A1。我确实有一个问题,虽然我在修补它以更好地理解它,但为什么在我执行硬代码Find=Diagnose时输出会发生变化?我之所以问这个问题,是因为在我继续构建代码时,我想使用Application.FileDialog(msoFileDialogFolderPicker)来选择一个包含数百个日志的文件夹,并让它在a列中节省诊断时间。难道变量Find和stdataline不是很难编码吗?我希望它是流动的,这样我就可以键入我要查找的任何单词,它检索的时间戳总是相同的长度和格式,然后将其打印到单元格中A1@user11536789在这里,我已将我的修改放在您的代码中。@userMichałTurczyn代码使用范围(“A1”)非常有效。Value=dt我可以将我的值发送到单元格A1。我确实有一个问题,虽然我在修补它以更好地理解它,但为什么在我执行硬代码Find=Diagnose时输出会发生变化?我之所以这样做,是因为在继续构建代码时,我希望使用Application.FileDialog(msoFileDialogFolderPicker)来选择一个包含数百条日志的文件夹,并让它在a列中节省诊断时间。
Sub Scan()

Dim stdesfile As String
Dim stdataline As String
Dim idx As Long, dt As String

stdesfile = Application.GetOpenFilename
Find = InputBox("which word")
Open stdesfile For Input As #1

Do While Not EOF(1)
   Input #1, stdataline
   If InStr(1, stdataline, Find) > 0 Then
      idx = InStr(1, stdataline, "=")
      dt = Mid(stdataline, idx + 1, 17)
      bFound = True
      Exit Do
   End If
Loop

If bFound = True Then
   MsgBox "Item Found, date: " + dt
Else
  MsgBox "Item not found"
End If

Close #1

End Sub