Excel精英培训网

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

[已解决]Excel表格内下拉菜单默认显示不随源数据变化怎么办?

[复制链接]
发表于 2015-5-19 09:06 | 显示全部楼层 |阅读模式
本帖最后由 ihjmh 于 2015-5-19 10:01 编辑

我在Excel表单内建立了一个下拉菜单,源数据是横向(行数据,不是列数据)且动态变化的,每次源数据发生变化后,需要显示下拉菜单的表格显示的还是旧数据,只有手动下拉选择才会变。

请问如何设置VBA内的代码,才能对表格内的下拉菜单进行刷新,或者默认显示最新的选项?
谢谢各位大神了
最佳答案
2015-5-19 09:52
  1. Sub 刷新下拉内容()
  2.     Row1 = Sheets("送货明细表").Range("a65536").End(xlUp).Row  '“送货明细表”是源数据所在表,“a65536”是源数据所在的列
  3.     Arr1 = Sheets("送货明细表").Range("a3:a" & Row1)
  4.     Set D = CreateObject("Scripting.Dictionary")
  5.     For I = 1 To UBound(Arr1)
  6.         If Not D.Exists(Arr1(I, 1)) Then
  7.             D.Add Arr1(I, 1), ""
  8.         End If
  9.     Next
  10.     s = Join(D.KEYS, ",")
  11.     With Range("B5:B5").Validation             'B5:B5"是所下拉的单元格
  12.         .Delete
  13.         .Add Type:=xlValidateList, _
  14.              AlertStyle:=xlValidAlertStop, _
  15.              Operator:=xlBetween, _
  16.              Formula1:=s
  17.     End With
  18. End Sub
复制代码
也是借鉴他人的代码,自己瞧瞧看看可否用!!
发表于 2015-5-19 09:09 | 显示全部楼层
回复

使用道具 举报

发表于 2015-5-19 09:10 | 显示全部楼层
可以用工作表事件,
每次触发都会显示最新数据。
回复

使用道具 举报

 楼主| 发表于 2015-5-19 09:29 | 显示全部楼层
谢谢楼上的两位,试了半天,公司不能上传文档。照片也不可以。

首先版主说的传附件我实在传不了,不过百度知道有个提问和我差不多,最佳答案是一个人乱写的,根本就没有回答到关键问题。我也不能发链接,我就把问题整个复制过来吧。百度知道问题:Excel 下拉菜单 来源更新的问题.


@雪舞子,表格事件已经试过了,不知道怎么刷新才能使下拉菜单显示源数据已经更改过的内容,我使用的是2007的版本
回复

使用道具 举报

 楼主| 发表于 2015-5-19 09:30 | 显示全部楼层
雪舞子 发表于 2015-5-19 09:10
可以用工作表事件,
每次触发都会显示最新数据。

@雪舞子,表格事件已经试过了,不知道怎么刷新才能使下拉菜单显示源数据已经更改过的内容,我使用的是2007的版本
回复

使用道具 举报

 楼主| 发表于 2015-5-19 09:31 | 显示全部楼层
wayy 发表于 2015-5-19 09:09
附件发上来看一下吧。

谢谢楼上的两位,试了半天,公司不能上传文档。照片也不可以。

@版主 说的传附件我实在传不了,不过百度知道有个提问和我差不多,最佳答案是一个人乱写的,根本就没有回答到关键问题。我也不能发链接,我就把问题整个复制过来吧。百度知道问题:Excel 下拉菜单 来源更新的问题.
回复

使用道具 举报

 楼主| 发表于 2015-5-19 09:42 | 显示全部楼层
wayy 发表于 2015-5-19 09:09
附件发上来看一下吧。

在线急等啊各位
回复

使用道具 举报

 楼主| 发表于 2015-5-19 09:43 | 显示全部楼层
雪舞子 发表于 2015-5-19 09:10
可以用工作表事件,
每次触发都会显示最新数据。

在线急等啊各位
回复

使用道具 举报

发表于 2015-5-19 09:52 | 显示全部楼层    本楼为最佳答案   
  1. Sub 刷新下拉内容()
  2.     Row1 = Sheets("送货明细表").Range("a65536").End(xlUp).Row  '“送货明细表”是源数据所在表,“a65536”是源数据所在的列
  3.     Arr1 = Sheets("送货明细表").Range("a3:a" & Row1)
  4.     Set D = CreateObject("Scripting.Dictionary")
  5.     For I = 1 To UBound(Arr1)
  6.         If Not D.Exists(Arr1(I, 1)) Then
  7.             D.Add Arr1(I, 1), ""
  8.         End If
  9.     Next
  10.     s = Join(D.KEYS, ",")
  11.     With Range("B5:B5").Validation             'B5:B5"是所下拉的单元格
  12.         .Delete
  13.         .Add Type:=xlValidateList, _
  14.              AlertStyle:=xlValidAlertStop, _
  15.              Operator:=xlBetween, _
  16.              Formula1:=s
  17.     End With
  18. End Sub
复制代码
也是借鉴他人的代码,自己瞧瞧看看可否用!!
回复

使用道具 举报

 楼主| 发表于 2015-5-19 09:55 | 显示全部楼层
文轩馨婷 发表于 2015-5-19 09:52
也是借鉴他人的代码,自己瞧瞧看看可否用!!

我去测试一下,谢谢你
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 10:30 , Processed in 0.289534 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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