Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: spp0063

[已解决]Excel 2003 VBA 问题

[复制链接]
 楼主| 发表于 2016-11-11 16:45 | 显示全部楼层
本帖最后由 spp0063 于 2016-11-11 16:46 编辑

grf1973 你好,
打开变成乱码,看不出,我的是繁体中文版本
亂碼.jpg
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2016-11-14 10:24 | 显示全部楼层
是的。我打开你的也是乱码。所以帖了代码。
回复

使用道具 举报

 楼主| 发表于 2016-11-14 16:04 | 显示全部楼层
本帖最后由 spp0063 于 2016-11-14 16:05 编辑
grf1973 发表于 2016-11-14 10:24
是的。我打开你的也是乱码。所以帖了代码。

你好,
不好意思,再请教一个问题, 问题如下
If LotNo Like "*-" & x & "-*" Then
抓取单一批号是没有问题(批号只有DW01-16110726-1122), 但是我的批号有可能为附图的批号(DW01-16110726-1122 或DW0R-16110726-1122),若x输入相同批号是否可分别抓取到DW01-16110726-1122与DW0R-16110726-1122,请问该如何修改,谢谢.

1111.jpg
回复

使用道具 举报

发表于 2016-11-14 16:51 | 显示全部楼层
(DW01-16110726-1122 或DW0R-16110726-1122)
你到底想抓取哪个?有什么规律?
If LotNo Like "*-" & x & "-*" Then 表示 可抓取含 “-16110726-”的所有批号。
回复

使用道具 举报

 楼主| 发表于 2016-11-14 17:03 | 显示全部楼层
grf1973 发表于 2016-11-14 16:51
(DW01-16110726-1122 或DW0R-16110726-1122)
你到底想抓取哪个?有什么规律?
If LotNo Like "*-" & x &  ...

你好,
DW01-16110726-1122 或DW0R-16110726-1122 兩種批號都有可能被抓取, 規律性都是DW0開頭(DW01-16110726-1122 或DW0R-16110726-1122),有没有可以输入1-16110726带出相对应的数值,输入R-16110726带出相对应的数值,是否有这种写法?
不好意思, 再次麻烦你,谢谢.

回复

使用道具 举报

发表于 2016-11-15 13:27 | 显示全部楼层
要不干脆搞个下拉框动态提示?随着输入内容逐步缩小符合条件的批号范围。
回复

使用道具 举报

 楼主| 发表于 2016-11-15 13:41 | 显示全部楼层
grf1973 发表于 2016-11-15 13:27
要不干脆搞个下拉框动态提示?随着输入内容逐步缩小符合条件的批号范围。


你好,
下拉框动态提示这是指什么意思? 是否有样本可供参考, 谢谢


回复

使用道具 举报

发表于 2016-11-15 14:48 | 显示全部楼层
做了个窗体,帖代码如下。
按“搜寻资料”窗体自动运行。


  1. Dim brr()

  2. Private Sub CommandButton1_Click()
  3.     crr = Me.ListBox1.List
  4.     For i = 0 To Me.ListBox1.ListCount - 1
  5.         If Me.ListBox1.Selected(i) = True Then xstr = xstr & "," & Me.ListBox1.List(i)
  6.     Next
  7.     xstr = Mid(xstr, 2)
  8.     If Len(xstr) Then Call Sel(xstr) Else MsgBox "Please Selcet At Least One LotNo"
  9.     Unload Me
  10. End Sub

  11. Private Sub CommandButton2_Click()
  12.     Unload Me
  13. End Sub

  14. Private Sub TextBox1_Change()           '文本框改变引发下拉框列表改变
  15.     Dim str$, i%, j%, k%
  16.     str = UCase(Trim(TextBox1))
  17.     If Len(str) = 0 Then
  18.         ListBox1.List = brr
  19.         Exit Sub
  20.     Else
  21.         ListBox1.Clear
  22.         For j = 1 To UBound(brr)
  23.             kh = brr(j)
  24.             If Len(kh) > 0 Then
  25.                 If kh Like "*" & str & "*" Then
  26.                     i = i + 1
  27.                     ListBox1.AddItem brr(j)   '   AddItem 对于单列的列表框或组合框,在列表中添加一项。对于多列的列表框或组合框,在列表中添加一行。
  28.                 End If
  29.             End If
  30.         Next
  31.     End If
  32. End Sub
  33. '
  34. Private Sub UserForm_Initialize()
  35.     Set d = CreateObject("scripting.dictionary")
  36.     With Sheets(1)
  37.         arr = .Range("a6:a" & .[a65536].End(3).Row)
  38.         For i = 1 To UBound(arr)
  39.             If Len(arr(i, 1)) Then d(arr(i, 1)) = ""
  40.         Next
  41.         brr = d.keys
  42.         Me.ListBox1.List = brr
  43.     End With
  44. End Sub

  45. Private Sub Sel(xstr)
  46.     Dim i, j, jj, k, x, LotNo
  47.     Dim ToRange As Range
  48.     Dim tmpArr(), n(), arr
  49.     With Worksheets(1)   '读入数据源
  50.         arr = .Range("a1:av" & .[a65536].End(3).Row)
  51.     End With
  52.     With ActiveSheet
  53.         Set ToRange = .Range("F4:J18")
  54.         ReDim tmpArr(1 To ToRange.Rows.Count, 1 To 5)
  55.         ReDim n(1 To ToRange.Rows.Count)     '数组n记录每组数的记录位置
  56.         ToRange.ClearContents: .[I2] = ""
  57.         xrr = Split(xstr, ",")
  58.         For i = 6 To UBound(arr)
  59.             LotNo = arr(i, 1)   '批号
  60.             For Each x In xrr
  61.                 If LotNo = x Then
  62.                     .Range("I2") = LotNo    'I2显示为批号(这样vlookup结果就正确了,但当符合条件的有多条记录时,会只显示最后一条记录的批号)
  63.                     For j = 5 To 47 Step 3    'E列到AU列
  64.                         k = (j - 2) / 3    '根据源数据的列转换到tmparr的行
  65.                         For jj = 0 To 2   '每列共3列需录入tmpArr(最后一次2列)
  66.                             If j + jj <= UBound(arr, 2) Then    '限定边界(最后一次只计算AU--AV列)
  67.                                 If arr(i, j + jj) <> "" Then     '如果数据源需录入的列非空
  68.                                     n(k) = n(k) + 1     'tmpArr对应行每组的记录位置+1
  69.                                     If n(k) <= 5 Then tmpArr(k, n(k)) = arr(i, j + jj)   '源数据保存到记录位置(最多只保存5个)
  70.                                 End If
  71.                             End If
  72.                         Next jj
  73.                     Next j
  74.                 End If
  75.             Next
  76.         Next i
  77.         ToRange = tmpArr    '显示结果
  78.     End With
  79. End Sub
复制代码

VBA.rar

44.91 KB, 下载次数: 4

回复

使用道具 举报

发表于 2016-11-15 14:51 | 显示全部楼层
在文本框里输入内容,下面List会动态更新。点选后按“OK"即可。可多选。
回复

使用道具 举报

 楼主| 发表于 2016-11-16 08:53 | 显示全部楼层
本帖最后由 spp0063 于 2016-11-16 09:08 编辑
grf1973 发表于 2016-11-15 14:51
在文本框里输入内容,下面List会动态更新。点选后按“OK"即可。可多选。

你好,
谢谢你抽空帮我写出这个程式,使用附件测试后,
1. 我尝试建立一个与你相同的表单后,发现你的会有框框可以选择,我的没有,怎么叫出框框选择?


2.jpg
1.jpg
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 15:44 , Processed in 0.325580 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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