VBA一个小程序,当执行到Byval Rqq时显示“ 类型不匹配”,请大侠指教啊!下面是代码:

2025-04-07 15:42:20
推荐回答(4个)
回答1:

如以下这样就可以了,因为你在之前已经定义了Dim Rqq As Date, xqj As Integer, djz As Integer
所以到(ByVal Rqq, ByVal xqj, ByVal djz 就不匹配

还有Dim zc1 As Integer, zc As Integer,zc重定义了

=======================

Private Sub CommandButton1_Click()

Dim Rqq As Date, xqj As Integer, djz As Integer

Rqq = InputBox("请输入日期:")

Call XQCX(Rqq, xqj, djz)

MsgBox "查询的日期是星期" & xqj & Chr(13) & "第" & djz & "周", vbOKOnly, riqi

End Sub

Sub XQCX(rq As Date, zc As Integer, whyr As Integer)

'日期为需要输入的日期,zc 显示为星期几,whyr显示为第几周

'Date = "2010-11-15"

'zc = 1

'whyr = 3

Dim zc1 As Integer

Dim y As Integer, m As Integer, d As Integer

Dim Ns As Date

y = Year(rq)

m = Month(rq)

d = Day(rq)

Ns = y & "-1-1"

'*************************************************

'设置查询的日期为星期几

zc = Weekday(rq) - 1

If zc = 0 Then zc = 7

'*************************************************

'设置查询的日期为第几周

zc1 = Weekday(Ns) - 1

If zc1 = 0 Then zc1 = 7

whyr = (rq - Ns + zc1 - 1) \ 7 + 1

'************************************************

End Sub

回答2:

楼上说的不是问题的重点,加不加Cdate无所谓,当然你要输入正确的格式,如2010/11/9,2010-11-9.vb会自动识别。
关键在于Call语句有问题。把Call XQCX(ByVal Rqq, ByVal xqj, ByVal djz)改为Call XQCX(Rqq, xqj, djz)
即可。

回答3:

Call XQCX(ByVal Rqq, ByVal xqj, ByVal djz)中的ByVal应该在
定义函数或过程的时候使用,而不是在调用的时候用

Sub XQCX(ByVal rq As Date, ByVal zc As Integer, ByVal whyr As Integer)

回答4:

Rqq = InputBox("请输入日期:")
Call XQCX(ByVal Rqq, ByVal xqj, ByVal djz)

InputBox得到的是String型的,而Rqq是要求Date型,
改成以下代码

S = InputBox("请输入日期:")
If IsDate(S) Then
Rqq = CDate(S)
End If
Call XQCX(ByVal Rqq, ByVal xqj, ByVal djz)

补充:
你就算先定义Rqq为Date,VB会根据你的赋值变换数据类型,
S定义为String,输入格式应该是VB可认的日期格式,比如2010/11/9之类的。