我有一份报告,我每隔一天都会更新一次。我想写一个更新第一行(其中包含日期)的公式,以便将日期更新到昨天的日期。
这是我到目前为止编写的代码:
Sub Update_Newest_Day_Conversions()
Worksheets("CPC - Conversions DoD").Range("A1").End(xlToRight).Select
MyDate = Date
While ActiveCell.Value < MyDate
ActiveCell.Copy ActiveCell.Offset(0, 1)
ActiveCell.Offset(0, 1).Select
Wend
End Sub
不幸的是,我无法弄清楚如何为每个新列添加日期更新的部分。这就是它最终看起来的方式(因为日期保持不变,循环显然不会停止):
有人可以帮忙吗?
答案 0 :(得分:2)
试试这个:
Sub UpdateNewestDayConversions()
Dim selectedRange As Range
Dim MyDate As Date
Dim myCell As Range
With Worksheets("CPC - Conversions DoD")
Set selectedRange = .Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight))
End With
MyDate = Date - 1
For Each myCell In selectedRange
If IsDate(myCell) Then
If DateSerial(Year(myCell), Month(myCell), Day(myCell)) < MyDate Then
myCell = DateAdd("d", 1, myCell)
End If
Else
MsgBox "Check " & myCell.Address & " , it is not a valid date!"
End If
Next myCell
End Sub
此代码中包含哪些内容:
Select
; DateAdd()
,这是一个很好的功能; DateSerial()
的使用情况(请参阅@Rafalon的评论); 答案 1 :(得分:0)
我实际上是自己得到的,万一有人感兴趣,这就是代码:
window.EventBus = new Vue();
答案 2 :(得分:0)
问题是您始终复制相同的日期,因此日期将始终小于当前日期。你可以尝试这样的事情:
While ActiveCell.Value < MyDate
olddate = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = olddate + 1
Wend
建议不要使用ActiveCell
,如果您有兴趣请看一下:How to avoid using Select in Excel VBA
答案 3 :(得分:0)
试试这个:
Sub Update_Newest_Day_Conversions()
Dim col As Integer
col = Range("A1").End(xlToRight).Column
While Cells(1, col) < VBA.Date() - 1
Cells(1, col).Offset(0, 1) = Cells(1, col) + 1
col = col + 1
Wend
End Sub
答案 4 :(得分:0)
试试这个
Sub Update_Newest_Day_Conversions()
Worksheets("CPC - Conversions DoD").Range("A1").End(xlToRight).Select
Diff_Date = Date - ActiveCell.Value
For i = 1 To Diff_Date - 1
ActiveCell.Offset(0, 1).Value = ActiveCell.Value + 1
ActiveCell.Offset(0, 1).Select
Next
End Sub