Trim VBA 问题

Trim Issue With VBA

所以下面的代码有时会起作用,有时它会添加我试图从文本字符串中删除的符号(到复制缓冲区)。

代码的要点是将字符串从正确的位置复制到与号之前。但是,在随机情况下,它仍然会添加符号。

Private Sub Block1_Enter()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim MyData As New DataObject
    Dim this As String
    Dim oldxt As String
    oldtxt = Block1.Text
    If InStr(Block1.Text, "&") > 0 Then
        this = Trim(Right(Block1.Text, InStr(Block1.Text, "&") - 1))
        Block1.Text = "End Date Copied" & this
        MyData.SetText this
        MyData.PutInClipboard
        Application.Wait (Now + #12:00:02 AM#)
        Block1.Text = oldtxt
    End If
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

有人可以尝试解释一下为什么有时有效有时无效吗?下面是一张图片,其中包含两个无法正常工作的示例

(注意说明:下面显示的文本框值是 source 值,而不是结果)

您目前正在从字符串左侧获取 & 的位置,然后使用此数字从字符串右侧获取日期;相反,您应该从字符串的 Len 中减去 &Instr 值,以获得剩余的字符。试试这个:

Private Sub Block1_Enter()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim MyData As New DataObject
    Dim this As String
    Dim oldxt As String
    oldtxt = Block1.Text
    If InStr(Block1.Text, "&") > 0 Then
        this = Trim(Right(Block1.Text, (Len(Block1) - InStr(Block1.Text, "&") - 1))
        Block1.Text = "End Date Copied" & this
        MyData.SetText this
        MyData.PutInClipboard
        Application.Wait (Now + #12:00:02 AM#)
        Block1.Text = oldtxt
    End If
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

特别是那些日期是错误的原因是因为第二个日期的字符长度比第一个日期的字符长度短。

改用Mid$()

this = Trim$(Mid$(Block1.Text, InStr(Block1.Text, "&") +  1))