VBA:如何处理Oracle的Stock Reports

VBA:如何处理Oracle的Stock Reports

Background:

在Oracle EBS中可以导出很多的Reports。其中我经常会使用到Inventory>Reports>On-Hand的数据。

这个数据比Discoverer导出库存数据要准确。也比用查询后File>export仅导出某个Subinventory要好。

但是报表导出后是几十页很长的,难以使用的分页报表,不是我们熟悉的二维关系数据表。

Objective:

我们需要一张这样的报表:可以清晰看到Org下每个库位的库存情况,现时的库存数量,位置等信息。

Procedure:

1,使用Excel打开Oracle EBS下载的报表。并调整分隔符的位置。具体的不同公司可能位置不一样,但是原理是一致的。

Tips:编码最好是Unicode-8,这个兼容性最好。

2,导入Excel后,可能会有很多空格,我们先删除空格行:

当然,如果计算机运行很慢,那么直接用Excel的筛选-删除空白行也是可以的。千万别排序!


Sub Delete_Blank()

Dim a, b As Long
a = ActiveSheet.UsedRange.Rows.Count
For b = a To 1 Step -1
    If Worksheets.Application.CountA(Rows(b)) = 0 Then
    Rows(b).Delete
    End If
Next b

End Sub

3,然后,我们在A列前插入一列,并用代码把Subinventory后的具体库位自动填到每个物料的前面:

Sub Sub_Stock()

Columns("A:A").Select
Selection.Insert Shift:=xlToRight    'A列向右移动

Dim I, j, m As Integer
Dim c As Range
Dim str As String

j = ActiveSheet.UsedRange.Rows.Count

For I = 1 To j
If Left(Cells(I, 2).Value, 12) = "Subinventory" Then
str = Mid(Cells(I, 2).Value, 14, 12)
m = 1
Do
Cells(I + m, 1) = str
m = m + 1
Loop While Left(Cells(I + m, 2).Value, 12) <> "Subinventory" And (I + m) <= j
End If

Next I


End Sub

4,最后,把不是物料的行全部删除,并把第一行的Title填好:

Sub del()

Dim I, j, m As Integer


j = ActiveSheet.UsedRange.Rows.Count

For I = j To 1 Step -1

If Cells(I, 6) = "UOM" Or Cells(I, 6) = "" Or Mid(Cells(I, 6), 2, 1) = "-" Or Mid(Cells(I, 6), 3, 1) = "-" Then
Rows(I).Delete
End If
Next I

Rows("1:1").Select
Selection.Insert Shift:=xlTodown
Cells(1, 1) = "Subinventory"
Cells(1, 2) = "Item"
Cells(1, 3) = "Description"
Cells(1, 4) = "Rev"
Cells(1, 5) = "Locator"
Cells(1, 6) = "UOM"
Cells(1, 7) = "Quantity"

End Sub

最终得到的表格就可以直接被Excel和Access使用了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值