Excel精英培训网

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

[已解决]vba代码执行不了 球论坛高人帮我看看

[复制链接]
发表于 2013-2-3 14:45 | 显示全部楼层 |阅读模式
用vba编写了一个查询页面,通过下拉列表框里的编号查询出“数据源”工作表里的数据,并将它显示出来
代码如下
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$k$2" Then Exit Sub
Dim arr, brr(), d As New Dictionary
With Sheets("数据源")
arr = .Range("g2:q" & .Range("g65536").End(3).Row)
For b = 1 To UBound(arr)
d(arr(b, 1)) = ""
Next
Range("z2").Resize(d.Count) = Application.WorksheetFunction.Transpose(d.Keys)
g = UBound(arr, 2)
Range(Range("a5"), Cells(14, g)) = ""
ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
For x = 1 To UBound(arr)
If arr(x, 1) = Range("k2") Then
k = k + 1
For c = 1 To UBound(arr, 2)
brr(k, c) = arr(x, c)
Next
End If
Next
End With
Range("a5").Resize(k, UBound(arr, 2)) = brr

End Sub
代码似乎没什么问题,但就是找不到数据,求论坛里的高手帮着看看,小弟感激不敬
最佳答案
2013-2-3 15:30
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2.     If Target.Address <> "$K$2" Then Exit Sub
  3.     Application.EnableEvents = False
  4.     Application.ScreenUpdating = False
  5.     Dim arr, brr(), d As New Dictionary
  6.     With Sheets("数据源")
  7.         arr = .Range("a2:q" & .Range("g65536").End(3).Row)
  8.         For b = 1 To UBound(arr)
  9.             d(arr(b, 1)) = ""
  10.         Next
  11.         Range("z2").Resize(d.Count) = Application.WorksheetFunction.Transpose(d.Keys)
  12.         g = UBound(arr, 2)
  13.         Range(Range("a5"), Cells(14, "k")) = ""
  14.         ReDim brr(1 To UBound(arr), 1 To 11)
  15.         For x = 1 To UBound(arr)
  16.             If arr(x, 1) = Range("k2") Then
  17.                 k = k + 1
  18.                 For c = 1 To UBound(brr, 2)
  19.                     brr(k, c) = arr(x, c + 6)
  20.                 Next
  21.             End If
  22.         Next
  23.     End With
  24.     If k > 0 Then
  25.         Range("a5").Resize(k, UBound(brr, 2)) = brr
  26.     End If
  27.     Application.EnableEvents = True
  28.     Application.ScreenUpdating = True
  29. End Sub
复制代码
 楼主| 发表于 2013-2-3 14:50 | 显示全部楼层
见附件 ,怎样让数据源里的数据自动显示在查询页面里呢 谢谢

成品码单.zip

15.2 KB, 下载次数: 9

回复

使用道具 举报

发表于 2013-2-3 15:02 | 显示全部楼层
第一个错的地方,地址返回的是大写的字母.
  1. If Target.Address <> "$K$2" Then Exit Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-2-3 15:11 | 显示全部楼层
hwc2ycy 发表于 2013-2-3 15:02
第一个错的地方,地址返回的是大写的字母.

谢谢楼上,我改过来后有显示“应用程序定义或对象定义错误”
回复

使用道具 举报

发表于 2013-2-3 15:16 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-2-3 15:18 编辑
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2.     If Target.Address <> "$K$2" Then Exit Sub
  3.     Application.EnableEvents = False
  4.     Dim arr, brr(), d As New Dictionary
  5.     With Sheets("数据源")
  6.         arr = .Range("a2:q" & .Range("g65536").End(3).Row)
  7.         For b = 1 To UBound(arr)
  8.             d(arr(b, 1)) = ""
  9.         Next
  10.         Range("z2").Resize(d.Count) = Application.WorksheetFunction.Transpose(d.Keys)
  11.         g = UBound(arr, 2)
  12.         Range(Range("a5"), Cells(14, "k")) = ""
  13.         ReDim brr(1 To UBound(arr), 1 To 11)
  14.         For x = 1 To UBound(arr)
  15.             If arr(x, 1) = Range("k2") Then
  16.                 k = k + 1
  17.                 For c = 1 To UBound(brr, 2)
  18.                     brr(k, c) = arr(x, c + 6)
  19.                 Next
  20.             End If
  21.         Next
  22.     End With
  23.     If k > 0 Then
  24.         Range("a5").Resize(k, UBound(arr, 2)) = brr
  25.     End If
  26.     Application.EnableEvents = True
  27. End Sub
复制代码
回复

使用道具 举报

发表于 2013-2-3 15:17 | 显示全部楼层
小心当你查到的符合条件的数据超过10行,情况就又不一样了。
回复

使用道具 举报

发表于 2013-2-3 15:19 | 显示全部楼层
K是空值嘛,代码重新改了下,你再试试。
回复

使用道具 举报

发表于 2013-2-3 15:26 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2.     If Target.Address <> "$K$2" Then Exit Sub
  3.     Application.EnableEvents = False
  4.     Dim arr, brr(), d As New Dictionary
  5.     With Sheets("数据源")
  6.         arr = .Range("a2:q" & .Range("g65536").End(3).Row)
  7.         For b = 1 To UBound(arr)
  8.             d(arr(b, 1)) = ""
  9.         Next
  10.         Range("z2").Resize(d.Count) = Application.WorksheetFunction.Transpose(d.Keys)
  11.         g = UBound(arr, 2)
  12.         Range(Range("a5"), Cells(14, "k")) = ""
  13.         ReDim brr(1 To UBound(arr), 1 To 11)
  14.         For x = 1 To UBound(arr)
  15.             If arr(x, 1) = Range("k2") Then
  16.                 k = k + 1
  17.                 For c = 1 To UBound(brr, 2)
  18.                     brr(k, c) = arr(x, c + 6)
  19.                 Next
  20.             End If
  21.         Next
  22.     End With
  23.     If k > 0 Then
  24.         Range("a5").Resize(k, UBound(brr, 2)) = brr
  25.     End If
  26.     Application.EnableEvents = True
  27. End Sub
复制代码
最后输出有问题。
回复

使用道具 举报

 楼主| 发表于 2013-2-3 15:27 | 显示全部楼层
hwc2ycy 发表于 2013-2-3 15:16

brr(k, c) = arr(x, c + 6)
这里为什么要改成c+6?
回复

使用道具 举报

发表于 2013-2-3 15:30 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2.     If Target.Address <> "$K$2" Then Exit Sub
  3.     Application.EnableEvents = False
  4.     Application.ScreenUpdating = False
  5.     Dim arr, brr(), d As New Dictionary
  6.     With Sheets("数据源")
  7.         arr = .Range("a2:q" & .Range("g65536").End(3).Row)
  8.         For b = 1 To UBound(arr)
  9.             d(arr(b, 1)) = ""
  10.         Next
  11.         Range("z2").Resize(d.Count) = Application.WorksheetFunction.Transpose(d.Keys)
  12.         g = UBound(arr, 2)
  13.         Range(Range("a5"), Cells(14, "k")) = ""
  14.         ReDim brr(1 To UBound(arr), 1 To 11)
  15.         For x = 1 To UBound(arr)
  16.             If arr(x, 1) = Range("k2") Then
  17.                 k = k + 1
  18.                 For c = 1 To UBound(brr, 2)
  19.                     brr(k, c) = arr(x, c + 6)
  20.                 Next
  21.             End If
  22.         Next
  23.     End With
  24.     If k > 0 Then
  25.         Range("a5").Resize(k, UBound(brr, 2)) = brr
  26.     End If
  27.     Application.EnableEvents = True
  28.     Application.ScreenUpdating = True
  29. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 03:44 , Processed in 0.337027 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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