具有用户定义数据的NumberFormat VBA

时间:2015-07-14 16:08:55

标签: vba excel-vba number-formatting userform user-data

我正在处理一个工作簿,该工作簿具有一定数量的模板计算,这些计算在复制的工作簿范围内多次使用。创建了一个表单对象,用户要为每个满足特定格式的计算集输入标识符。它通常遵循" 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'中的值和'前缀' LocMP是一个数字和'前缀'是所需的格式字符串。从这里开始,我尝试了几种不同的选择。第一,

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网站根本没有任何帮助。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

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

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显示正确:

Image

Read More Here

  

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