【问题标题】:Trim Issue With VBA使用 VBA 修剪问题
【发布时间】:2016-08-13 09:13:05
【问题描述】:

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

代码的重点是将字符串从正确的位置复制到&符号之前。但是,在随机场景中,它仍会添加与号。

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

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

(澄清说明:下面显示的文本框值是来源值,而不是结果)

【问题讨论】:

  • 他们都有&?对你的目标感到困惑。
  • 编辑原帖,使其更清晰
  • 哦。因为您的trim 中的instr 正在阅读前半部分。编辑:所以它只有在短于下半部分时才有效。 Edit2:你想在& 之后找到空间,然后从那里做你的right
  • 你为什么不直接使用Mid$()函数呢?
  • 哈哈很公平 - 我已经更新了你的帖子以澄清图像,因为我这真的让我感到困惑!

标签: vba excel trim


【解决方案1】:

改用Mid$()

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

【讨论】:

  • 等等。 $ 是什么?
  • 这是一个类型字符,Trim()Left()Mid() 等方法实际上返回一个Variant - 使用$ 类型字符隐式地将返回值转换为@ 987654329@ 处理速度更快。但在现实生活中 - 可能没有任何明显的差异。好吧,我是个势利小人,那又怎样..
  • 删除赞成票和反对票并标记为势利小人。
  • 完全值得。我一点也不后悔。
  • 势利和自大都可以,只要你在任何你傲慢的事情上都很棒:D
【解决方案2】:

您当前从字符串左侧获取& 的位置,然后使用此数字从字符串右侧获取日期;相反,您应该从字符串的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

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

【讨论】:

  • 我会试试这个,让你知道你有多棒
  • 您更改的行中有语法错误。让它工作,但我必须选择一个答案,中间功能实际上是我最终要做的,。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多