0

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

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

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

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

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

进一步说明

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

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

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

4

2 回答 2

1

You can force the proper format by using cLng:

First enter =TODAY() in cell A1 and then run:

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
于 2013-11-04T14:31:56.113 回答
1

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

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

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

于 2013-11-04T16:02:04.817 回答