字符串中的子字符串

问题描述:

我想从字符串中选择一个子字符串。字符串中的子字符串

例如:我想从下面的字符串中选择从“T”开始的表号。

变化表T682(SAP TABLE)

表的起始位置不一样,即第17位,而在表名中的字符不是恒定的。所以我基本上需要一个从第17个位置选取的子字符串,直到它找到一个空格。我正在使用下面的代码,但它似乎并没有工作。

Position = InStr(1, A, " ") 
TableNo = Mid(A, 17, Position) 
+0

不前空间后总是有开放的支架? –

+0

@ DarrenBartrup-Cook是的它的确如此 –

+0

我想说你可以在支架上使用INSTR,但是字符18之后的第一个空格也可以工作。 –

以下是你需要做的:

Dim A As String 
Dim StartPosition As Integer 
Dim EndPosition As Integer 

A = "Changes in table T682 (SAP TABLE)" 
StartPosition = InStr(1, A, "T") 
EndPosition = InStr(StartPosition, A, " ") 
tableno = Mid(A, StartPosition, EndPosition - StartPosition) 

空间T682之前字符17,人品18表开始,所以我们只需要找到之后的空间。

GetTable函数也可以用作工作表函数,例如,在B1单元格中输入=GetTable(A1)返回T682。

Sub Test() 

    Debug.Print GetTable("Changes in table T682 (SAP TABLE)") 

End Sub 

Public Function GetTable(Target As Range) As String 

    GetTable = Mid(Target, 18, InStr(18, Target, " ") - 18) 

End Function 

有在你的代码两个错误:
1. INSTR的第一个参数应该是18.你想找到的起点后的第一个空间
2月中旬的最后一个参数是人物

的号码,这样你的代码应该是这个样子:

Position = InStr(18, a, " ") 
TableNo = Mid(a, 18, Position - 18) 
+0

我收到一个错误,提示“无效的过程调用或参数”。 –

+0

如果您尝试执行一些无效的操作,例如获取负数字符,就会发生这种情况。查看代码每一步中的值。我在这里猜测,但我认为你需要了解VBE中的调试可能性 – Sam

另一种方式

s = "Changes in table T682 (SAP TABLE)" 
Debug.Print Trim(Split(Split(s, "(")(0), "T")(1)) 

我假设以下。字符串的格式将是恒定的,即

  1. 将不会有其他资本T(
  2. 将只有1 (
  3. 数量T*将是(