Excel精英培训网

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

[已解决]下面这段代码在Excel 2003下运行没有问题,为何在Excel 2010下运行没有反应?

[复制链接]
发表于 2016-6-10 10:03 | 显示全部楼层 |阅读模式
本帖最后由 tinytiger 于 2016-6-10 17:52 编辑

Excel 2010下连“If ListBox1.ListIndex = -1 Then Exit Sub”这行代码都没有执行!请大家多多指教
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  If ListBox1.ListIndex = -1 Then Exit Sub
  Dim i&, s$
  With ListBox1
    For i = 0 To .ListCount - 1
      If .Selected(i) Then s = s & "、" & .List(i)
    Next
    .TopLeftCell.Offset(, -1).Value = Mid(s, 2)
    .Visible = False
  End With
End Sub

目前暂时知道的原因是:2010下要等很长的时间,有时候需要3秒,甚至10秒以上,ListBox1的内容才能成为可选的状态,具体的原因不明确。是不是系统的问题?
最佳答案
2016-6-10 20:23
具体原因不明,在一下代码的最后加了
ActiveWindow.ScrollRow = TR - 1
  ActiveWindow.ScrollRow = TR
你试试,加了之后我这边运行正常,相当于模拟鼠标滑轮滑动,你之前说的延迟也不是,鼠标滑动一下就可以了!
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.   Dim TR%, TC%, strV() As String, intI%, intL%
  3.   TR = Target.Row: TC = Target.Column
  4.   ListBox1.Visible = False
  5.   ListBox1.Locked = True
  6.   ListBox1.Locked = False
  7.   If TR > 1 And TR <= 281 And Target.Count = 1 Then
  8.     If TC = 7 Then
  9.       ActiveWindow.ScrollRow = TR
  10.       With ListBox1
  11.         .MultiSelect = 0
  12.         .ListStyle = 1
  13.         If Cells(TR, 6) = "城" Then
  14.           .List = Sheets("系统设置").Range("A9:B36").Value
  15.           .Height = 400
  16.           .ColumnCount = 2
  17.           .Width = 185
  18.           .ColumnWidths = "130,10"
  19.         Else
  20.           .List = Sheets("系统设置").Range("C9:C35").Value
  21.           .Height = 400
  22.           .Width = 150
  23.           .ColumnWidths = 130
  24.         End If
  25.         .Top = Target.Top
  26.         .Left = Target.Left + Target.Width
  27.         .Visible = True
  28.       End With
  29.     End If
  30.    
  31.     If TC = 8 Then
  32.       
  33.     ActiveWindow.ScrollRow = TR
  34.       If Trim(Cells(TR, 7)) = "" Then
  35.         Cells(TR, 7).Select
  36.       Else
  37.         With ListBox1
  38.           .MultiSelect = 1
  39.           .ListStyle = 1
  40.           .List = Sheets("系统设置").Range("C9:C35").Value
  41.           .Top = Target.Top
  42.           .Left = Target.Left + Target.Width
  43.           .Height = 400
  44.           .Width = 150
  45.           .ColumnWidths = 130
  46.           .Visible = True
  47.         End With
  48.         
  49.         If Trim(Target.Value) <> "" Then
  50.           strV = Split(Target.Value, "、")
  51.           For intI = 0 To UBound(strV)
  52.             For intL = 0 To ListBox1.ListCount - 1
  53.               If ListBox1.List(intL) = strV(intI) Then ListBox1.Selected(intL) = True
  54.             Next
  55.           Next
  56.         End If
  57.       End If
  58.     End If
  59.   ActiveWindow.ScrollRow = TR - 1
  60.   ActiveWindow.ScrollRow = TR
  61.   End If
  62. End Sub
复制代码

tmp.rar

32.37 KB, 下载次数: 7

发表于 2016-6-10 10:22 | 显示全部楼层
加了两个MSGBOX做测试,在2010中这行代码执行!
  1. Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  2.     If ListBox1.ListIndex = -1 Then
  3.         MsgBox "xx"
  4.         Exit Sub
  5.     End If
  6.     MsgBox "yy"
  7.     Dim i&, s$
  8.     With ListBox1
  9.         For i = 0 To .ListCount - 1
  10.         If .Selected(i) Then s = s & "、" & .List(i)
  11.         Next
  12.         .TopLeftCell.Offset(, -1).Value = Mid(s, 2)
  13.         .Visible = False
  14.     End With
  15. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-10 10:26 | 显示全部楼层
老司机带带我 发表于 2016-6-10 10:22
加了两个MSGBOX做测试,在2010中这行代码执行!

没有任何代码执行
回复

使用道具 举报

发表于 2016-6-10 10:39 | 显示全部楼层
tinytiger 发表于 2016-6-10 10:26
没有任何代码执行

上个附件吧
回复

使用道具 举报

发表于 2016-6-10 10:47 | 显示全部楼层
检查一下是否关闭了
Application.EnableEvents 属性
回复

使用道具 举报

 楼主| 发表于 2016-6-10 10:49 | 显示全部楼层
zjdh 发表于 2016-6-10 10:47
检查一下是否关闭了
Application.EnableEvents 属性

没有关闭,2003下运行没有问题,2010下没有任何一行代码执行
回复

使用道具 举报

发表于 2016-6-10 10:56 | 显示全部楼层
你先运行一下
Application.EnableEvents =True
再试
回复

使用道具 举报

 楼主| 发表于 2016-6-10 11:28 | 显示全部楼层
老司机带带我 发表于 2016-6-10 10:39
上个附件吧

附件已上传
回复

使用道具 举报

 楼主| 发表于 2016-6-10 16:34 | 显示全部楼层
顶一下
回复

使用道具 举报

发表于 2016-6-10 16:45 | 显示全部楼层
1.  ListBox1.ListIndex 何来的-1?  2010版中首行为 0  (你没有设置列标)
2.  运行ListBox1_DblClick正常
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:40 , Processed in 0.729942 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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