在下面的代码中,我将3个范围设置为等于变量。我对rngNext
和rngDays
没有任何问题,他们将正确的变量分配到正确的范围 - 无后顾之忧。
很简单,rngLast不会写入工作表。更准确地说(在进入代码时),我可以看到正在预期的rngLast.Value = LastBillDate
行上写入工作表的值,但是在End Function
行之后,当我返回到Function DaysRemaining(lngBillDate As Long, lngRow As Long)
Dim rngLast As Range, rngNext As Range, rngDays As Range
Dim NextBillDate As Date, LastBillDate As Date
Set rngLast = Worksheets("Data").Range("G" & lngRow)
Set rngNext = Worksheets("Data").Range("H" & lngRow)
Set rngDays = Worksheets("Data").Range("I" & lngRow)
If lngBillDate > Day(Date) Then
NextBillDate = CDate(Format(lngBillDate, "00") & "/" & Format(Month(Date), "00") & "/" & Year(Date))
LastBillDate = DateAdd("m", -1, NextBillDate)
Else
NextBillDate = CDate(Format(lngBillDate, "00") & "/" & Format(Month(Date) + 1, "00") & "/" & Year(Date))
LastBillDate = DateAdd("m", -1, NextBillDate)
End If
rngNext.Value = NextBillDate
rngLast.Value = LastBillDate
rngDays.Value = rngNext.Value - Date
End Function
行时,它会消失。主要分。
我以前从未经历过这种情况,我唯一能想到的是,在我回到sub后,它可能会失去它的值,但肯定已经写入了工作表?
table_module = __import__(tablename)
table_sql = table_module.SQL
print table_sql
一如既往的帮助。
答案 0 :(得分:1)
这取决于您使用或想要使用DaysRemaing过程的方式:
如果您在工作表中使用它,即您正在调用= DaysRemaining(x,y),那么在函数执行后,值将不会保持不变。 Excel内部函数构建为仅输出到它们所调用的单元格,您无法使用函数外部的rng.value来定义范围。您在工作表中使用的功能可以有多个输入,但只有一个输出。 (这是一个excel限制)。如果你想要多个输出,那么你需要返回一个数组结果。
如果你通过VBA使用它,那么你的代码按预期工作(我尝试成功实现它)。您只需将良好的内务管理更改为Public Sub DaysRemaining(...)即可。根据函数的定义,您不需要函数,只需使用一个过程在工作表上进行远程操作,就不需要返回任何函数。
以下内容:
Public Sub DoDaysRemianing()
DaysRemaining CLng(Date), 2
End Sub
也可以正常工作,但是你是通过VBA调用的。