2015-02-05 194 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