删除char右侧的所有内容的代码都会出错

时间:2014-02-14 18:57:17

标签: vba excel-vba excel

我很想删除所有内容,包括.右侧的.,例如aaaaa.ntuthuh我得aaaaa

如果我将= Left(A1, Find(".", A1) - 1)粘贴到工作表中的单元格中,则公式可以正常工作,但在宏中我会收到错误Sub or Function not defined并突出显示Find

由于

Sub Split()
    Dim fName As String

    fName = Left(A1, Find(".", A1) - 1)
    ActiveSheet.Range("B1").Value = fName

    ' have also tyred: Range("A1").Value = "=Left(A1, Find(".", A1) - 1)"  and: Range("A2").Formula = "=Left(A1, Find(".", A1) - 1)" but throws error "." is highlighted a "Expected end of statement"

End Sub

3 个答案:

答案 0 :(得分:2)

您有两种选择:

1)使用.Formula属性

With ActiveSheet.Range("B1")
    .Formula = "=Left(A1, Find(""."", A1) - 1)"
    .Value = .Value
End With

2)使用Evaluate

fName = Evaluate("Left(A1, Find(""."", A1) - 1)")
ActiveSheet.Range("B1").Value = fName

两者都会给你相同的结果

答案 1 :(得分:2)

这是第三种选择:

Sub Splitt()
    Dim fName As String
    fName = Split(Range("A1").Value, ".")(0)
    ActiveSheet.Range("B1").Value = fName
End Sub

答案 2 :(得分:2)

您的代码应该有效,只需稍作修改即可。之前,当你应该提供要计算的范围时,左边和查找函数的值为A1。请注意,如果没有“。”,这可能会导致错误。在输入字符串中。

Sub Split()
    Dim fName As String

    fName = Left(activesheet.Range("A1"), Find(".", ActiveSheet.Range("A1")) - 1)
    ActiveSheet.Range("B1").Value = fName
End Sub

但是,另一种解决方案是创建一个函数,允许您指定要剥离的范围,并输出结果。因此,在单元格B1中,您将输入“= Splitter(A1)”

    Function Splitter(range As range) As String
        Dim fName As String
        If InStr(range.Value, (".")) = 0 Then
            Splitter = range.Value
        Else
            fName = Left(range.Value, InStr(range.Value, ".") - 1)
            Splitter = fName
        End If
    End Function