我确信这是一个简单的问题,答案很简单,但我找不到。
我继承了一个我必须解决的电子表格。编写它的人大量使用VBA和VBA UserForms来输入数据。在一种形式上,输入文本和数字信息,然后将其保存到特定工作表上的记录中。此电子表格用于记录项目信息。它被复制,并一次又一次地重新复制。每次重新复制,它都会被清除并用于下一个项目。
用户向我发送了其中一个主要项目的电子表格。 VBA,数据输入UserForm有一个问题。一个TextBox
,接受文字或数字,总是将数字重新格式化为退出字段时的日期!?我已经三倍检查了VBA代码。没有与此字段相关的特殊OnEnter
或OnExit
代码重新格式化数据。此外,我在设计器中找不到与Format
关联的TextBox
属性。
我是C / C#开发人员,而不是VBA开发人员。不过,这个“简单”的IDE让我难过。我找不到重新格式化TextBox
显示值的属性。
如何修复TextBox
以便它持久地将数字解释为数字而不是日期?
进一步说明
值得一提的是两件事。首先,用户不能修改这些表单或VBA代码。底层模块受密码保护,只有我自己和几个经理知道密码。此外,没有人触及代码,因为我是公司内唯一的开发人员,每个人都有点害怕他们可能会破坏某些东西。
其次,文件中的某些内容可能已损坏。当该文件发送给我时,用户还提到他正在处理的工作表已重命名。由于WorkSheet选项卡已重命名为随机十六进制字符串值,因此似乎某些内容无法正确保存。
除了这两个问题之外,这个表格上的所有内容似乎都正常运作。任何帮助或指导将不胜感激。
答案 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函数来填充该文本框。