字符串中的子字符串
我想从字符串中选择一个子字符串。字符串中的子字符串
例如:我想从下面的字符串中选择从“T”开始的表号。
变化表T682(SAP TABLE)
表的起始位置不一样,即第17位,而在表名中的字符不是恒定的。所以我基本上需要一个从第17个位置选取的子字符串,直到它找到一个空格。我正在使用下面的代码,但它似乎并没有工作。
Position = InStr(1, A, " ")
TableNo = Mid(A, 17, Position)
以下是你需要做的:
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)
我收到一个错误,提示“无效的过程调用或参数”。 –
如果您尝试执行一些无效的操作,例如获取负数字符,就会发生这种情况。查看代码每一步中的值。我在这里猜测,但我认为你需要了解VBE中的调试可能性 – Sam
另一种方式
s = "Changes in table T682 (SAP TABLE)"
Debug.Print Trim(Split(Split(s, "(")(0), "T")(1))
我假设以下。字符串的格式将是恒定的,即
- 将不会有其他资本
T
前(
- 将只有1
(
- 数量
T*
将是(
不前空间后总是有开放的支架? –
@ DarrenBartrup-Cook是的它的确如此 –
我想说你可以在支架上使用INSTR,但是字符18之后的第一个空格也可以工作。 –