【发布时间】:2019-01-10 06:59:32
【问题描述】:
我有我项目的示例数据。如您所见,有 4 列:deadline、submitted、description 和 days_delayed。另外,在同一张表中我有数据的插入形式。其中 Range G1 是截止日期,G3 是用户提交文档的实际日期。
在这段代码中,您将在 vba 中以公式方式编写条件语句。这样每次添加新行时,公式都会跟随并复制到其相应的单元格区域。
Private Sub CommandButton1_Click()
Dim Deadline, Submitted, Description, Days_Delayed As String
Worksheets("Sheet3").Select
Deadline = Range("G1")
Submitted = Range("G3")
Description = "=IF(AND(D2>0,ISBLANK(B2)),"NO-
DOCUMENT",IF(AND(D2<=0,NOT(ISBLANK(B2))),"ON-TIME", IF(AND(D2 > 0,NOT(ISBLANK(B2))),"DELAYED")))"
Days_Delayed = "=IF(COUNT(A2:B2)=2,B2-A2,IF(B2="","0"))"
Worksheets("Sheet3").Select
Worksheets("Sheet3").Range("A2").Select
If Worksheets("Sheet3").Range("A2").Offset(1, 0) <> "" Then
Worksheets("Sheet3").Range("A2").End(xlDown).Select
End If
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = Deadline
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Submitted
ActiveCell.Offset(0, 1).Select
ActiveCell.Formula = Description
ActiveCell.Offset(0, 1).Select
ActiveCell.Formula = Days_Delayed
End Sub
这段代码运行良好,但是当我尝试在 vba 代码中实现公式时。错误说“语句结束”
由 Peh 修复 VBA的公式插入应该是这样的
Days_Delayed = "=IF(COUNT(N36:O36)=2,O36-N36,IF(O36="""",TODAY()-N36))"
另一个问题是:
由于添加的新行是新数据,因此公式不应在其中放置定义的范围。
Days_Delayed = "=IF(COUNT(N36:O36)=2,O36-N36,IF(O36="""",TODAY()-N36))"
在此公式中,您可以看到定义了公式范围。我想要解决的是做这样的事情:
Days_Delayed = "=IF(COUNT(N(i):O(i))=2,O(i)-N(i),IF(O(i)="""",TODAY()-(i)))"
你可以看到有变量 i 所以当新行进来时。公式会自动知道需要计算哪些单元格。我想,循环是合适的方式。因为如果我在定义范围内保持相同的公式。输出将是相同的。这可能吗?
【问题讨论】:
-
请注意
Dim Deadline, Submitted, Description, Days_Delayed As String只将最后一个变量声明为String,其他的都是Variant。您必须为 每个 变量指定一个类型:Dim Deadline As String, Submitted As String, Description As String, Days_Delayed As String。 • 请阅读并申请您的代码How to avoid using Select in Excel VBA。使用Select会大大降低您的代码速度并且不是很可靠。 -
致您的问题:如果您在其他引号中使用引号
",则必须将它们加倍。例如:Days_Delayed = "=IF(COUNT(A2:B2)=2,B2-A2,IF(B2="","0"))"必须是Days_Delayed = "=IF(COUNT(A2:B2)=2,B2-A2,IF(B2="""",""0""))" -
现在我明白了,有没有办法不声明该公式内的单元格范围。喜欢循环吗?
-
我不明白你的意思。请edit您的问题使用我上面提到的修复程序更新代码并提出更详细的问题。告诉我们你想要做什么而不是你不想做什么可能更容易理解。
-
查看更新后的帖子,谢谢
标签: excel vba excel-formula