目前我正在試圖想出如何編寫VBA腳本,它會掃描某些列開始的項目日期的想法,並把當天在各自的小區日曆。爲了使事情更清楚這裏是它應該是什麼樣子基本看:Excel的VBA - 輸入開始和結束日期爲日曆
正如你可以看到日曆包含的幾個月以及每一個新的一週開始天(星期一)。例如:第4行項目從2017年4月10日開始。腳本應該掃描該單元格,並用10填充D4。第5行中的項目從5月3日開始,因此它應該填寫值爲3的G5。對於所有其他行和結束日期以及。
到目前爲止,我有想法,讓每一個細胞的宏觀掃描和比較,在2017年每一個可能的入口(即一年中的每一天)。這看起來有點像這樣:
destiny_row = 1
For x = 2 To MaxRowList
If InStr(1, ActiveSheet.Cells(x, 1), "10.04.2017") > 0 Then
ActiveSheet.Range("$D$" & x).Value = "10"
destiny_row = destiny_row + 1
End If
Next
但是,你可以想像這將是相當長的一段一段代碼一個會寫,你不應該把它寫在一年中的每一天,然後複製它結束日期,它不會很有效率。
有誰有一個想法,這怎麼會在一個巧妙的方法來完成?任何幫助表示讚賞。提前致謝。
EDIT1: 所以,我試圖實現什麼在評論中提到的一樣好,我可以。這是我到目前爲止:
Sub Example4()
Dim objDate1 As Date
Dim objDate2 As Date
Dim objDate3 As Date
Dim runningVB As Boolean
If IsDate(Cells(4, 1)) = True Then
objDate1 = CDate(Cells(4, 1))
Else
MsgBox ("Invalid Input")
Exit Sub
End If
If IsDate(Cells(2, 4)) = True Then
objDate2 = CDate(Cells(2, 4))
Else
MsgBox ("Invalid Input")
Exit Sub
End If
If IsDate(Cells(2, 5)) = True Then
objDate3 = CDate(Cells(2, 5))
Else
MsgBox ("Invalid Input")
Exit Sub
End If
If objDate1 < objDate2 Then
Cells(4, 3) = objDate1
Else
End If
If objDate1 < objDate2 Then
runningVB = True
Else
End If
If runningVB = True Then
End
Else
End If
If objDate1 < objDate3 Then
Cells(4, 4) = objDate1
Else
End If
If objDate1 < objDate3 Then
runningVB = True
Else
End If
If runningVB = True Then
End
Else
End If
End Sub
我已經寫了它只比較D2和E2到目前爲止,但它的工作原理。有沒有更簡單的方法來解決這個問題?任何方式更簡單的代碼?因爲這樣,我仍然必須在每年的每一週的每一個開始日都寫下來。
將該行的月份更改爲格式化爲僅顯示日期「d」的實際日期。你可以在'Application.WorksheetFunction.Match()'' –
找到符合日期的地方。考慮使用公式代替,在這裏不需要VBA。 – avb
@avb我將如何去使用公式?唯一讓我想到的是,讓代理商每天「掃描」,但這不會很聰明。有沒有一個公式可以幫助這種情況? –