2015-02-05 106 views
0

当宏在任何给定日期运行时,它应检查当前日期并将其与年份中的不同季度进行比较,然后根据季度中的哪个季度更改某些单元格的值我们在根据日期Excel VBA设置单元格值VBA

这是我到目前为止,我试图以附加到当前宏末尾:

Sub Dates() 
    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim mgr, rsk As Range 
    Dim d, Q1B, Q1E, Q2B, Q2E, Q3B, Q3E, Q4B, Q4E As Date 

    Set wb = ActiveWorkbook 
    Set ws = wb.Sheets("Mutual") 
    Set mgr = ws.Range("B37") 
    Set rsk = ws.Range("F37") 

    d = Date 
    Q1B = DateValue("01/01/2015") 
    Q1E = DateValue("03/31/2015") 
    Q2B = DateValue("04/01/2015") 
    Q2E = DateValue("06/30/2015") 
    Q3B = DateValue("07/01/2015") 
    Q3E = DateValue("09/30/2015") 
    Q4B = DateValue("10/01/2015") 
    Q4E = DateValue("12/31/2015") 

    If d <= Q1E Then 
     mgr.Value = "Works 1" 
     rsk.Value = "Works 2" 
    End If 


End Sub 

我在正确的道路上?我相信有更好的方法来写这个,但这是我第一次写自己的VBA代码。

+0

细胞只是抬头:只有'Q4E'被宣布为'Date'在你的代码,该行的所有其他变量都是“Variant”。 VBA不支持这样的声明。 – 2015-02-05 17:28:06

+0

因此,我必须将它们全部都声明为日期?或者在每个语句的前面使用Set都是一样的? – Catalog 2015-02-05 17:57:37

+0

是的,你必须将它们全部作为日期来声明,但你仍然可以在一行上完成。 – 2015-02-05 18:16:21

回答

0

无需宏试试这​​个公式,而不是

=IF(COUNTA(A2)=1,"Q"&INT((MONTH(A2)/3.25)+1)&" - "&YEAR(A2),"") 

其中A2为您的包含日期

+0

这是否能够改变每季度的单元价值?我使用宏的原因是因为单元格值每季度都会改变。我的示例只填写了四分之一,但它将为这两个单元格的每个季度写入不同的值。 – Catalog 2015-02-05 17:19:34

+0

我不认为我理解你的评论。您能否详细说明 – Jeanno 2015-02-05 17:35:44

+0

对不起,每个季度我都希望细胞显示不同的东西。根据我的理解,单元格中的IF公式在完成比较后将发出真或假的声明。这只会给我两件事情,而不是每个季度的四件事。 – Catalog 2015-02-05 17:56:39