[Giúp đỡ] Lấy dữ liệu một loại file đang đóng từ phiếu xuất kho

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
709
Được thích
90
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Yêu cầu: Browse vào thư mục chứa các phiếu sau khi xuất từ hệ thống xuống cần lấy các thông tin vào file Temp
- Số phiếu: Vào cột N
- Ngày xuất: Vào cột M

Lần lượt lấy hết các vật tư trong phiếu xuất vào bảng. Hết phiếu này kế tiếp phiếu khác
- Mã hàng hóa: Vào cột B
- Tên vật tư: Vào cột C
- Đơn vị vào cột C
-
-
- Số phiếu: Vào cột J

Cám ơn các anh/chị. Mong các anh giúp đỡ
 

File đính kèm

  • Mau.xlsx
    44.9 KB · Đọc: 13
  • Phieu_xuat_PXKVTU_KH_16_002214.xls
    35 KB · Đọc: 14
  • Phieu_xuat_PXKVTU_KH_16_002248.xls
    24.5 KB · Đọc: 11
  • Phieu_xuat_PXKVTU_KH_16_002305.xls
    25 KB · Đọc: 10
  • Capture.jpg
    Capture.jpg
    19 KB · Đọc: 8
Yêu cầu: Browse vào thư mục chứa các phiếu sau khi xuất từ hệ thống xuống cần lấy các thông tin vào file Temp
- Số phiếu: Vào cột N
- Ngày xuất: Vào cột M

Lần lượt lấy hết các vật tư trong phiếu xuất vào bảng. Hết phiếu này kế tiếp phiếu khác
- Mã hàng hóa: Vào cột B
- Tên vật tư: Vào cột C
- Đơn vị vào cột C
-
-
- Số phiếu: Vào cột J

Cám ơn các anh/chị. Mong các anh giúp đỡ

File bạn xuất ra đều bị lỗi (hỏi ???) khi mở file -> Nếu ok sẽ -> tiếp tục lỗi Protect View...: thì mần ăn gì được khi dùng code tự động mở file???

Vì vậy bạn xem lại việc xuất file ra từ hệ thống: 1 là xuất ra định dạng 2003 bình thường đừng dính xml hay format gì trong file, hoặc xuất ra định dạng .xlsx cho dễ xử lý rồi mới tính tiếp....
 
Upvote 0
Máy em mở bình thường anh. Chắc do em bỏ chế độ protect view trong Office, nhờ anh xử giúp em với a
 
Upvote 0
Máy em mở bình thường anh. Chắc do em bỏ chế độ protect view trong Office, nhờ anh xử giúp em với a

Chạy code, Select file cần tổng hợp.

Mã:
Public Sub GPE()
Dim Item, sArr, Ws As Worksheet, Sp As String, Ng As Date, N As Long
Dim dArr(1 To 50000, 1 To 11), tArr(1 To 1000, 1 To 2), K As Long, I As Long, J As Long
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Filters.Add "Microsoft Excel Files", "*.xls*", 1
    If Not .Show = -1 Then
        MsgBox "Ban chua chon File", vbInformation, "----GPE----"
        Exit Sub
    End If
'On Error Resume Next
For Each Item In .SelectedItems
    If Left(Item, 1) <> "~" Then
    N = N + 1
    Application.DisplayAlerts = False
    With Workbooks.Open(Item)
    Set Ws = .Sheets(1)
    sArr = Ws.Range("A22").CurrentRegion.Value
    Sp = Mid(Ws.Range("C7"), 5, 100)
    Ng = VBA.DateSerial(Mid(Ws.[C9], 26, 4), Mid(Ws.[C9], 19, 2), Mid(Ws.[C9], 10, 2))
    tArr(N, 1) = Sp: tArr(N, 2) = Ng
    For I = 3 To UBound(sArr)
        If sArr(I, 1) <> Empty Then
            K = K + 1
            dArr(K, 1) = K: dArr(K, 2) = sArr(I, 3): dArr(K, 3) = sArr(I, 2)
            For J = 4 To UBound(sArr, 2)
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 10) = Sp
            dArr(K, 11) = Mid(Sp, 4, 3)
        End If
    Next I
    .Close False
    End With
    Application.DisplayAlerts = True
    End If
Next Item
    If K Then Range("A5").Resize(K, 11) = dArr: Range("N2").Resize(N, 2).Value = tArr
End With
MsgBox "Da Tong Hop Xong!", , "------GPE------"
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mấy ngày đi làm ít vào thấy câu hỏi của mình được anh hpkhuong giúp đỡ vui rất nhiều. Code của anh đã giải quyết được vấn đề em đưa ra, Nhân đây nhờ anh giúp đỡ thêm cho em với anh (Do tối ưu lại file mà không biết sửa code):
1. Để nguyên định dạng mã hàng hóa là dạng Text
2. Đưa thông tin phiếu xuất từ Cột N của Sheet Temp sang cột D của Sheet Input
Cám ơn rất nhiều
 

File đính kèm

  • Mau.xlsm
    58.7 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Nhờ anh hpkhuong và các anh chị giúp đỡ với ạ. Cám ơn anh/chị
 
Upvote 0
1. Để nguyên định dạng mã hàng hóa là dạng Text

=> Bạn có quyền chọn Format của cột B Sheet Temp là TEXT trước khi chạy code cơ mà

2. Đưa thông tin phiếu xuất từ Cột N của Sheet Temp sang cột D của Sheet Input
Chỉnh câu này
Mã:
 If K Then Range("A5").Resize(K, 11) = dArr: Range("N2").Resize(N, 2).Value = tArr

Thành
Mã:
 If K Then Range("A5").Resize(K, 11) = dArr: Sheets("Input").Range("D1").Resize(N, 2).Value = tArr
 
Upvote 0
Bạn có quyền chọn Format của cột B Sheet Temp là TEXT trước khi chạy code cơ mà

Dạ anh khi chạy Code nó xóa hết định dạng text của cột Mã vật tư anh ạ
VD:
060638 ---> 60638
002985----> 2985
 
Upvote 0
Dạ Ok anh hpkhuong. Sau khi để định dạng text thì ok rồi anh nhé. Thanks a
 
Upvote 0
Chạy code, Select file cần tổng hợp.

Mã:
Public Sub GPE()
Dim Item, sArr, Ws As Worksheet, Sp As String, Ng As Date, N As Long
Dim dArr(1 To 50000, 1 To 11), tArr(1 To 1000, 1 To 2), K As Long, I As Long, J As Long
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Filters.Add "Microsoft Excel Files", "*.xls*", 1
    If Not .Show = -1 Then
        MsgBox "Ban chua chon File", vbInformation, "----GPE----"
        Exit Sub
    End If
'On Error Resume Next
For Each Item In .SelectedItems
    If Left(Item, 1) <> "~" Then
    N = N + 1
    Application.DisplayAlerts = False
    With Workbooks.Open(Item)
    Set Ws = .Sheets(1)
    sArr = Ws.Range("A22").CurrentRegion.Value
    Sp = Mid(Ws.Range("C7"), 5, 100)
    Ng = VBA.DateSerial(Mid(Ws.[C9], 26, 4), Mid(Ws.[C9], 19, 2), Mid(Ws.[C9], 10, 2))
    tArr(N, 1) = Sp: tArr(N, 2) = Ng
    For I = 3 To UBound(sArr)
        If sArr(I, 1) <> Empty Then
            K = K + 1
            dArr(K, 1) = K: dArr(K, 2) = sArr(I, 3): dArr(K, 3) = sArr(I, 2)
            For J = 4 To UBound(sArr, 2)
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 10) = Sp
            dArr(K, 11) = Mid(Sp, 4, 3)
        End If
    Next I
    .Close False
    End With
    Application.DisplayAlerts = True
    End If
Next Item
    If K Then Range("A5").Resize(K, 11) = dArr: Range("N2").Resize(N, 2).Value = tArr
End With
MsgBox "Da Tong Hop Xong!", , "------GPE------"
Application.ScreenUpdating = True
End Sub

Em nhờ anh hpkhuong sửa giúp em lấy thêm thông tin kho xuất với ạ. Cột cần lấy thông tin là C17 trong phiếu xuất lấy thông tin trong (VTM03-A) đưa vào cột K
Cám ơn anh nhiều
 
Upvote 0
Em nhờ anh hpkhuong sửa giúp em lấy thêm thông tin kho xuất với ạ. Cột cần lấy thông tin là C17 trong phiếu xuất lấy thông tin trong (VTM03-A) đưa vào cột K
Cám ơn anh nhiều
Tôi chả thấy trong file đính kèm, C17 nào chứa cụm (VTM03-A) này cả...
 
Upvote 0
Thông tin em cần lấy nằm ở trong các phiếu xuất kho anh. Dòng C17 ạ

Tìm dòng này
Mã:
dArr(K, 10) = Sp
Thêm vào đoạn code phí sau:
Mã:
dArr(K, 10) = Sp
dArr(K, 11) = Left(Mid(Ws.[C17], InStr(1, Ws.[C17], "(") + 1, 20), _
            InStr(1, Mid(Ws.[C17], InStr(1, Ws.[C17], "(") + 1, 20), ")") - 1)
 
Upvote 0
Tìm dòng này
Mã:
dArr(K, 10) = Sp
Thêm vào đoạn code phí sau:
Mã:
dArr(K, 10) = Sp
dArr(K, 11) = Left(Mid(Ws.[C17], InStr(1, Ws.[C17], "(") + 1, 20), _
            InStr(1, Mid(Ws.[C17], InStr(1, Ws.[C17], "(") + 1, 20), ")") - 1)

Dear anh hpkhuong
Hiện nay kho bên em phát sinh thêm mã dự án của từng kho. Code trước của anh không lấy được
Anh sửa giúp em với nhé. Em đính kèm 2 phiếu xuất kho đặc trưng
 

File đính kèm

  • Phieu_xuat_PXKVTU_19_000083.xls
    31 KB · Đọc: 8
  • Phieu_xuat_PXKVTU_KH_19_000120.xls
    31 KB · Đọc: 3
Upvote 0
Hix, các cao nhân giúp em vấn đề này với ạ
 
Upvote 0
Dear anh hpkhuong
Hiện nay kho bên em phát sinh thêm mã dự án của từng kho. Code trước của anh không lấy được
Anh sửa giúp em với nhé. Em đính kèm 2 phiếu xuất kho đặc trưng
Góp ý cho em:
1/ Phiếu xuất và phiếu nhập nên thiết kế sẳn trong File, khi in phiếu xong thì lưu vào sheet theo dõi.
2/ Cần tổng hợp hay truy vấn phiếu để in lại thì dựa vào sheet theo dõi.
3/ Không nên lưu mỗi phiếu làm gì cho tốn dung lượng ổ dĩa. Nếu cần phiếu nào đó gửi cho ai thì mới xuất phiếu đó ra thành File như em đã làm.
 
Upvote 0
Góp ý cho em:
1/ Phiếu xuất và phiếu nhập nên thiết kế sẳn trong File, khi in phiếu xong thì lưu vào sheet theo dõi.
2/ Cần tổng hợp hay truy vấn phiếu để in lại thì dựa vào sheet theo dõi.
3/ Không nên lưu mỗi phiếu làm gì cho tốn dung lượng ổ dĩa. Nếu cần phiếu nào đó gửi cho ai thì mới xuất phiếu đó ra thành File như em đã làm.
Tất cả các phiếu xuất kho đó xuất từ phần mềm ra anh.
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom