Nếu tôi có cột này:trội chiết xuất văn bản vba- giữa 2 nhân vật
ColA
-----
NUMBER(8,3)
NUMBER(20)
Tôi cần một hàm VBA rằng sẽ đi (chú ý những bắt đầu và chuỗi cuối sẽ chỉ bao giờ xuất hiện một lần trong một tế bào):
extract_val (ô, start_str, end_str)
ie. extract_val (A1, "(", ")") và cho kết quả:
8,3
20
Tôi chỉ cần sử dụng chức năng này trong mã VBA khác không bằng cách đặt nó như là một công thức trên bảng.
CẬP NHẬT (nhờ vào các câu trả lời, tôi giải quyết trên :)
---------------------------
Public Function extract_value(str As String) As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String
On Error Resume Next
openPos = InStr(str, "(")
On Error Resume Next
closePos = InStr(str, ")")
On Error Resume Next
midBit = mid(str, openPos + 1, closePos - openPos - 1)
If openPos <> 0 And Len(midBit) > 0 Then
extract_value = midBit
Else
extract_value = "F"
End If
End Function
Public Sub test_value()
MsgBox extract_value("NUMBER(9)")
End Sub
Bạn có thể muốn làm cho dòng closePos bắt đầu ở vị trí mà nó tìm thấy openPos, nếu không bạn có thể tìm thấy một khung đóng TRƯỚC KHI mở khung, nhưng cho ví dụ của bạn điều này là không thể. – harag
gợi ý hơi phạm vi: http://stackoverflow.com/questions/2757477/trap-error-or-resume-next –