You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA提取文本文件中arrUserActivity开头的数据遇换行失效问题

在VBA中提取跨多行的arrUserActivity数据

问题场景

现有代码可正确提取单行定义的arrUserActivity数据(如下Sample 1),但无法处理多行拆分的情况(Sample 2)——原代码找到目标行后就停止读取,无法获取后续行的内容。

Sample 1(单行格式):

var arrUserActivity = [['9/13/2022 8:49:00 AM','MOA_S10EST','Firoj  Aga','Remote Desktop using VNC 2.0 ','CBM'],['9/13/2022 1:54:00 PM','MOA_S10EST','Aux Tech2','Remote Desktop using VNC 2.0','Routine']];

Sample 2(多行格式):

var arrUserActivity = [
['9/13/2022 8:49:00 AM','MOA_S10EST','Firoj  Aga','Remote Desktop using VNC 2.0 ','CBM'],
['9/13/2022 1:54:00 PM','MOA_S10EST','Aux Tech2','Remote Desktop using VNC 2.0 ','Routine']];

现有代码的局限性

原代码通过Line Input逐行读取文本,一旦找到包含var arrUserActivity的行就终止循环,只能获取目标数据的第一行,无法收集后续多行内容:

WhatToFind = "var arrUserActivity"
FromFile1 = Path + "\02-Text_Files\" + Site_Name + ".txt"
FileNum = FreeFile()
Open FromFile1 For Input As #FileNum
Do While Not EOF(FileNum)
    lngCount = lngCount + 1    'increment a counter'
    Line Input #FileNum, DataLine    ' read in data 1 line at a time'
    If InStr(1, DataLine, WhatToFind) > 0 Then    'the string is found'
        bFound = True    'set a boolean value to true'
        Exit Do    'and stop the loop'
    End If
Loop

解决方案:跨多行读取完整数据

修改代码逻辑:找到起始行后,继续读取后续所有行,直到匹配到数据结尾的];标记,将所有行拼接成完整的目标字符串。

完整代码如下:

Sub ExtractArrUserActivity()
    Dim WhatToFind As String, EndMarker As String
    Dim FromFile1 As String, FileNum As Integer
    Dim DataLine As String, FullData As String
    Dim bFound As Boolean, bEndFound As Boolean
    
    WhatToFind = "var arrUserActivity"
    EndMarker = "];" ' 数据结尾的判断标记
    FromFile1 = Path & "\02-Text_Files\" & Site_Name & ".txt" ' 用&替代+,避免字符串与数值混合错误
    
    FileNum = FreeFile()
    Open FromFile1 For Input As #FileNum
    
    bFound = False
    bEndFound = False
    FullData = ""
    
    Do While Not EOF(FileNum) And Not bEndFound
        Line Input #FileNum, DataLine
        ' 找到起始行,开始收集数据
        If InStr(1, DataLine, WhatToFind) > 0 Then
            bFound = True
            FullData = FullData & DataLine
        ' 已开始收集数据,继续拼接直到找到结尾标记
        ElseIf bFound Then
            FullData = FullData & DataLine
            ' 检查当前行是否包含结束标记
            If InStr(1, DataLine, EndMarker) > 0 Then
                bEndFound = True
            End If
        End If
    Loop
    
    Close #FileNum
    
    ' 可根据需求替换为后续处理逻辑
    If bFound And bEndFound Then
        Debug.Print "完整提取的数据:" & vbCrLf & FullData
    Else
        Debug.Print "未找到目标数据或数据不完整"
    End If
End Sub

代码说明

  1. 定义EndMarker = "];"作为数据结束的判断标志
  2. 找到起始行后,持续拼接后续行内容
  3. 读取到包含];的行时终止读取,确保拿到完整的arrUserActivity定义
  4. 用&替代+拼接路径,避免字符串与数值混合时的类型错误

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:25:51