公式自动填充日期列适用于工作表但不适用于表单
Posted
技术标签:
【中文标题】公式自动填充日期列适用于工作表但不适用于表单【英文标题】:Formula auto fills date column works on sheet but not in the form 【发布时间】:2018-11-01 15:26:59 【问题描述】:我正在使用公式在下一列中输入内容后立即自动填充日期。
=If(B9="","",IF(A9="",NOW(),B9))
完成此操作后,我将公式应用于单元格,直到第 48 行。现在,当在源中输入任何内容(ref 的屏幕截图)时,日期会自动填充。像魅力一样工作,一切都很好。
设计了一个用户表单,用于输入减去日期的数据,因为使用了上述公式。应该工作,但它没有。日期为1/1/1900
。稍微偏离了一个世纪 +18 年,没什么大不了的,哈哈。
您可以在我用于数据输入的屏幕截图中看到的代码。最初我将工作表设置为 48 行。由于在使用用户表单时,数据在第 48 行之后“仅”输入,因此表格不断扩展。 48之后的行我删了很多次了,都不好笑了。
现在 VBA 代码以某种方式关闭或不完整,这让整个事情变得有趣。我该如何解决这个问题?
附:使用 Excel 2016
表单上添加数据按钮的代码。为此,数据不会从第 9 行 B 列开始填充。它从第 48 行开始。
Private Sub CommandButton1_Click()
Dim dcc As Long
Dim abc As Worksheet
Set abc = Worksheets("January2019")
dcc = Sheets("January2019").Range("A" & Rows.Count).End(xlUp).Row
With abc
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value
End With
日期代码。
=If(B9="","",IF(A9="",NOW(),B9))
如果手动输入数据,日期自动工作,但是当使用用户表单时,日期输入为 1900 年 1 月 1 日,上面提到该条目是在第 48 行之后进行的。
我希望/针对此代码和用户表单的目标是:
在用户表单中没有日期选项。我在第 9 行添加了日期公式,然后将其拖到第 48 行。使用户表单减去日期字段,因为一旦输入数据,日期就会自动填充。并且,数据从第一个可用行 B9 开始填充。所以现在我迷路了,因为我不知道故障在哪里或发生了什么,这使得这个添加随机行并且日期很远。
【问题讨论】:
@BigBen 我希望我的代码格式正确?看看并希望能解决这个问题。感谢您的回复。 第47行有数据吗?如果是这样,这就是为什么您从第 48 行开始使用.Cells(dcc + 1, x)
,无论第 9 行是否为空白。 .End(xlUp).Row
从工作表的最底部开始,一直向上直到找到底部中的第一个非空单元格。
第 47 行没有数据。实际上任何地方都没有数据。我选择并删除了所有输入的随机数据。所有列 + 行都是空的。
好的,我只是快速删除了所有行,只是为了 100%,但仍然一样!我认为这行不通。叹。是否有任何简单的代码可以通过用户表单输入日期?我在想如果这不起作用,那么我将在用户表单上添加一个标题,说明日期和一个自动填充日期的文本框,并且在按下添加数据时,日期也会添加到工作表中.对这个想法有什么想法吗?
日期的标准是什么?它进入哪一列?我看到了公式,但没有说明公式的位置。
【参考方案1】:
您可以替换您的公式,只需使用您当前的用户表单来添加今天的日期。
Private Sub CommandButton1_Click()
Dim dcc As Long
Dim abc As Worksheet
Set abc = Worksheets("January2019")
dcc = Sheets("January2019").Range("A" & Rows.Count).End(xlUp).Row
With abc
.Cells(dcc + 1, 1).Value = Date
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value
End With
您无需在用户表单中为要输入的日期添加空格。
...如何连接用户表单中的下拉列表,以便在选择 february2019 月份时,名为 february2019 的工作表获取数据...
这应该可行:
Dim abc As Worksheet
Set abc = Worksheets(me.ComboBox1.Value)
【讨论】:
@K.Davis。老实说,我惊呆了。这就是发生的事情。我复制并粘贴了您的代码,它就像一个魅力!我刚刚添加了清除框,因此输入的数据被清除了。非常感谢,我的意思是非常感谢您耐心等待我的世界之外的解释,哈哈。好人,你。通过任何更改,您都不知道如何从用户表单连接下拉列表,以便在选择 2019 年 2 月时,名为 2019 年 2 月的工作表获取数据,而不是 2019 年 1 月。相同的工作簿每个月只有 12 张,以保持整洁。我应该发布另一个关于此的问题吗? OK 我在哪里添加此代码?对不起,最愚蠢的问题。我已经尝试过了,但它给出了错误。设置 abc = Worksheets(me.ComboBox1.Value) 这行高亮显示,上面代码下是,dcc = Sheets("January2019").Range("A" & Rows.Count).End(xlUp).Row 但是如果我删除这个然后我认为行数会再次混乱? 尝试添加MsgBox me.ComboBox1.Value
(我不确定您是否使用组合框 - 它必须是您所说的“下拉”框)并查看它是否提供正确的结果
我认为更新后的 2 行代码应该进入 combobox1(更改)并且应该输入,对吧?
这是我检查的 ComboBox1,在用户表单上打开了一个下拉列表。以上是关于公式自动填充日期列适用于工作表但不适用于表单的主要内容,如果未能解决你的问题,请参考以下文章
适用于 Chrome 但不适用于 Safari - 一个隐藏的 DIV,仅在提交包含所有必填字段的表单时显示