VBA Right-Function返回错误的数据类型

时间:2015-10-14 20:28:34

标签: vba

我编写了一个非常简单的代码,它返回一个范围内每个活动单元格的最后6个字符。

代码工作得很好,直到找到一个特定的单元格,其中要返回的字符应为:" MARC01"。不幸的是,它返回一个日期类型字符(01.Mrz)。

通过使用普通的excel公式,它工作正常,这就是为什么我希望它也能用于宏。

在这里,您可以看到我的代码,该代码从列#34; A"并在#34; B":

栏中输入
    Range("B12").Activate

    Do
      ActiveCell.Value = Right((ActiveCell.Offset(0, -1).Value), 6)
      ActiveCell.Offset(1, 0).Activate

    Loop Until ActiveCell.Offset(0, -1).Value = 0

3 个答案:

答案 0 :(得分:3)

Excel喜欢将任何看似可能日期的内容更改为日期。为了强制这种情况发生,请在公式前添加$ export PYTHONPATH=. $ python parser.py hello hello

"'"

这将迫使它留下文字。不利的一面是,如果它是一个数字,它将被保存为文本。

答案 1 :(得分:3)

Excel喜欢尝试解释某些数据,而不是将其保留原样。它特别适用于看起来像日期和数字条目的字符串。

两种解决方法是

  • 将文本前缀字符放在字符串前面。这通常是单引号。 (参见斯科特的代码答案)
  • 在将值放在那里之前将单元格格式化为文本。
 Sub foo()
 Range("B12").Activate

    Do
      ActiveCell.NumberFormat = "@"
      ActiveCell.Value = Right((ActiveCell.Offset(0, -1).Formula), 6)
      ActiveCell.Offset(1, 0).Activate

    Loop Until ActiveCell.Offset(0, -1).Value = 0
End Sub

答案 2 :(得分:0)

有了这个简单的目标,我就不知道你为什么需要VBA循环。

您可以将formular1c1质量设置为WITH Cte AS( SELECT *, Rn = ROW_NUMBER() OVER(PARTITION BY ProductCode ORDER BY (SELECT NULL)) FROM Product ) SELECT ProductCode = CASE WHEN Rn = 1 THEN c.ProductCode ELSE '' END, Color FROM Cte c ORDER BY c.ProductCode

=RIGHT(RC[-1],6)