0

使用 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

当然,我遇到了一个错误。如果有人能阐明更好的方法来做到这一点,以及我滥用的功能,我将不胜感激!

编辑:我当然最终希望脚本也能处理好几天。

4

3 回答 3

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)C2是 TIME() 函数,分别从单元格中获取用户输入的小时和分钟值D2

这是否像您预期的功能......?

于 2012-05-30T22:54:57.797 回答
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
于 2012-05-31T07:15:01.497 回答
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
于 2012-05-31T18:51:40.907 回答