使用Visual Basic / Excel非常新。我正在尝试编写一个快速脚本,在一列中输入当前时间,并允许用户输入将在新时间内传递多少天/小时/分钟,并将其输出到另一列中。
我确信这不是最好的方法,但我到目前为止的内容如下。我已经放弃了摆弄日期,而且只是在与时间合作:
Sub TimeModule()
Dim DaysLeft, HoursLeft, MinutesLeft As Double
DaysLeft = Val(InputBox("Days left"))
HoursLeft = Val(InputBox("Hours left"))
MinutesLeft = Val(InputBox("Minutes left"))
Dim CurrentTime As Date
CurrentTime = TimeValue(Now())
ActiveCell.Value = CurrentTime
ActiveCell.Offset(0, 1) = CurrentTime + Time(HoursLeft, MinutesLeft, 0)
End Sub
我当然会收到错误。如果有人能够更好地解决这个问题,以及我滥用的功能,我会非常感激!
编辑:我当然最终也希望脚本能够处理好几天。
答案 0 :(得分:3)
如果我理解正确的话,我认为只使用Excel中的单元格函数就可以了。
例如,这就是你所看到的......
Time Now: Days: Hours: Minutes: New Time:
30/05/2012 23:34 15 6 23 15/06/2012 05:57
...这就是每个单元格中的内容(假设左上角的单元格是A1)......
Time Now: Days: Hours: Minutes: New Time:
=NOW() 15 6 23 =A2+B2+TIME(C2,D2,0)
描述每个功能:
NOW()
返回格式化为日期和时间的当前日期和时间。 DATE(year,month,day)
返回表示MS Excel日期时间代码中日期的数字。 TIME(hours,minutes,seconds)
将以小数,分钟和秒为单位的数字转换为Excel序列号,格式为时间格式。在最后一个单元格中解析等式:
A2
是包含当前日期/时间的单元格(截至上一次工作表计算)。B2
是用户输入的天数值。TIME(C2,D2,0)
是TIME()函数,分别从单元格C2
和D2
获取用户输入的小时和分钟值。这有点像你想要的功能......?
答案 1 :(得分:0)
如果您想使用VBA,则代码的唯一问题是“时间”功能。 您可以改为使用CDate:
Sub TimeModule()
Dim DaysLeft, HoursLeft, MinutesLeft As Double
DaysLeft = Val(InputBox("Days left"))
HoursLeft = Val(InputBox("Hours left"))
MinutesLeft = Val(InputBox("Minutes left"))
Dim CurrentTime As Date
CurrentTime = TimeValue(Now())
ActiveCell.Value = Now()
ActiveCell.Offset(0, 1) = ActiveCell.Value + DaysLeft + CDate(HoursLeft & ":" & MinutesLeft)
'ActiveCell.Offset(0, 1) = CurrentTime + Time(HoursLeft, MinutesLeft, 0)
End Sub
答案 2 :(得分:0)
当你以这种方式'昏暗'时,你必须记录每个变量的数据类型。你的方式MinutesLeft是Double,一切都是(默认情况下)Variant。
您正在寻找的时间功能是TimeSerial。
日期存储为自特定日期起的天数。要将日期添加到日期,您只需将数字添加到一起。
Sub TimeModule()
Dim lDaysLeft As Long
Dim lHoursLeft As Long
Dim lMinutesLeft As Double
Dim dtCurrent As Date
lDaysLeft = Val(InputBox("Days left"))
lHoursLeft = Val(InputBox("Hours left"))
lMinutesLeft = Val(InputBox("Minutes left"))
dtCurrent = Now()
ActiveCell.Value = dtCurrent
ActiveCell.Offset(0, 1).Value = dtCurrent + lDaysLeft + TimeSerial(lHoursLeft, lMinutesLeft, 0)
End Sub