返回mainsub

时间:2016-08-01 14:41:53

标签: excel vba excel-vba

在下面的代码中,我将3个范围设置为等于变量。我对rngNextrngDays没有任何问题,他们将正确的变量分配到正确的范围 - 无后顾之忧。

很简单,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

一如既往的帮助。

1 个答案:

答案 0 :(得分:1)

这取决于您使用或想要使用DaysRemaing过程的方式:

  1. 如果您在工作表中使用它,即您正在调用= DaysRemaining(x,y),那么在函数执行后,值将不会保持不变。 Excel内部函数构建为仅输出到它们所调用的单元格,您无法使用函数外部的rng.value来定义范围。您在工作表中使用的功能可以有多个输入,但只有一个输出。 (这是一个excel限制)。如果你想要多个输出,那么你需要返回一个数组结果。

  2. 如果你通过VBA使用它,那么你的代码按预期工作(我尝试成功实现它)。您只需将良好的内务管理更改为Public Sub DaysRemaining(...)即可。根据函数的定义,您不需要函数,只需使用一个过程在工作表上进行远程操作,就不需要返回任何函数。

  3. 以下内容:

    Public Sub DoDaysRemianing()
        DaysRemaining CLng(Date), 2
    End Sub
    

    也可以正常工作,但是你是通过VBA调用的。