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))
所以下面的代码有时会起作用,有时它会添加我试图从文本字符串中删除的符号(到复制缓冲区)。
代码的要点是将字符串从正确的位置复制到与号之前。但是,在随机情况下,它仍然会添加符号。
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))