我在相邻单元格中的日期加1年的公式是有效的,但当我用VBA中的UserForm值填充相邻单元格时就不起作用了



我有一个UserForm,它是我创建的,带有用于日期输入的文本框。当用户填写此表单时,此日期将填充到工作簿的工作表中。在相邻的单元格中,我有一个公式,它将365天添加到该日期,并格式化为显示该日期是否很快发生(60天后,30天后(。但是,如果此引用单元格中没有日期,则公式会在下一个相邻单元格中的另一个日期上添加一年。这是该日期的公式:

=IF([@[First Certification Date]],IF(ISNUMBER([@[Date of Last Annual]]),[@[Date of Last Annual]]+365,[@[First Certification Date]]+365),"")

值得一提的是,用户表单中的信息也在另一张表单上更新,只有该日期在相关表单上更新。

这是我的VBA代码:

子提交((

Dim sh As Worksheet
Dim trow As Range
Dim annrow As Range
Dim ans As Worksheet


Set sh = ThisWorkbook.Sheets("NSE Tracker")


With sh
.Range("F13").EntireRow.Insert
.Range("F13").Value = UserForm.txtDate.Value
.Range("G13").Value = UserForm.txtName.Value
.Range("H13").Value = UserForm.txtInitials.Value
.Range("I13").Value = UserForm.cmbFac.Value
.Range("J13").Value = UserForm.cmbPos.Value
.Range("K13").Value = UserForm.cmbType.Value
.Range("L13").Value = UserForm.txtScore.Value
.Range("M13").Value = UserForm.txtEvaluator.Value
.Range("N13").Value = UserForm.txtRem.Value
.Range("O13").Value = IIf(UserForm.optEvalNo.Value = True, "No", IIf(UserForm.OptEvalNA = True, "N/A", "Yes"))
.Range("P13").Value = IIf(UserForm.OptNRNo.Value = True, "No", IIf(UserForm.OptNRNA = True, "N/A", "Yes"))
.Rows.AutoFit
End With
If UserForm.cmbType = "Annual" Then
Set ans = ThisWorkbook.Sheets("Facility Annual Tracker")
With ans
Set annrow = .Range("F:F").Find(What:=UserForm.txtName, LookAt:=xlPart)

Set trow = Range("I:I").Rows(annrow.Row)
.Cells(annrow.Row, "I").Value = UserForm.txtDate

End With
End If

结束子

只有当评估的类型是";年度";这段代码会用日期填充第二张表吗。代码找到用户并有效地更新他们的行,但相邻单元格中的公式并没有基于它进行计算

我尝试过的一种解决方案是将有问题的单元格的格式更改为日期格式,认为它可能会自动格式化为";文本";从userform.txtdate条目:

.Range("I:I").NumberFormat = "mmm-yy"

奇怪的是,它有效地更改了该范围内所有单元格(其他用户的其他日期(的格式,但没有更改我刚刚填充的日期单元格。

我是VBA的初学者,如果我的代码看起来不好,很抱歉!

用户表单上日期输入的图像

请使用下一个函数:

Function TextToDate(strText As String, sep As String) As Date
Dim arrD: arrD = Split(strText, sep)

TextToDate = DateSerial(CLng(arrD(2)), CLng(arrD(0)), CLng(arrD(1)))
End Function

您可以使用进行测试

Sub testTextToD()
Dim x As String
x = "8/17/2022"
Debug.Print TextToDate(x, "/")
End Sub

.Range("F13").Value = TextToDate(UserForm.txtDate.Value, "/")

如果UserForm.txtDate是需要将字符串复制为日期的文本框。。。

最新更新