.txt文件中的回车符-VBA宏

.txt文件中的回车符-VBA宏,vba,carriage-return,Vba,Carriage Return,我需要从一个目录中的所有.txt文件中提取“总旅行津贴、机票和租车费”数据,也就是sMarker5,准确无误,我当前的代码将用于该行,金额不到1000美元。我猜这是因为这一行中超过1000美元的文件总是在回车之后。所以我的问题是。。。我应该如何修改我的代码,使它可以工作的任何数额 我的下一个问题是。。。我还需要提取“租车”的数据,但是,“租车”一词在我实际想要的“租车$”之前出现过很多次,它位于.txt文件末尾附近。。。有没有一种方法可以通过我的代码实现这一点 提前感谢堆 更新: 我尝试将Dav

我需要从一个目录中的所有.txt文件中提取“总旅行津贴、机票和租车费”数据,也就是sMarker5,准确无误,我当前的代码将用于该行,金额不到1000美元。我猜这是因为这一行中超过1000美元的文件总是在回车之后。所以我的问题是。。。我应该如何修改我的代码,使它可以工作的任何数额

我的下一个问题是。。。我还需要提取“租车”的数据,但是,“租车”一词在我实际想要的“租车$”之前出现过很多次,它位于.txt文件末尾附近。。。有没有一种方法可以通过我的代码实现这一点

提前感谢堆

更新:

我尝试将David的代码应用于另一个问题:为了获取在返回后有时具有美元价值的行总旅行津贴、机票和租车费用,请参见上面的代码,它适用于没有返回的行,即美元金额小于1000美元。然而,在我按照David的建议修改代码之后。。。我得到一个运行时错误“5”:针对TOTALTRAVEL=instrevText、sMarker5、endParse行的过程调用或参数无效

我不确定我做错了什么

我想你需要第二次到最后一次租车

试试这个:

在GrabData例程中添加一些新常量

Const sMarker8 As String = "Car Hire"
'This is what comes AFTER "Car Hire". It only appears once in the example file
Const sTerminate As String = "PDTA (Payable via salary)"  
然后,您可以使用这两个字符串计算租车的位置:

'Find out what comes AFTER "Car Hire"
endParse = InStr(1, text, sTerminate)
'Now, work backwards from that position to find the first instance of "Car Hire" 
' that appears *before* the sTerminate string.
CarHire = InStrRev(text, sMarker8, endParse)
然后,使用Mid和Replace,您可以提取租车的数字部分:

oRng.Offset(1, 12).Value = Replace( _
        Trim(Mid(text, CarHire, endParse - CarHire), sMarker8, vbNullString))
在示例文件中,它返回$0.00


我认为这应该是可行的,即使美元金额是由一个运费返还分开的

你想找的租车人总是最后一次吗?如果是这样,考虑使用InStruv函数查找最后一个事件。如果没有看到文本文件的一些示例,您在这里得到的任何建议基本上都是瞎猜。回车特别有问题,因为大多数文本文件都是用回车分隔行的,因此,如果在扫描时试图查找的值不在行上,则必须从整个文件中对其进行解析。显然,这会变得更棘手……嗨,大卫,谢谢你的评论。我已将公共链接附加到示例文本文件。是的,租车总是最后一次出现。这是一个带有return的.txt文件:好的,这不是一个普通的文本文件,但我相信它仍然可以是dune。稍后我会尝试看一看,并提供一些建议。哦,对不起!我试图用“添加评论”来回应,但我达到了字数限制。。。我会再次更新我的问题!非常抱歉!
Const sMarker8 As String = "Car Hire"
'This is what comes AFTER "Car Hire". It only appears once in the example file
Const sTerminate As String = "PDTA (Payable via salary)"  
'Find out what comes AFTER "Car Hire"
endParse = InStr(1, text, sTerminate)
'Now, work backwards from that position to find the first instance of "Car Hire" 
' that appears *before* the sTerminate string.
CarHire = InStrRev(text, sMarker8, endParse)
oRng.Offset(1, 12).Value = Replace( _
        Trim(Mid(text, CarHire, endParse - CarHire), sMarker8, vbNullString))