NumberFormat VBA 带有用户定义的数据

NumberFormat VBA With User-Defined Data

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

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",那么我的 'prefix' 值显示它等于 "SFE-#0.00",这完全符合预期。当为 LocMP 输入值 555.44 时,更改单元格中的结果为“36FE-#0.00”,而所需结果为 "SFE-555.44"!我已经在这个站点(和其他站点)上搜索了一个我可以适合的近似解决方案,而 MSDN 网站根本没有帮助。任何帮助将不胜感激!

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

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

Backslash. Any character appearing after backslash \ will display as a literal, even though it may be reserved as an operator (say, %). The number 0.75 with the format code #.00% will format to 75.00%, but with the format code #.00\% it will format to .75%, ie. format code will not use % as operator but as a literal.