注册 登录
编程论坛 VB6论坛

求助下各位关于计算第几周对应的日期范围从几月几日到几月几日

lezhitian 发布于 2022-11-21 15:52, 1465 次点击
在EXCEL中直接用两行公式就可以计算出第几周对应的日期范围从几月几日到几月几日,要用到VBA,不能脱离EXCEL使用.
于是乎,下载了VB,发现公式不能直接使用.
原公式如下:
只有本站会员才能查看附件,请 登录

通过自己在网上摸索,自己把代码改成:
Label14.Caption = Format((Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7 - 6, "yyyy-m-d")
Label15.Caption = Format((Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7, "yyyy-m-d")
发现出来的结果不一样,比如,2012年第5周用EXCEL公式计算,开始日期是2012-1-23,结束日期是2012-1-29,而我上面的公式在VB中计算出来的如果是
只有本站会员才能查看附件,请 登录


这里哪里有问题,在网上找了很久没找到原因,后来发现这里的VB论坛,请教下各位.
8 回复
#2
mrexcel2022-11-21 21:06
试试
Label14.Caption = Format((Val(Text2.Text) - 1) - Weekday(Val(Text2.Text) - 1, 2) + Val(Text3.Text) * 7 - 6, "yyyy-m-d")
#3
l20027221452022-11-21 21:58
(Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7 - 6等于多少,看你图上也没text3啊
#4
风吹过b2022-11-21 23:21
程序代码:
Private Sub Command1_Click()
   
Dim d1 As Date      '便于简化代码,定义了一个变量,主要需要多次使用元旦日期
d1 = CDate(Val(Text1.Text) & "-1-1")        '生成输入年份的元旦日期
Label1.Caption = d1 + (Val(Text2.Text) - 1) * 7 + 1 - Weekday(d1, 2)    '计算起始日期
Label2.Caption = CDate(Label1.Caption) + 6  '计算结束日期
   
End Sub

注意
1、VB6没有 max 函数和min函数,如果需要比较并反回其中一个值,可以使用 iif 函数。
IIf(判断条件, 真返回值, 假返回值)
2、vb6有日期型数据,需要使用 cdate 把字符串转为日期型数据,对应的就是你 EXCCEL公式里的 date 函数。
  VB6 虽然有date 函数,但功能不是这个。
3、对于日期型数据来说,可以直接使用 加法和减法,整数代表天数,

4、使用 dateadd 函数直接增加周
DateAdd("ww", Val(Text2.Text) - 1, d1 - Weekday(d1, 2) + 1)
 DateAdd("ww", :dateadd 日期作运算,ww 表示增加周
 Val(Text2.Text) - 1 跳过几周
 Weekday(d1, 2) 按周一第一天计算
 d1 - Weekday(d1, 2) + 1 ,计算出周一是哪一天

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-11-21 23:22编辑过]

#5
lezhitian2022-11-22 13:41
回复 2楼 mrexcel
谢谢 试了,还是跟我之前的代码出的结果一样不对.
#6
lezhitian2022-11-22 13:43
以下是引用l2002722145在2022-11-21 21:58:22的发言:

(Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7 - 6等于多少,看你图上也没text3啊

结果是2039,TEXT3是下面那个,上面是TEXT2.
#7
lezhitian2022-11-22 14:01
回复 4楼 风吹过b
非常感谢,代码完美使用运行,受益匪浅.
有查询了相关参数,确实虽然一样的函数,功能确不一样.
还是要从基础开始学VB.

对了,再请教下一个问题,通过日期计算是哪一周,比如2022-1-1.
我是直接用EXCEO的函数
Label6.Caption = WorksheetFunction.WeekNum(Text1.Text, 1)
这个可以直接用,但是每次点击按钮都要停顿个1秒左右,再在网上搜索发现有个DatePart,然后我就把代码改成
Label6.Caption = DatePart("ww", Text1.Text)
后面这个可以直接出结果,是不是后面这个直接是VB函数,所以直接用,而上面那个是EXCEL需要调用,才会导致使用时有1秒延时.
#8
mrexcel2022-11-23 14:53
程序代码:
Private Sub Command1_Click()
Dim num&, y&, d(1)
y = 2021
num = 5
d(1) = DateSerial(y, 1, 7 * num + 1) - Weekday(DateSerial(y, 1, 0))
d(0) = d(1) - IIf(Year(d(1) - 6) < y, Day(d(1)) - 1, 6)
MsgBox Join(d, ""), , y & "年第" & num & ""
End Sub
#9
lezhitian2022-11-25 14:42
回复 8楼 mrexcel
谢谢回复.这相代码也可以达到.  吸收下.
1