Excel精英培训网

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

[已解决]关于VBA多条件引用的问题

[复制链接]
发表于 2015-5-24 14:58 | 显示全部楼层 |阅读模式
现在我有两个表格,一个是BOM清单,一个是库存明细表,我想达到的目的是当BOM清单中点击确认出库的时候,库存明细表会扣除当日的数量,但是现在发现一个问题,当BOM清单里面的零件名称是一样的时候,库存表扣除就乱了,现在我想再加入一个条件来引用,就是零件规格,麻烦各位大神帮我修改一下,谢谢!!
Sub lqxs()
Dim Arr, i&, rq, wb As Workbook
Dim d, k, t, r1
Set d = CreateObject("Scripting.Dictionary")
Sheet1.Activate
Arr = [a1].CurrentRegion
rq = Arr(1, 8)
For i = 3 To UBound(Arr)
    If Arr(i, 4) = "" Then Exit For
    d(Arr(i, 4)) = Arr(i, 6)
Next
k = d.keys: t = d.items
Set wb = Workbooks("配件收发存明细表.xlsx")
Dim Sht As Worksheet
For i = 0 To UBound(k)
    For Each Sht In wb.Sheets
        If InStr(Sht.Name, k(i)) Then
            Set r1 = Sht.[a:a].Find(rq, , , 1)
            If Not r1 Is Nothing Then
                Sht.Cells(r1.Row, 4) = t(i)
            End If
        End If
    Next
Next
Application.DisplayAlerts = False
wb.Close True
Application.DisplayAlerts = True
End Sub
最佳答案
2015-5-24 15:38
本帖最后由 冥王 于 2015-5-24 15:39 编辑
  1. Sub lqxs()
  2.     Dim Arr, i&, rq, wb As Workbook
  3.     Dim d, k, t, r1
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Sheet1.Activate
  6.     Arr = [a1].CurrentRegion
  7.     rq = Arr(1, 8)
  8.     For i = 3 To UBound(Arr)
  9.         If Arr(i, 4) = "" Then Exit For
  10.         d(Arr(i, 4) & "#" & Arr(i, 5)) = Arr(i, 6)
  11.     Next
  12.     k = d.keys: t = d.items
  13.     Set wb = Workbooks("配件收发存明细表.xlsx")
  14.     Dim Sht As Worksheet
  15.     For i = 0 To UBound(k)
  16.         For Each Sht In wb.Sheets
  17.             If InStr(Sht.Name, Split(k(i), "#")(0)) Then
  18.                 If Sht.Cells(2, 2) = Replace(k(i), "#", "") Then
  19.                     Set r1 = Sht.[a:a].Find(rq, , , 1)
  20.                     If Not r1 Is Nothing Then
  21.                         Sht.Cells(r1.Row, 4) = t(i)
  22.                     End If
  23.                 End If
  24.             End If
  25.         Next
  26.     Next
  27.     Application.DisplayAlerts = False
  28.     wb.Save
  29.     Application.DisplayAlerts = True
  30. End Sub
复制代码

BOM清单.zip

48.43 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2015-5-24 15:29 | 显示全部楼层
补充问题:这个代码每次点确认都会把明细表关掉,怎样才能点击确认后明细表不关掉呢,因为这只是一个产品的BOM,还有其他产品要计算,每次都要把明细表打开。。。。比较痛苦
回复

使用道具 举报

发表于 2015-5-24 15:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 冥王 于 2015-5-24 15:39 编辑
  1. Sub lqxs()
  2.     Dim Arr, i&, rq, wb As Workbook
  3.     Dim d, k, t, r1
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Sheet1.Activate
  6.     Arr = [a1].CurrentRegion
  7.     rq = Arr(1, 8)
  8.     For i = 3 To UBound(Arr)
  9.         If Arr(i, 4) = "" Then Exit For
  10.         d(Arr(i, 4) & "#" & Arr(i, 5)) = Arr(i, 6)
  11.     Next
  12.     k = d.keys: t = d.items
  13.     Set wb = Workbooks("配件收发存明细表.xlsx")
  14.     Dim Sht As Worksheet
  15.     For i = 0 To UBound(k)
  16.         For Each Sht In wb.Sheets
  17.             If InStr(Sht.Name, Split(k(i), "#")(0)) Then
  18.                 If Sht.Cells(2, 2) = Replace(k(i), "#", "") Then
  19.                     Set r1 = Sht.[a:a].Find(rq, , , 1)
  20.                     If Not r1 Is Nothing Then
  21.                         Sht.Cells(r1.Row, 4) = t(i)
  22.                     End If
  23.                 End If
  24.             End If
  25.         Next
  26.     Next
  27.     Application.DisplayAlerts = False
  28.     wb.Save
  29.     Application.DisplayAlerts = True
  30. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-5-24 15:42 | 显示全部楼层
厉害厉害厉害,谢谢啦!!
回复

使用道具 举报

发表于 2015-5-24 15:42 | 显示全部楼层
在你原先的代码基础上只改动了一点点

BOM清单.rar

51.09 KB, 下载次数: 7

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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