Excel精英培训网

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

[已解决]VBA_请大家看看这个代码问题,出在哪里,实现数据有效性8.13出现的问题

[复制链接]
发表于 2011-8-13 09:49 | 显示全部楼层 |阅读模式
VBA_实现数据有效性8.13出现的问题


请大家看看附件,修改下代码,并麻烦老师们,说下,问题出在哪儿,解决方法。。。。。

最佳答案
2011-8-13 12:42
回复 yjwdjfqb 的帖子

3表示  xlup 我在6楼写很清楚了
那个
irow = .[b65536].End(3).Row
改成
irow = .[D65536].End(3).Row
irow = .[E5536].End(3).Row
irow = .[F65536].End(3).Row
任意一个就行了

VBA_实现数据有效性8.13出现的问题.rar

23.09 KB, 下载次数: 36

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-13 10:34 | 显示全部楼层
回复 yjwdjfqb 的帖子

经测试,在worksheet- change 事件中如下代码有问题:
arr = .Cells(6, icolumn).Resize(irow - 1)
运行到该代码时 irow值为1,此时 Resize的参数为0,出错。
回复

使用道具 举报

 楼主| 发表于 2011-8-13 10:41 | 显示全部楼层
回复 ldxhzy 的帖子

老师,不是不行,修改了,还是不行,也有错误提示,请老师帮忙测试下,上传个附件。。。

感谢 。。。
回复

使用道具 举报

发表于 2011-8-13 10:44 | 显示全部楼层
回复 yjwdjfqb 的帖子

irow = .[b65536].End(3).Row

因为你的B列没有任何值,所以 irow 永远都只会=1

将B65536改成你在用的列就可以了

比如说“D,E,F 只要数据是填满了的就行,G,I,O,P,Q这几列不行,因为有很多空的,数据会不准确”
回复

使用道具 举报

 楼主| 发表于 2011-8-13 10:46 | 显示全部楼层
回复 无聊的疯子 的帖子

老师,我不会修改了,能不能把你修改好的上传个附件,纠正错误地方,使数据能准确。。。


谢谢。。。
回复

使用道具 举报

发表于 2011-8-13 10:57 | 显示全部楼层
回复 yjwdjfqb 的帖子

irow = .[b65536].End(3).Row
改成
irow = .[D65536].End(3).Row
irow = .[E5536].End(3).Row
irow = .[F65536].End(3).Row
都可以

你要明白.[b65536].End(3).Row 是什么意思这个就能懂了

.[b65536]          .End             (3)                        .Row
单元格B65536     结束   (xlup=3,up意思是上)      行
整理一下
以单元格B65536为基准,往上最后一个非空(有内容的)单元格的行号

基准单元格可以随便换的,根据你的具体要求来换
比如说你表中的G列内容都有很多空,用这个可以看出效果
irow1 = .[G5].End(3).Row
irow2 = .[G9].End(3).Row
irow3 = .[G9].End(3).Row
自己多测试就会了
回复

使用道具 举报

 楼主| 发表于 2011-8-13 11:27 | 显示全部楼层
回复 无聊的疯子 的帖子

Private Sub Worksheet_Change(ByVal Target As Range)
Dim icell As Range
If Target.Address <> "$E$4" And Target.Address <> "$G$10" And Target.Address <> "$I$7" Then End
   
    If Target.Address = "$E$4" Then
        Set icell = Target.Offset(1)
    ElseIf Target.Address = "$G$10" Then
        Set icell = Target.Offset(3)
    ElseIf Target.Address = "$I$7" Then
        Set icell = Target.Offset(, 2)
   
    End If
If Target = "" Then
    With icell
    .Validation.Delete
    .Value = ""
    End With
    End
End If
Dim d As Object, arr, i%
Set d = CreateObject("scripting.dictionary")
With Sheets("总人数")
   
    icolumn = .Rows(5).Find(Target).Column
    irow = .[D65536].End(3).Row
    irow = .[E65536].End(3).Row
    irow = .[F65536].End(3).Row
    irow = .[G65536].End(3).Row
    irow = .[H65536].End(3).Row
    irow = .[I65536].End(3).Row
    irow = .[J65536].End(3).Row
    irow = .[K65536].End(3).Row
    irow = .[L65536].End(3).Row
    irow = .[M65536].End(3).Row
    irow = .[N65536].End(3).Row
    irow = .[O65536].End(3).Row
    irow = .[P65536].End(3).Row
    irow = .[Q65536].End(3).Row
   
    arr = .Cells(6, icolumn).Resize(irow - 1)
End With
For i = 1 To UBound(arr)
    If arr(i, 1) <> "" Then d(arr(i, 1)) = ""
Next
With icell.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:=Join(d.keys, ",")
End With
End Sub
Sub 定义序列()
Dim arr, i%, ss$, brr
With Sheets("总人数")
   
    arr = Application.Transpose(.[D5:Q5])
End With
For i = 1 To UBound(arr)
    ss = ss & arr(i, 1) & ","
Next i
brr = Array(Range("E4"), Range("G10"), Range("I7"))
For i = 0 To 2
    With brr(i).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:=ss
    End With
Next i
End Sub


老师,我还是没有看懂这句中    irow = .[D65536].End(3).Row 里面End(3). 3表示什么


回复

使用道具 举报

 楼主| 发表于 2011-8-13 11:28 | 显示全部楼层
我理解为,标题行在第几行,但我改了下,也不是
回复

使用道具 举报

 楼主| 发表于 2011-8-13 11:38 | 显示全部楼层
回复 无聊的疯子 的帖子

老师,帮我看下,我修改的对不对,再帮我解决下

  irow = .[D65536].End(3).Row 里面End(3). 3表示什么
回复

使用道具 举报

发表于 2011-8-13 12:42 | 显示全部楼层    本楼为最佳答案   
回复 yjwdjfqb 的帖子

3表示  xlup 我在6楼写很清楚了
那个
irow = .[b65536].End(3).Row
改成
irow = .[D65536].End(3).Row
irow = .[E5536].End(3).Row
irow = .[F65536].End(3).Row
任意一个就行了

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 03:44 , Processed in 0.396438 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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