Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA基础-从子系统调用函数_Vba_Excel - Fatal编程技术网

VBA基础-从子系统调用函数

VBA基础-从子系统调用函数,vba,excel,Vba,Excel,我想写一个函数宏来计算两个日期之间的天数。看起来我有 Function daysRem(today As Date, eoc As Date) As Integer daysRem = Abs(DateDiff("d", today, eoc)) End Function 现在,我需要从Sub“调用”该函数来粗略估计剩余的周数。我想把它放在留言框里。这就是我经历了大约两个小时挫折的地方。这必须很简单,但我就是不知道该怎么办。试试这个: Private Sub DisplayDaysDi

我想写一个函数宏来计算两个日期之间的天数。看起来我有

Function daysRem(today As Date, eoc As Date) As Integer
    daysRem = Abs(DateDiff("d", today, eoc))
End Function
现在,我需要从Sub“调用”该函数来粗略估计剩余的周数。我想把它放在留言框里。这就是我经历了大约两个小时挫折的地方。这必须很简单,但我就是不知道该怎么办。

试试这个:

Private Sub DisplayDaysDiff()
 Dim dtDate1 as Date
 Dim dtDate2 as Date

 dtDate1 =ThisWorkbook.Worksheets("Sheet1").Range("A2")
 dtDate2=ThisWorkbook.Worksheets("Sheet1").Range("B2")

 MsgBox "Days difference: " & CStr(daysRem(dtDate1, dtDate2)), vbInformation

End Sub
从按钮单击事件调用它

Sub Main
    x = MyFunction(Param1)
End Sub

MyFunction(MyDate as Date)
    MyFunction = DateDiff("ww", Date(), MyDate)
End Function
将该值指定给函数名。内置的
Date()
函数是todays Date

函数返回一些东西。潜艇没有。宏是sub

函数返回一些东西

所以

因此x=10

Sub Main
    Param1 = #2/2/2017#  
    Range("B4").Value = MyFunction(Param1)
End Sub

MyFunction(MyDate as Date)
    MyFunction = DateDiff("ww", Date(), MyDate)
End Function

日期既是数据类型也是函数。一个没有括号,一个有。

Msgbox daysRem(Date,Date+3)
谢谢您的帮助。我想我只是处于一个很低的水平,我不知道该怎么办。类似这样的内容?'Sub weeksRem()MsgBox daysRem(Date,Date+3)End Sub给我一个编译错误。获取“剩余周数”有困难吗?还是别的什么?出什么事了?你能在你的Sub中显示代码吗?我的困难是理解语法。这给了我一个编译错误
Sub weeksRem()MsgBox daysRem(Date,Date+3)End Sub
这是我用VBA编写的第一个函数,我完全迷路了。“周数”的参数不是“d”。非常感谢您的帮助。不幸的是,我不认为这是我想要学习的。我要做的事情的确切措辞如下:1.创建函数宏,返回课程结束前剩余的天数2.使用函数估计一年中剩余的班级会议数(例如,除以7得到周数,乘以2得到班级会议。3.创建一个子项,该子项在消息框中显示“离课程结束只有90天,即大约N个班级。”sub应该调用函数。请添加一小部分数据。这些日期在哪里?在工作簿或表格中?有多少行?我假定日期1是今天的日期。但日期2在哪里?请澄清感谢@M.R。这是一个简单的excel表格。您在单元格A2和B2中输入日期。单元格C2告诉您它们之间的日期(使用我的自定义函数),然后会弹出一个消息框,告诉您周数。这不是真实世界中的事情。我知道有500种方法可以更容易地做到这一点,但关键是要学习如何将我在宏函数中计算的日期传递给sub。您可以添加一个按钮来调用宏,并从单元格A2和B2获取输入。请参阅我的修订答案非常感谢M.R.你帮了我很大的忙,尽管我认为我无法有效地与你沟通。这一点不是为了提供日期和周数。如果这就是我所需要做的,一个简单的Excel公式就足够了。这一点是为了学会将信息从函数传递到子函数。你的代码是wo非常好,因为它在一个整洁的小潜艇里完成了所有的事情,但这不是我在这里要做的。无论如何,谢谢。哦,可能是“ww”Excel VBA.x中的双引号中包含答案。@无论您做什么,都不要关闭“工具/选项”中的“需要变量声明”。我无法找到一个有效的理由来自愿禁用此功能,或者更糟的是忽略或(喘息..)删除模块顶部的
Option Explicit
。而不是一个。不允许编译器继续运行充满拼写错误和未声明变量的代码,而是声明每个变量-
Dim x只要长
,然后就可以执行
x=任何
。使用
Option Explicit
。不需要显式变量declarations在乞求愚蠢的疯狂的难以发现的bug发生。你在跟踪,对吗?你在授权运行时创建一些动态的未声明的
变体
,这会对存储和隐式类型转换带来惩罚,而这比利用实际的数据类型更快语言使用的是什么?这不是VBScript。省略
Option Explicit
的人总是带着它所造成的问题来到这里。否则的建议就是彻底的拖拉。如果你的代码有性能问题,找到一个更有效的算法,而不是把它变成维护者的雷区。使用
Option Explicit
。Strongly输入变量、参数和函数返回。这不是教条,它节省了您和您的未来,节省了调试时间,避免了可能多年不被注意的细微错误。
Sub Main
    Param1 = #2/2/2017#  
    Range("B4").Value = MyFunction(Param1)
End Sub

MyFunction(MyDate as Date)
    MyFunction = DateDiff("ww", Date(), MyDate)
End Function