Excel VBAstring操作

我需要做一些string操作,它有点击败我真正的好。

我需要从string中提取一些子string。

这是string:

"Modified by: Coanda Oana Amalia coanoa1 (coanoa1) on Mon Oct 14 08:53:11 EEST 2013 Modified Fields: Actual target date: 17.10.2013 GMT+02:00 Effects of change: --------------------------------- [ErrH] Regenerate error configuration. Effort: 2h Design: 1h --------------------------------- [Ist] Rename error. Effort: 1h Design: 1h --------------------------------- [RTE] Rename the runnable according to the change. Check internal errors mapping. Effort: 2h Design: 1h" 

我需要提取每个模块,一个模块的意思是从---------------------------------Design: 1h 。 所以子串应该是这样的:

 "[RTE] Rename the runnable according to the change. Check internal errors mapping. Effort: 2h Design: 1h" 
 "[ErrH] Regenerate error configuration. Effort: 2h Design: 1h" 
 "[Ist] Rename error. Effort: 1h Design: 1h" 

请帮忙!

您可以使用InStr和Mid函数:

 Dim s as String, sPart as String, remainingString as String s = "your initial string here" remainingString = s While(InStr(1,remainingString,"--") > 0) sPart = Mid(remainingString , InStr(1,remainingString ,"--"), _ InStr(1,remainingString ,"Design: 1h") - InStr (1,remainingString ,"--") + Len("Design: 1h")) remainingString = Mid(remainingString , _ InStr(1,remainingString ,"Design: 1h") + Len("Design: 1h")) Msgbox sPart '' do whatever with sPart Wend 

您可以使用Splitfunction,并使用您的'------'string作为分隔符。 例如:

 Dim bigText As String bigText = ... Dim allModules() As String allModules = Split(bigText, "---------------------------------") 

现在allModules是一个持有每个模块的string数组,但跳过第一个(这是文本到第一个“—-”)。

如果'------'string不是固定的并且必须从相同的文本中读取,那么使用InStrsearch“变更的效果”,find下面的行尾(也是InStr ),并使用Mid提取'------' 。 喜欢:

 Const delimiterPreAmble As String = "Effects of change: " Dim startDelimiterPos As Long startDelimiterPos = InStr(bigText, delimiterPreAmble) + Len(delimiterPreAmble) Dim endDelimiterPos = InStr(startDelimiterPos, bigText, vbNewLine) Dim moduleDelimiter As String moduleDelimiter = Mid(bigText, startDelimiterPos, endDelimiterPos - startDelimiterPos) 

并使用moduleDelimiter而不是Split中的'-----'string。