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
代码说明
- 定义
EndMarker = "];"作为数据结束的判断标志 - 找到起始行后,持续拼接后续行内容
- 读取到包含
];的行时终止读取,确保拿到完整的arrUserActivity定义 - 用
&替代+拼接路径,避免字符串与数值混合时的类型错误
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

