错误的参数号或是无效的属性赋值

lwj_1986 2008-04-25 05:22:31
实现的是50行数字 每行32个 按照排列选择30组 统计每组中多出现的数字
http://topic.csdn.net/u/20080423/17/73ce31e3-4cd7-4e39-a16a-9e1f1f184c1a.html原帖地址

相关代码:
Dim strIntsz(50) As String '存放输入的10行数据
Dim intData(50, 32) As Double '存放每行分离出来的数字
Dim strOut As String

'此函数用于比较任意三十组 数组中有没有相同数,有输出相同的数,没有输出“NO Find!”
Private Function strBJ(ByRef a() As Double, ByRef b() As Double, ByRef c1() As Double, ByRef c2() As Double, ByRef c3() As Double, ByRef c4() As Double, ByRef c5() As Double, ByRef c6() As Double, ByRef c7() As Double, ByRef c8() As Double, ByRef c9() As Double, ByRef c10() As Double, ByRef c11() As Double, ByRef c12() As Double, ByRef c13() As Double, ByRef c14() As Double, ByRef c15() As Double, ByRef c16() As Double, ByRef c17() As Double, ByRef c18() As Double, ByRef c19() As Double, ByRef c20() As Double, ByRef c21() As Double, ByRef c22() As Double, ByRef c23() As Double, ByRef c25() As Double, ByRef c26() As Double, ByRef c27() As Double, ByRef c28() As Double) As String
Dim smtp(50) As Double
Dim intCont As Integer
Dim str As String
intCont = 0
For i = 1 To 60
For j = 1 To 60
If a(i) = b(j) Then
intCont = intCont + 1
smtp(intCont) = a(i)
End If
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c1(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c2(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c3(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c4(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c5(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c6(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c7(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c8(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c9(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c10(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c11(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c12(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c13(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c14(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c15(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c16(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c17(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c18(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c19(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c20(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c21(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c22(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c23(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c24(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c25(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c26(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c27(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i

For i = 1 To intCont
For j = 1 To 60
If smtp(i) = c28(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i


If str = "" Then
strBJ = "No Find!"
Else
strBJ = str
End If
End Function

Private Sub Command2_Click() '
' ReDim intData(10, 10) As Double
Dim X1(32) As Double
Dim X2(32) As Double
Dim X3(32) As Double
Dim X4(32) As Double
Dim X5(32) As Double
Dim X6(32) As Double
Dim X7(32) As Double
Dim X8(32) As Double
Dim X9(32) As Double
Dim X10(32) As Double
Dim X11(32) As Double
Dim X12(32) As Double
Dim X13(32) As Double
Dim X14(32) As Double
Dim X15(32) As Double
Dim X16(32) As Double
Dim X17(32) As Double
Dim X18(32) As Double
Dim X19(32) As Double
Dim X29(32) As Double
Dim X20(32) As Double
Dim X21(32) As Double
Dim X22(32) As Double
Dim X23(32) As Double
Dim X24(32) As Double
Dim X25(32) As Double
Dim X26(32) As Double
Dim X27(32) As Double
Dim X28(32) As Double
Dim X30(32) As Double
Dim n As Integer
Dim v As Variant
'下面程序将10行数字分离并存入 二维数组中
For i = 1 To 50
v = Split(strIntsz(i), " ")
For j = 1 To (UBound(v) + 1)
intData(i, j) = CStr(v(j - 1))
Debug.Print v(j - 1)
Next j
Next i
n = 1
Do While n <= 22 '选择任意三十组组合
For i = n + 28 To 50
For j = 1 To 50

X1(j) = intData(1, j)
X2(j) = intData(n, j)
X3(j) = intData(n + 1, j)
X4(j) = intData(n + 2, j)
X5(j) = intData(n + 3, j)
X6(j) = intData(n + 4, j)
X7(j) = intData(n + 5, j)
X9(j) = intData(n + 6, j)
X10(j) = intData(n + 7, j)
X11(j) = intData(n + 8, j)
X12(j) = intData(n + 9, j)
X13(j) = intData(n + 10, j)
X14(j) = intData(n + 11, j)
X15(j) = intData(n + 12, j)
X16(j) = intData(n + 13, j)
X17(j) = intData(n + 14, j)
X18(j) = intData(n + 15, j)
X19(j) = intData(n + 16, j)
X20(j) = intData(n + 17, j)
X21(j) = intData(n + 18, j)
X22(j) = intData(n + 19, j)
X23(j) = intData(n + 20, j)
X24(j) = intData(n + 21, j)
X25(j) = intData(n + 22, j)
X26(j) = intData(n + 23, j)
X27(j) = intData(n + 24, j)
X28(j) = intData(n + 25, j)
X29(j) = intData(n + 26, j)
X30(j) = intData(n + 27, j)
Next j
strOut = strBJ(X1(), X2(), X3(), X4(), X5(), X6(), X7(), X8(), X9(), X10(), X19(), X18(), X17(), X16(), X15(), X14(), X13(), X12(), X11(), X20(), X21(), X22(), X23(), X24(), X25(), X26(), X27(), X28(), X29(), X30())
Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(i) & ": " & strOut
strOut = ""
Next i
n = n + 1
Loop
End Sub

在导入 数组后执行COMMAND2时候
错误在这里
strOut = strBJ(X1(), X2(), X3(), X4(), X5(), X6(), X7(), X8(), X9(), X10(), X19(), X18(), X17(), X16(), X15(), X14(), X13(), X12(), X11(), X20(), X21(), X22(), X23(), X24(), X25(), X26(), X27(), X28(), X29(), X30())
提示
错误的参数号或是无效的属性赋值

是怎么回事呢
...全文
832 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwj_1986 2008-04-30
  • 打赏
  • 举报
回复
我终于明天哪里出错了

dim s(50) as string 是在这里
因为是从0开始的 那么定义50 也就是有51行数据了
所以最后一行数据为空
就一直输出为NO FIND

非常感谢vbman2003

dim s(49) as string 就对了 呵呵
lwj_1986 2008-04-30
  • 打赏
  • 举报
回复
昨天停电了就没来 现在去看看
嗷嗷叫的老马 2008-04-29
  • 打赏
  • 举报
回复
........直接头晕

路过,帮顶顶~_~
vbman2003 2008-04-29
  • 打赏
  • 举报
回复
您在这个帖子我的回答 我看了 也对的 但是就是数字一变成50就执行错了 10行执行都是对的
-------------------------------
这个可能是循环越界造成的,你可以这样试试

比如,s是你要测试的数组
dim s(50) as string
for i=0 to ubound(s)
'......
next
用ubound(s)就可以得到数组s的最大下标,就不会出错了
lwj_1986 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 vbman2003 的回复:]
1.你到底是要输出包含重复数字的整行,还是只输出重复的数字?

2.只有一行你要比什么?你的题意不是有若干行数据,找出每行都有的重复数据吗?只有一行什么叫每行都重复?
[/Quote]

1。只输出重新的数字(要求数字个数必须大于6才输出)

2 可能2我没说明白 我哪个具体的数字来说好了 例如一开始有50行数字 然后先做C50 30选择 对选出来的30行数据操作 找出每行都有的重复数据
然后在选择另外30行继续比较 只到所有的30行都选完了

http://topic.csdn.net/u/20080425/22/22f411bb-064b-4bfa-bc21-e8a198134101.html

您在这个帖子我的回答 我看了 也对的 但是就是数字一变成50就执行错了 10行执行都是对的
lwj_1986 2008-04-29
  • 打赏
  • 举报
回复
老马 是不是丹心 群里的呢?

帮帮忙啊
lwj_1986 2008-04-27
  • 打赏
  • 举报
回复
我要输出重复的数字(只有6个或6个以上才输出 那几个重复的数字)
或是说重复的一些数字 必须是6个以上的才输出


vbman2003 2008-04-27
  • 打赏
  • 举报
回复
1.你到底是要输出包含重复数字的整行,还是只输出重复的数字?

2.只有一行你要比什么?你的题意不是有若干行数据,找出每行都有的重复数据吗?只有一行什么叫每行都重复?
vbman2003 2008-04-26
  • 打赏
  • 举报
回复

按照排列选择30组 统计每组中多出现的数字
-------------------------------------------------




Option Explicit

Const maxIdx As Long = 30 '用于设定多少数组,这里按题意设置为30组
Const maxValue As Long = 60 '每组数据的最大值,测试时可以改小一点
Dim arr(maxIdx - 1) As String '用于测试的数据

'这个函数用来标志一组数据中出现的数字
Function GetData(ByVal s As String) As Boolean()
Dim b(maxValue) As Boolean
Dim i As Long
Dim tmp

tmp = Split(s, ",")
For i = 0 To UBound(tmp)
b(tmp(i)) = True '出现的数字,对应的b就设置为true
Next
GetData = b
End Function

'这个函数用于比较二个bool数组是否有相同的值
Function DataComp(Refer() As Boolean, Compare() As Boolean) As Boolean
'Refer 是参照数据,Compare是用来比较的数据
Dim i As Long
Dim b As Boolean
For i = 0 To maxValue
Refer(i) = Refer(i) And Compare(i) '同时存在Refer才继续为true
If Refer(i) = True Then b = True
Next
DataComp = b
End Function

Private Sub Command1_Click()
Dim ref() As Boolean '参照数组
Dim comp() As Boolean '对比数组
Dim i As Long
Dim msg As String
'由第一组数据生成参照数组
ref = GetData(arr(0))
'从第二组数据开始生成comp与ref对比
For i = 1 To UBound(arr)
comp = GetData(arr(i))
If Not DataComp(ref, comp) Then
MsgBox "没有每组都出现的数字"
Exit Sub
End If
Next i
For i = 0 To maxValue
If ref(i) Then msg = msg & "," & i
Next
MsgBox "每组都出现的数字为:" & Mid(msg, 2)
End Sub

Private Sub Command2_Click()
'随机生成数据用于测试
Dim i As Long, j As Long
Erase arr
Randomize
For i = 0 To maxIdx - 1
For j = 1 To 32 '每组32个数字
arr(i) = arr(i) & "," & Int(Rnd * maxValue + 1)
Next j
arr(i) = Mid(arr(i), 2)
Debug.Print arr(i)
Next i
End Sub




舉杯邀明月 2008-04-26
  • 打赏
  • 举报
回复
Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(i) & ": " & strOut

可能应该改成:
Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(n+28) & ": " & strOut

楼主注意:
你的这段代码:
    X1(j) = intData(1, j) 
X2(j) = intData(n, j)
X3(j) = intData(n + 1, j)
X4(j) = intData(n + 2, j)
X5(j) = intData(n + 3, j)
............
X27(j) = intData(n + 24, j)
X28(j) = intData(n + 25, j)
X29(j) = intData(n + 26, j)
X30(j) = intData(n + 27, j)

没有对X8()赋值!是少写了一句吧!
舉杯邀明月 2008-04-26
  • 打赏
  • 举报
回复
n = 1 
Do While n <= 22 '选择任意三十组组合
'For i = n + 28 To 50
'For j = 1 To 50
For j = 1 To 32
X1(j) = intData(1, j)
X2(j) = intData(n, j)
X3(j) = intData(n + 1, j)
X4(j) = intData(n + 2, j)
X5(j) = intData(n + 3, j)
............
X27(j) = intData(n + 24, j)
X28(j) = intData(n + 25, j)
X29(j) = intData(n + 26, j)
X30(j) = intData(n + 27, j)
Next j
strOut = strBJ(X1(), X2(),..........X29(), X30())
Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(i) & ": " & strOut
strOut = ""
'Next i
n = n + 1
Loop

lwj_1986 2008-04-26
  • 打赏
  • 举报
回复
可以加你QQ 请教么

第一 统计30行中都出现的数组(这个数组由6个或6个以上的数字组成)
所以 输出的结果 应该是一行一行的数组

第二 参照数据ref 如果只有第一行的话 是不是不完全啊?

谢谢
vbman2003 2008-04-26
  • 打赏
  • 举报
回复
这个函数????要改下思路...............
vbman2003 2008-04-26
  • 打赏
  • 举报
回复
还要说明一下,我没看明白你全贴的内容,只是针对你要“统计出每组数据都出现的数字”这一点写的示例
vbman2003 2008-04-26
  • 打赏
  • 举报
回复
1.MsgBox "没有搜索到每行都出现的数字"

2.我的算法是根据你前面一贴示例的要求,和本贴中“按照排列选择30组 统计每组中多出现的数字 ”写的:
你的前贴:
------------------------------------------------------
例如
有3组数据
1,2,3,4,5
3,4,5,6,7
4,5,8,9,0

我要统计三组数据中同时都有的数据
最后显示出来

例子就应该输出:4,5
------------------------------------------------------
由1,2,3,4,5 这行生成参照数据ref,后面的都生成数组comp和ref比较

lwj_1986 2008-04-26
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim ref() As Boolean '参照数组
Dim comp() As Boolean '对比数组
Dim i As Long
Dim msg As String
'由第一组数据生成参照数组
ref = GetData(arr(0))
'从第二组数据开始生成comp与ref对比
For i = 1 To UBound(arr)
comp = GetData(arr(i))
If Not DataComp(ref, comp) Then
MsgBox "没有每组都出现的数字"
Exit Sub
End If
Next i
For i = 0 To maxValue
If ref(i) Then msg = msg & "," & i
Next
MsgBox "每组都出现的数字为:" & Mid(msg, 2)
End Sub


有两个问题 第一是这里这个MsgBox "没有每组都出现的数字"
是30组中? 没有都出现的数字?
好像不是吧 ?
还有就是
'由第一组数据生成参照数组
ref = GetData(arr(0))
我没大看明白 为什么要生成两组数据呢?
我的 用意是要对一组50行的数据 进行搜索 任意30行
得出以6个为一组或6个以上为一组
30行中每行都有出现的几组 数字

lwj_1986 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jennyvenus 的回复:]
你应该从理解算法的基础上来修改,这个程序设计的好像有点乱。
[/Quote]

因为我初学

所以很多函数和语句 和属性都不了解的
用户 昵称 2008-04-25
  • 打赏
  • 举报
回复
你应该从理解算法的基础上来修改,这个程序设计的好像有点乱。
lwj_1986 2008-04-25
  • 打赏
  • 举报
回复
改了 确实出现1楼说的

下标越界了

X1(j) = intData(1, j)

这里 改怎么修改呢?
lwj_1986 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jennyvenus 的回复:]
你是否数组越界了?
[/Quote]
没有啊
加载更多回复(5)

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧