Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2718|回复: 10

[已解决]请查找类型不匹配错误

[复制链接]
发表于 2013-4-2 13:03 | 显示全部楼层 |阅读模式
请查找类型不匹配错误。谢谢
最佳答案
2013-4-2 13:22
  1. Private Sub 组合_Click()
  2.    
  3.     Dim sh As Worksheet
  4.     Set sh = Sheets("1")
  5.     Dim Arr, s(), r%, i&, j&, i1&, i2&, i3&, i4&, i5&, x$
  6.     Dim d, k, Brr
  7.     Set d = CreateObject("Scripting.Dictionary")
  8.     Arr = sh.Range("a1:j20")
  9.     Debug.Print sh.Range("a1:j20").Address(False, False)
  10.     For i = 1 To UBound(Arr)
  11.         For j = 1 To UBound(Arr, 2)
  12.             If Arr(i, j) <> "" Then
  13.                 r = r + 1
  14.                 ReDim Preserve s(1 To r)
  15.                 s(r) = Arr(i, j)
  16.             End If
  17.         Next
  18.         If r >= 5 Then
  19.             For i1 = 1 To r - 4
  20.                 For i2 = i1 + 1 To r - 3
  21.                     For i3 = i2 + 1 To r - 2
  22.                         For i4 = i3 + 1 To r - 1
  23.                             For i5 = i4 + 1 To r
  24.                                 x = s(i1) & "," & s(i2) & "," & s(i3) & "," & s(i4) & "," & s(i5)
  25.                                 d(x) = ""
  26.                             Next
  27.                         Next
  28.                     Next
  29.                 Next
  30.             Next
  31.         End If
  32.         r = 0
  33.     Next
  34.     k = d.keys
  35.     ReDim Brr(1 To d.Count, 1 To 10)
  36.     For i = 0 To UBound(k)
  37.         aa = Split(Replace(Replace(k(i), ", ", ""), " ,", ""), ",")

  38.         For j = 0 To UBound(aa)
  39.             Brr(i + 1, aa(j)) = aa(j)
  40.         Next
  41.     Next
  42.     Range("a1").Resize(UBound(Brr), 10) = Brr
  43.     d.RemoveAll

  44. End Sub
复制代码

类型不匹配.rar

31.7 KB, 下载次数: 41

发表于 2013-4-2 13:15 | 显示全部楼层
直接在出错的时候点调试,看看本地窗口,估计又是对空对像操作了。
回复

使用道具 举报

发表于 2013-4-2 13:17 | 显示全部楼层
回复

使用道具 举报

发表于 2013-4-2 13:22 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub 组合_Click()
  2.    
  3.     Dim sh As Worksheet
  4.     Set sh = Sheets("1")
  5.     Dim Arr, s(), r%, i&, j&, i1&, i2&, i3&, i4&, i5&, x$
  6.     Dim d, k, Brr
  7.     Set d = CreateObject("Scripting.Dictionary")
  8.     Arr = sh.Range("a1:j20")
  9.     Debug.Print sh.Range("a1:j20").Address(False, False)
  10.     For i = 1 To UBound(Arr)
  11.         For j = 1 To UBound(Arr, 2)
  12.             If Arr(i, j) <> "" Then
  13.                 r = r + 1
  14.                 ReDim Preserve s(1 To r)
  15.                 s(r) = Arr(i, j)
  16.             End If
  17.         Next
  18.         If r >= 5 Then
  19.             For i1 = 1 To r - 4
  20.                 For i2 = i1 + 1 To r - 3
  21.                     For i3 = i2 + 1 To r - 2
  22.                         For i4 = i3 + 1 To r - 1
  23.                             For i5 = i4 + 1 To r
  24.                                 x = s(i1) & "," & s(i2) & "," & s(i3) & "," & s(i4) & "," & s(i5)
  25.                                 d(x) = ""
  26.                             Next
  27.                         Next
  28.                     Next
  29.                 Next
  30.             Next
  31.         End If
  32.         r = 0
  33.     Next
  34.     k = d.keys
  35.     ReDim Brr(1 To d.Count, 1 To 10)
  36.     For i = 0 To UBound(k)
  37.         aa = Split(Replace(Replace(k(i), ", ", ""), " ,", ""), ",")

  38.         For j = 0 To UBound(aa)
  39.             Brr(i + 1, aa(j)) = aa(j)
  40.         Next
  41.     Next
  42.     Range("a1").Resize(UBound(Brr), 10) = Brr
  43.     d.RemoveAll

  44. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

发表于 2013-4-2 13:22 | 显示全部楼层
组合的结果楼主自己验证下。

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

发表于 2013-4-2 13:23 | 显示全部楼层
63行开始的,J列有10这个数据。

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

发表于 2013-4-2 13:26 | 显示全部楼层
aa(j),原来是这里的原因,aa(j)相当于是索引了。

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-4-2 16:51 | 显示全部楼层
hwc2ycy 发表于 2013-4-2 13:22

当aa(J)<>""时,类型匹配了,但是,组合后每行数字分别是从1到5个,而我要求每行数字只有5个。请老师帮忙再修改一次。谢谢!
回复

使用道具 举报

发表于 2013-4-2 16:52 | 显示全部楼层
aa(j)用这个做下标就不对了嘛,你里面有数字10的情况,不就索引成了第10列的数据了。
回复

使用道具 举报

 楼主| 发表于 2013-4-2 17:27 | 显示全部楼层
hwc2ycy 发表于 2013-4-2 16:52
aa(j)用这个做下标就不对了嘛,你里面有数字10的情况,不就索引成了第10列的数据了。

老师你好,麻烦你把这题代码重新编写,组合后使每行数字都是5个。谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 00:06 , Processed in 0.492528 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表