2

我希望标题不要太混乱!

基本上,我有自己的 Excel 清单。我有一个工作表作为我的菜单,我为每个客户(例如,TD Bank、Rogers、Standard Life)都有一个工作表,其内容是这样的(在这种情况下,我的客户是 Videotron):

    A           B          C                 D      E            F        G         H
1   CLIENT      UNIQUEID   MATERIALTYPE      SIZE   MATERIALCODE LOCATION QTYPERBOX TOTALQTY
2   Videotron   VID-001    Outgoing Envelope 9x12   VID-OE0812   4-1-3    500       15000
3   Videotron   VID-002    Letterhead        8.5x14 VID-LH0812   1-1-1    2500      50000
4   Videotron   VID-003    Reply Envelope    #9     VID-RE0812   8-5-2    1000      7500

我需要帮助的工作表是我的“位置”表,其中包含我仓库中所有物理位置的列表,如下所示:

     A          B        C          D              E      F              G           H
     LOCATION   CLIENT   UNIQUEID   MATERIALTYPE   SIZE   MATERIALCODE   QTYPERBOX   TOTALQTY 
1    1-1-1    
2    1-1-2
3    1-1-3
4    1-2-1
5    1-2-2
6    1-2-3
     etc. etc.

对于每个位置,其中一个客户工作表中都会有一个条目,可以在任何地方。如果我们根据显示的工作表以物理位置“1-1-1”为例,我在那里有一个包含 50,000 个 Videotron 信头的托盘。我需要代码做的是在所有客户端工作表中搜索“1-1-1”,一旦找到将信息复制到第 1 行上方的 B:H 列。然后我需要对 location 进行相同的处理第 2 行中的 1-1-2' 依此类推,直到我的最后一个位置,为了争论,是 '8-8-3'。

目标是让“位置”工作表使用从客户工作表中获取的正确信息填充自身,这反过来将始终真实反映当前的实物库存。这意味着如果我从位置“1-1-1”中删除 10,000 个信封,它将在“位置”工作表中自动更新。类似的情况是,如果我在仓库中实际交换了 2 个托盘,假设我将位置“1-1-1”的托盘与“2-3-1”的托盘交换,并在我的客户工作表中进行了更改。 .. 我需要“位置”工作表来反映更改。

我查看了很多代码,其中很多我认为可以帮助我,但它只与我想要实现的部分有关,而且我没有足够的知识或理解将它们拼凑在一起我的工作簿。

有没有人认为有可能让它发挥作用,或者我只是在做梦?

编辑:应该说我在 Excel 2003 中。

4

1 回答 1

0

根据我的评论,我仍然认为它需要成为一个数据库,但我意识到业务限制可能会使您偏离最有效的方式,因为这是现实。

太棒了 也许你可以尝试类似...

Sub sortInventory()
Dim wsInv As Worksheet
Dim wsCust As Worksheet

Dim rngSearch As Range
Dim cellSearch As Range
Dim rngLoc As Range
Dim rngCurLoc As Range

Dim findVal As String

Dim locCol As Integer, custCol As Integer

Dim locFound As Boolean





Set wsInv = ActiveWorkbook.Sheets("Locations")
Set rngLoc = wsInv.Range("A1", wsInv.Range("A1").End(xlDown))

For Each rngCurLoc In rngLoc.Cells
'This is what you're looking for in each sheet.
    findVal = rngCurLoc.Value
    locFound = False
    For Each wsCust In ActiveWorkbook.Sheets
        If locFound Then Exit For

       'Exclude the location sheet
        If wsCust.Name = "Locations" Then
         Next wsCust
        End If

        Set rngSearch = wsCust.Range("F1", Range("F1").End(xlDown))

        For Each cellSearch In rngSearch.Cells
        'Look for your value
            If cellSearch.Value = findVal Then ''Alternate method could use the "find"
            'Transfer to Locations
            'Use an offset loop to pick/place map to new location.

                 For custCol = 1 To 8 '8 can modify to the width of your data (I think it's 8)
                Select Case custCol
                    Case Is <= 5 'The first 5 are offset by one to the location sheet.
                        wsInv.Cells(rngCurLoc.Row, custCol + 1).Value = wsCust.Cells(cellSearch.Row, custCol).Value
                    Case 6 'Location column
                        ''Do nothing.
                    Case Else 'Direct map
                        wsInv.Cells(rngCurLoc.Row, custCol).Value = wsCust.Cells(cellSearch.Row, custCol).Value
                End Select
            Next custCol
            locFound = True 'This will kick the 2nd loop out to the range loop.
            Exit For
        End If
    Next wsCust
Next rngCurLoc




End Sub

我无法真正对其进行测试,当我将它粘贴到此处的代码块中时,选项卡变得有点有趣,因此控制循环不会超级排列。无论如何,它应该让你开始。它的对象和集合很重,但 VBA 代码可能会变得非常脆弱,而无需明确定义您要做什么。

于 2013-01-04T13:10:18.560 回答