我真的不知道这是否可行,但是我试图编写一个使用内置日期/时间函数进行计算并将其输出到单元格的Excel程序。它将使用下载日期(位于A列中),数据输入的最后时间(B的底部行)以及每个独立的数据输入时间(B列)。
我希望每个单元格中的公式如下所示:A2-时间(0,0,(B_Last-B_Current)/ 1000)
我假设我将在某种循环中使用它。
我当前的代码如下:
Sub Bottom()
Dim Count As Integer
Dim i As Integer
Dim Last As Double
Set myRange = Columns("B:B")
Last = Cells(Rows.Count, "B").End(xlUp)
Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A2")
Count = Application.WorksheetFunction.CountA(myRange)
For i = 1 To Count
Set r2 = ThisWorkbook.Sheets("Sheet1").Range("B" & i)
r2 = r1 - Time(0, 0, (Last - r2) / 1000)
Next
End Sub
任何帮助,将不胜感激!
谢谢!!
VBA比Excel具有更多的“内置功能”,因此在使用VBA时,您实际上并不需要依赖Excel公式。但是,如果您仍然想这样做,则必须执行以下操作:
Range("B" & i).Value = "=Time(0, 0, (" & Last - r2 & ") / 1000)"
要从单元格获取值:
Dim cellVal As Date
cellVal = Range("B" & i).Value
您只需要确保将VBA变量和写入单元格的字符串分开处理(如上所示,用“和”,并且将给定单元格的值存储在正确类型的变量中(如果您将依靠string
类型,它将适用于任何内容)。
您的代码中的一些更正:
Sub Bottom()
Dim Count As Integer
Dim i As Integer
Dim Last As Double
Set myRange = Columns("B:B")
Last = 10 'What you want here??
Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A2")
Dim r1Val As Long
r1Val = r1.Value
Count = Application.WorksheetFunction.CountA(myRange)
For i = 1 To Count
Set r2 = ThisWorkbook.Sheets("Sheet1").Range("B" & i)
r2.Value = "=" & r1Val & " - Time(0, 0," & CStr(Last) & "/ 1000)" 'r2 = r1 - Time(0, 0, (Last - r2) / 1000) -> r2 = ... Last - r2 does not make any sense; r2 is a whole date and Last - r2 refers to a part of a date
Next
End Sub
这只是代码的简单版本,向您展示了一些您不应该做的事情:您将范围与值混合在一起,没有考虑不同的类型,考虑了我什至无法理解的变量,等等。
只需阅读这段代码,仔细分析它,了解您做错了什么,并通过每次进行一些研究就可以逐步添加功能。想法很简单:
等等。
我建议您进行一些研究,并比现在更加习惯VBA。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句