如何持久格式化TextBox以显示数值?

时间:2013-11-04 14:16:10

标签: excel vba excel-vba ms-office

我确信这是一个简单的问题,答案很简单,但我找不到。

我继承了一个我必须解决的电子表格。编写它的人大量使用VBA和VBA UserForms来输入数据。在一种形式上,输入文本和数字信息,然后将其保存到特定工作表上的记录中。此电子表格用于记录项目信息。它被复制,并一次又一次地重新复制。每次重新复制,它都会被清除并用于下一个项目。

用户向我发送了其中一个主要项目的电子表格。 VBA,数据输入UserForm有一个问题。一个TextBox,接受文字或数字,总是将数字重新格式化为退出字段时的日期!?我已经三倍检查了VBA代码。没有与此字段相关的特殊OnEnterOnExit代码重新格式化数据。此外,我在设计器中找不到与Format关联的TextBox属性。

我是C / C#开发人员,而不是VBA开发人员。不过,这个“简单”的IDE让我难过。我找不到重新格式化TextBox显示值的属性。

如何修复TextBox以便它持久地将数字解释为数字而不是日期?

进一步说明

值得一提的是两件事。首先,用户不能修改这些表单或VBA代码。底层模块受密码保护,只有我自己和几个经理知道密码。此外,没有人触及代码,因为我是公司内唯一的开发人员,每个人都有点害怕他们可能会破坏某些东西。

其次,文件中的某些内容可能已损坏。当该文件发送给我时,用户还提到他正在处理的工作表已重命名。由于WorkSheet选项卡已重命名为随机十六进制字符串值,因此似乎某些内容无法正确保存。

除了这两个问题之外,这个表格上的所有内容似乎都正常运作。任何帮助或指导将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用 cLng

强制使用正确的格式

首先在单元格A1中输入= TODAY(),然后运行:

Sub TextBoxIssue()
    With ActiveSheet.Shapes("TextBox 1").TextFrame.Characters
        .Text = Range("A1").Value
    End With

    MsgBox "However when we use cLng......"

    With ActiveSheet.Shapes("TextBox 1").TextFrame.Characters
        .Text = CLng(Range("A1").Value)
    End With
End Sub

答案 1 :(得分:1)

大多数情况下,代码都会在退出文本框时格式化该文本。你还没找到它。如果您进入Userforms类模块并从左下拉列表中选择文本框,则可以在右侧下拉列表中看到所有事件。粗体事件正在使用中。我假设你已经检查了所有这些,但这是开始的地方。

接下来,查找使用WithEvents关键字的自定义类模块。它们可以触发userform的类模块之外的事件。

最后,在代码中搜索=Format(tbxName.Text,"mm/dd/yyy")的所有实例或某些此类代码。在某处,代码可能正在使用Format函数来填充该文本框。