具有用户定义数据的 NumberFormat VBA

Posted

技术标签:

【中文标题】具有用户定义数据的 NumberFormat VBA【英文标题】:NumberFormat VBA With User-Defined Data 【发布时间】:2015-07-14 16:08:54 【问题描述】:

我正在处理具有一定数量模板计算的工作簿,这些模板计算在复制的工作簿范围内被多次使用。创建了一个表单对象,用户将在其中输入满足特定格式的每个计算集的标识符。它通常遵循“aaa-##0.00”,其中“aaa”是 1 到 3 个字母的字符串。然后,该表单具有一个组合框,该组合框在激活时被清除并填充,其中包含 258 个客户提供的文本可能性(以减少可能的用户错误),旁边有一个用于输入数字的文本框。单击“执行”按钮时,它会从用户表单中识别所需的选定计算,将模板工作表复制到工作簿的末尾,并在“内容”页面上的列表底部填充标识符信息。以下是相关代码:

Dim prefix As String
Dim LocMP As Double

'The digits are entered in txtLocMP
LocMP = Val(txtLocMP.Value)

'mpPrefixLst is the combo box, with 'prefix' being the desired custom format
prefix = mpPrefixLst.Text & "-#0.00"

调试时,存储在“LocMP”和“prefix”中的值看起来令人满意,LocMP 是一个数字,“prefix”是所需的格式字符串。从这里开始,我尝试了几种不同的选择。第一个,

With Contents
'Contents is type WorkSheet, locCount is the number of entries in Contents
'including the offset for the header
   .Unprotect
          'Other unrelated functions
   .Range("C" & locCount).Value = Format(LocMP, prefix)
          'Other unrelated functions
   .Protect
End With

第二个,

With Contents
          'Other unrelated functions
   With .Range("C" & locCount)
      .Value = LocMP
      .NumberFormat = prefix
   End With
          'Other unrelated functions
End With

这些选项虽然对我来说都有意义,但都不会产生预期的结果。例如,如果为“mpPrefixLst”提供的文本是“SFE”,那么我的“前缀”值显示它等于“SFE-#0.00”,这完全符合预期。当为 LocMP 输入 555.44 的值时,更改后的单元格中的结果是“36FE-#0.00”,而所需的结果是“SFE-555.44”!我已经在这个网站(和其他网站)上搜索了一个我可以适应的近似解决方案,而 MSDN 网站根本没有帮助。任何帮助将不胜感激!

【问题讨论】:

正如我在编辑中所说,在每个文字字符之间添加一个反斜杠。 i.imgur.com/FFRZr5G.png 【参考方案1】:

在每个字符之间加一个反斜杠:

Sub Test()
Cells(1, 1).NumberFormat = GetFixedPrefix("SAE-") & "#0.00"
End Sub

Function GetFixedPrefix(prefix as String) as String
Dim x, fixedPrefix
fixedPrefix = ""
For x = 1 to Len(prefix)
    fixedPrefix = fixedPrefix & "\" & Mid(prefix,x,1)
Next x
GetFixedPrefix = fixedPrefix
End Function

这使您的 NumberFormat = \S\F\E\-#0.00 应该正确显示:

Read More Here

反斜杠。反斜杠\ 之后出现的任何字符都将显示为文字,即使它可能被保留为运算符(例如%)。格式代码为#.00% 的数字0.75 将格式为75.00%,但格式代码为#.00\% 的数字将格式为.75%,即。格式代码不会使用% 作为运算符,而是作为文字。

【讨论】:

有效!我想知道为什么它从一开始就没有被视为文本文字? 我的猜测是:E- followed by atleast one "0" character (in format code), displays the number in scientific notation 嗯...我得稍微调整一下。

以上是关于具有用户定义数据的 NumberFormat VBA的主要内容,如果未能解决你的问题,请参考以下文章

NumberFormat 不喜欢超过 340 位小数

从 EditText 获取数据输入时,导致应用程序崩溃 Android 的 NumberFormat 错误

Java SE基础部分——常用类库之NumberFormat

Intl.NumberFormat 0或2个小数位

在共享包中使用 GWT 的 NumberFormat 类

如何引用VB6.0编 用户自定义控件