我有以下excel公式
IFERROR(MID(B7;FIND(" ";B7)+1;1);"")
我现在想将其转换为VBA,但是在这里集成Find函数时遇到了麻烦。这是我到目前为止的内容
IfError(Mid(Sheets("MySheet").Cells(x, 7),Sheets("MySheet").Cells(x, 7).Find " " + 1, 1), "")
但是这显然是不正确的。有人可以帮我吗?
类似这样的名称,例如get_first_char_after_space("testing xys")
Function get_first_char_after_space(strInput As String) As String
If InStr(1, strInput, Chr(32)) > 0 Then
get_first_char_after_space = Left(Split(strInput, Chr(32))(1), 1)
Else
get_first_char_after_space = vbNullString
End If
End Function
您可以在以下SO问题上找到IFERROR的解决方案:https://stackoverflow.com/a/29390944/6908282。
并且VBA具有Range.Find方法,可用于替换FIND公式。文档链接:https://docs.microsoft.com/en-us/office/vba/api/excel.range.find
这里是一个UDF,可以完成您的工作表功能。如您所见,可以避免在VBA中发生错误。我认为整个功能可以压缩为一行,但是可能带来的任何好处都将以可读性和稳定性为代价。实际上,代码非常健壮。毫无疑问,它很容易移植到更大的项目中。
Function NextChar(Cell As Range) As String
' IFERROR(MID(B7;FIND(" ";B7)+1;1);"")
Dim Txt As String
Dim n As Integer
Txt = Cell.Value
n = InStr(Txt, " ")
If n Then FindBlank = Mid(Txt, n + 1, 1)
End Function