【发布时间】:2015-02-01 11:08:06
【问题描述】:
我有一些 Excel 公式可以根据输入到列 C 和 D 中的信息更改列 E 和 G 中的数据。列 F 需要是静态时间戳,因此我必须使用一个简单的 VBA 脚本。公式有点长而且笨拙,其他人在工作簿上工作,所以我尝试通过 VBA 编写 E&G 脚本,以降低公式混乱的风险。
在 VBA 方面我并不是最好的,经过多次失败的尝试,我最终得到了导致 Excel 崩溃的结果。
以下是我最近的尝试;
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 Then
Cells(Target.Row, 6).Value = Now
End If
If Target.Column = 4 And Cells(Target.Row, 4).Value = "Daily" Then
Cells(Target.Row, 5).Value = [INDIRECT("C" & ROW())+28]
ElseIf Target.Column = 4 And Cells(Target.Row, 4).Value = "Weekly" Then
Cells(Target.Row, 5).Value = [INDIRECT("C" & ROW())+49]
Else: Cells(Target.Row, 5).Value = "---"
End If
End Sub
我还有以下由于另一部分崩溃而没有尝试过的;
If Target.Column = 4 And (Cells(Target.Row, 4).Value = "Daily" OR Cells(Target.Row, 4).Value = "Weekly") Then
Cells(Target.Row, 7).Value = [WORKDAY(INDIRECT(""E"" & ROW()),-1]
Else Cells(Target.Row, 7).Value = "---"
End If
还有 Excel 公式;
=IF(INDIRECT("D" & ROW())<>"",CHOOSE(IF(INDIRECT("D" & ROW())="Daily",1,IF(INDIRECT("D" & ROW())="Weekly",2,3)),INDIRECT("C" & ROW())+28,INDIRECT("C" & ROW())+49,"---"),"")
=IF(INDIRECT("D" & ROW())<>"",CHOOSE(IF(OR(INDIRECT("D" & ROW())="Daily",INDIRECT("D" & ROW())="Weekly"),1,2),WORKDAY(INDIRECT("E" & ROW()),-1),"---"),"")
我尝试记录公式的宏并将代码从那里复制到 VBA 代码中,但这也不起作用。
标题里说了,正文里忘了; D 列是一个下拉列表,C 列是用户输入的日期。
【问题讨论】:
标签: vba excel excel-formula