Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: 蒋德宏

根据总库存删除 (进库 出库 返货)的问题

[复制链接]
发表于 2012-6-1 08:23 | 显示全部楼层
测试代码,结果中有很多是负数呢??


  1. Private Sub Worksheet_Activate()
  2. On Error Resume Next
  3.   Sheets("总库存").Range("a4:m60000") = ""
  4.   If Sheets("进库").Range("a4") = "" Then
  5.     MsgBox "进库现在是空的,请先把货品录入到进库以后再看总库存!", vbInformation, "进库为空!"
  6.     Exit Sub
  7.   End If
  8.   Dim 棋盘(1 To 65536, 1 To 12)
  9.   Dim 行数, L As Byte
  10.   Dim 进库, x, k
  11.   Set d = CreateObject("scripting.dictionary")
  12.   进库 = Sheets("进库").Range("a4:l" & Sheets("进库").Range("a65536").End(xlUp).Row)
  13.   For x = 1 To UBound(进库)
  14.     If d.exists(进库(x, 1)) Then
  15.        行数 = d(进库(x, 1))
  16.        For L = 3 To 12
  17.          If L = 9 Or L = 11 Then L = L + 1
  18.          棋盘(行数, L) = 棋盘(行数, L) + 进库(x, L)
  19.        Next
  20.      Else
  21.        k = k + 1
  22.        d(进库(x, 1)) = k
  23.        For L = 1 To 12
  24.          棋盘(k, L) = 进库(x, L)
  25.        Next
  26.     End If
  27.   Next x
  28.   Sheets("总库存").Range("a4").Resize(k, 12) = 棋盘

  29.   If Sheets("出库").Range("a4") = "" Then
  30.     MsgBox "出库现在是空的,如果想看库存,就直接看进库就可以了!", vbInformation, "出库还没有内容!"
  31.     Exit Sub
  32.   End If
  33.   Dim 出库
  34.   出库 = Sheets("出库").Range("a4:l" & Sheets("出库").Range("a65536").End(xlUp).Row)
  35.   For x = 1 To UBound(出库)
  36.    If d.exists(出库(x, 1)) Then
  37.       行数 = d(出库(x, 1))
  38.       For L = 3 To 12
  39.         If L = 9 Or L = 11 Then L = L + 1
  40.         棋盘(行数, L) = 棋盘(行数, L) - 出库(x, L)
  41.       Next
  42.     Else
  43.       k = k + 1
  44.       d(出库(x, 1)) = k
  45.       For L = 1 To 12
  46.         棋盘(k, L) = 出库(x, L)
  47.       Next
  48.     End If
  49.   Next x
  50.   Sheets("总库存").Range("a4").Resize(k, 12) = 棋盘

  51.   If Sheets("返货").Range("a4") = "" Then

  52.   Exit Sub
  53.   End If
  54.   Dim 返货
  55.   返货 = Sheets("返货").Range("a4:m" & Sheets("返货").Range("a65536").End(xlUp).Row)
  56.   For x = 1 To UBound(返货)
  57.    If d.exists(返货(x, 2)) Then
  58.       行数 = d(返货(x, 2))
  59.       For L = 3 To 12
  60.         If L = 9 Or L = 11 Then L = L + 1
  61.         棋盘(行数, L) = 棋盘(行数, L) - 返货(x, L + 1)
  62.       Next
  63.     Else
  64.       k = k + 1
  65.       d(返货(x, 2)) = k
  66.       For L = 1 To 12
  67.         棋盘(k, L) = 返货(x, L + 1)
  68.       Next
  69.     End If
  70.   Next x
  71.   Sheets("总库存").Range("a4").Resize(k, 12) = 棋盘
  72.   If Sheets("总库存").Range("O7").Value <> Sheets("总库存").Range("O8").Value Then
  73.     MsgBox "进库或出库数据不对", vbInformation, "总库存提示"
  74.   End If
  75.   k = 0
  76.   For x = 1 To UBound(进库)
  77.     If 棋盘(d(进库(x, 1)), 8) = 0 Then
  78.       If k = 0 Then k = x + 3
  79.       If 棋盘(d(进库(x + 1, 1)), 8) <> 0 Then
  80.         s = s & "," & k & ":" & x + 3
  81.         k = 0
  82.       End If
  83.     End If
  84.   Next
  85.   s = Mid(s, 2)
  86.   Sheets("进库").Range(s).Delete xlUp
  87.   s = ""
  88.   k = 0
  89.   For x = 1 To UBound(出库)
  90.     If 棋盘(d(出库(x, 1)), 8) = 0 Then
  91.       If k = 0 Then k = x + 3
  92.       If 棋盘(d(出库(x + 1, 1)), 8) <> 0 Then
  93.         s = s & "," & k & ":" & x + 3
  94.         k = 0
  95.       End If
  96.     End If
  97.   Next
  98.   s = Mid(s, 2)
  99.   Sheets("出库").Range(s).Delete xlUp
  100.     s = ""
  101.   k = 0
  102.   For x = 1 To UBound(返货)
  103.     If 棋盘(d(返货(x, 1)), 8) = 0 Then
  104.       If k = 0 Then k = x + 3
  105.       If 棋盘(d(返货(x + 1, 1)), 8) <> 0 Then
  106.         s = s & "," & k & ":" & x + 3
  107.         k = 0
  108.       End If
  109.     End If
  110.   Next
  111.   s = Mid(s, 2)
  112.   Sheets("返货").Range(s).Delete xlUp
  113. End Sub

复制代码

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 10:22 , Processed in 0.113142 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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