Lấy dữ liệu Phiếu xuất kho (Word) vào Sheet

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
719
Được thích
97
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Kính gửi anh chị!
Hiện em đang làm đối soát vật tư xuất ra công trình cần phải lấy từ các phiếu xuất kho dạng file word do phần mềm xuất ra vào Excel. Làm thủ công với số lượng ít thì cố làm được, tuy nhiên với mỗi công trình có nhiều phiếu rất tồn thời gian
Mong muốn anh chị hỗ trợ giúp em có thể cho phép chọn nhiều phiếu xuất kho lấy được dữ liệu từ bảng trong word đưa vào excel bao gồm các thông tin như file đính kèm
Cám ơn các anh chị nhiều

1. Excel mong muốn kết quả như thế này

1635593095724.png

2. Phiếu xuất kho từ phần mềm dạng file word
1635593156460.png
 

File đính kèm

  • Lay DLieu PXK.xlsx
    40.2 KB · Đọc: 18
  • PXK_VTU 4-VTN_21_460133_.doc
    67.5 KB · Đọc: 22
Ngồi buồn làm thử.
Lưu ý: code viết cho cấu trúc dữ liệu y hệt như trong tập tin Word. Nếu là xuất từ máy thì chắc chắn các tập tin Word sẽ có cấu trúc như nhau.

Mở tập tin Excel -> Alt + F11 -> menu Insert -> Module -> dán code sau vào Module1. Tên sheet dùng trong code là TEMP, nếu khác thì sửa lại. Gán cho Button macro lay_dulieu. Mỗi lần chạy lay_dulieu thì phải chọn các tập tin Word (doc, docx) và kết quả sẽ được nhập vào sheet sau các kết quả cũ.

Mã:
Function dulieuPXK(docFilename, sodong_ketqua As Long)
Dim filename As String, text As String, ma As String, k As Long, r As Long, c As Long, sodong As Long, ketqua(), wordApp As Object, doc As Object
    sodong_ketqua = 0
    On Error Resume Next
    Set wordApp = CreateObject("Word.Application")
'    wordApp.Visible = True
    If Err.Number Then Exit Function
    ReDim ketqua(1 To 500 * UBound(docFilename), 1 To 11)   ' gia thiet la moi tap tin Word cho mang co 500 dong ket qua
   
    For k = 1 To UBound(docFilename)
        Set doc = wordApp.documents.Open(docFilename(k))
        With doc.Sections.First.Headers(2).Range.Paragraphs
            For r = 1 To .Count
                text = .Item(r).Range.text
                Mid(text, 2, 1) = "o"
                If Mid(text, 1, 4) = "So: " Then
                    text = Trim(Mid(text, 5, Len(text) - 5))
                    Exit For
                End If
            Next r
            If r > .Count Then Exit Function
        End With
       
        With doc.Tables(2)
            sodong = .Rows.Count - 3
            For r = 1 To sodong
                ketqua(sodong_ketqua + r, 1) = Replace(.Cell(r + 3, 3).Range.text, Chr(7), "")
                ketqua(sodong_ketqua + r, 2) = Replace(.Cell(r + 3, 2).Range.text, Chr(7), "")
                For c = 3 To 8
                    ketqua(sodong_ketqua + r, c) = Replace(.Cell(r + 3, c + 1).Range.text, Chr(7), "")
                    If c > 6 Then ketqua(sodong_ketqua + r, c) = CDbl(Replace(ketqua(sodong_ketqua + r, c), ".", "")) ' Don gia, Thanh tien
                Next c
                ketqua(sodong_ketqua + r, 9) = text
                ma = doc.Tables(1).Cell(5, 1).Range.text
                ketqua(sodong_ketqua + r, 10) = Replace(Mid(ma, InStr(1, ma, ":") + 2), Chr(7), "")
                ma = doc.Tables(1).Cell(3, 1).Range.text
                ketqua(sodong_ketqua + r, 11) = Replace(Mid(ma, InStr(1, ma, ":") + 2), Chr(7), "")
            Next r
        End With
        sodong_ketqua = sodong_ketqua + sodong
        doc.Close False
    Next k
   
    wordApp.Quit
    Set doc = Nothing
    Set wordApp = Nothing
    dulieuPXK = ketqua
End Function

Sub lay_dulieu()
Dim sodong_ketqua As Long, docFilename, ketqua
    docFilename = Application.GetOpenFilename("Word Files (*.doc;*.docx), *.doc;*.docx", MultiSelect:=True)
    If Not IsArray(docFilename) Then Exit Sub
    ketqua = dulieuPXK(docFilename, sodong_ketqua)
    If sodong_ketqua > 0 Then
        ThisWorkbook.Worksheets("TEMP").Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(sodong_ketqua, UBound(ketqua, 2)).Value = ketqua
    End If
End Sub
 
Upvote 0
Dạ quá tuyệt vời. Em cám ơn anh batman1
Thêm 1 yêu cầu nho nhỏ anh giúp em bổ sung với nhé cho em thêm danh sách phiếu xuất và ngày xuất sang cột P:R với ạ, mục đích sử dụng sau này Vlookup khi cần lấy thêm thông tin ạ
1635644842177.png
 

File đính kèm

  • Lay DLieu PXK.xlsx
    40.5 KB · Đọc: 7
Upvote 0
Dạ quá tuyệt vời. Em cám ơn anh batman1
Thêm 1 yêu cầu nho nhỏ anh giúp em bổ sung với nhé cho em thêm danh sách phiếu xuất và ngày xuất sang cột P:R với ạ, mục đích sử dụng sau này Vlookup khi cần lấy thêm thông tin ạ
View attachment 268501
Theo tôi hiểu thì ngày lấy từ header của tập tin Word. Thế còn PX1, ..., PX11 lấy từ đâu?

Thêm nữa, mỗi lần thao tác bạn có thể chọn nhiều tập tin. Vậy thì giả sử chọn 3 tập tin: tập tin 1 bảng 2 có 11 mục và ngày là 11.10.2021, tập tin 2 bảng 2 có 5 mục và ngày là 13.10.2021, tập tin 3 bảng 2 có 9 mục và ngày là 15.10.2021. 3 ngày khác nhau, 3 phiếu xuất khác nhau với số mục khác nhau. Vậy cột P:R trông như thế nào? P1: P11 = PX1, PX2, ..., PX11, P12: P16 = PX1, ..., PX5, P17: P25 = PX1, PX2, ..., PX9? Phiếu và Ngày ở Q1:R1, Q12:R12 và Q17:R17?

Tung kết quả lên nhưng phải giải thích chúng được lấy ở đâu, trình bầy chúng như thế nào. Tôi không đoán mò nữa.
 
Upvote 0
Dạ anh!
Cột đó chỉ liệt kê mã phiếu xuất kho và ngày xuất kho của các phiếu file word được chọn anh. Em đính kèm 2 phiếu xuất kho và kết quả mong muốn anh
VD: Như em đang nhờ có 1 phiếu thì list kết quả như trên ạ, nếu nhiều phiếu thì list tiếp theo anh. Còn PX1, PX2,.... PX11 thì em ví dụ liệt kê số phiếu được chọn

Mã:
        With doc.Sections.First.Headers(2).Range.Paragraphs
            For r = 1 To .Count
                text = .Item(r).Range.text
                Mid(text, 2, 1) = "o"
                If Mid(text, 1, 4) = "So: " Then
                    text = Trim(Mid(text, 5, Len(text) - 5))
                    Exit For
                End If
            Next r
            If r > .Count Then Exit Function
        End With
Đoạn này anh đã lấy được phiếu xuất, anh lấy giúp em ngày xuất kho với ạ
 

File đính kèm

  • Lay DLieu PXK.xlsb
    33.6 KB · Đọc: 10
  • PXK_VTU 4-VTN_21_473628_.doc
    59.5 KB · Đọc: 7
  • PXK_VTU 3-VTN_21_473636_.doc
    69 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
Dạ anh!
Cột đó chỉ liệt kê mã phiếu xuất kho và ngày xuất kho của các phiếu file word được chọn anh.
VD: Như em đang nhờ có 1 phiếu thì list kết quả như trên ạ, nếu nhiều phiếu thì list tiếp theo anh.
Bạn ạ, vấn đề của bạn mà tôi bỏ ra nhiều thời gian để cụ thể vấn đề. Hơi vô lý phải không? Với dữ liệu mà tôi mất công liệt kê trong bài #4 thì P1:Rxyz phải có mặt mũi như nào?
Còn PX1, PX2,.... thì em ví dụ ạ
Ví dụ? Thế cụ thể chúng được lấy từ đâu? Từ trên trời? Nếu tự tạo thì tạo như nào?

Tôi viết thế thôi, chứ vấn đề của bạn mà bạn có vẻ thảnh thơi hơn tôi nhỉ.
 
Upvote 0
Bạn ạ, vấn đề của bạn mà tôi bỏ ra nhiều thời gian để cụ thể vấn đề. Hơi vô lý phải không? Với dữ liệu mà tôi mất công liệt kê trong bài #4 thì P1:Rxyz phải có mặt mũi như nào?

Ví dụ? Thế cụ thể chúng được lấy từ đâu? Từ trên trời? Nếu tự tạo thì tạo như nào?

Tôi viết thế thôi, chứ vấn đề của bạn mà bạn có vẻ thảnh thơi hơn tôi nhỉ.
Dạ nó được lấy thông tin từ đây anh
VD: Em đính kèm 2 phiếu đây ạ
1635676084161.png
1635676103680.png
Bài đã được tự động gộp:

Theo tôi hiểu thì ngày lấy từ header của tập tin Word. Thế còn PX1, ..., PX11 lấy từ đâu?

Thêm nữa, mỗi lần thao tác bạn có thể chọn nhiều tập tin. Vậy thì giả sử chọn 3 tập tin: tập tin 1 bảng 2 có 11 mục và ngày là 11.10.2021, tập tin 2 bảng 2 có 5 mục và ngày là 13.10.2021, tập tin 3 bảng 2 có 9 mục và ngày là 15.10.2021. 3 ngày khác nhau, 3 phiếu xuất khác nhau với số mục khác nhau. Vậy cột P:R trông như thế nào? P1: P11 = PX1, PX2, ..., PX11, P12: P16 = PX1, ..., PX5, P17: P25 = PX1, PX2, ..., PX9? Phiếu và Ngày ở Q1:R1, Q12:R12 và Q17:R17?

Tung kết quả lên nhưng phải giải thích chúng được lấy ở đâu, trình bầy chúng như thế nào. Tôi không đoán mò nữa.
Dạ ngày lấy từ header của từng tập tin Word ạ
 
Upvote 0
Dạ nó được lấy thông tin từ đây anh
VD: Em đính kèm 2 phiếu đây ạ
View attachment 268531
View attachment 268532
Bài đã được tự động gộp:


Dạ ngày lấy từ header của từng tập tin Word ạ
Số cho cột Q thì tôi cũng lấy từ header ngay từ bài #2. Ngày thì tôi cũng đoán là lấy từ header
Theo tôi hiểu thì ngày lấy từ header của tập tin Word

Không cần bạn giải thích tôi cũng đã đoán được ngày và số lấy từ header. Cái tôi chưa hiểu là PX...

Thế còn PX1, ..., PX11 lấy từ đâu?

Tôi nhìn trong tập tin Word thì không thấy chỗ nào có PX1, ..., PX11. Nếu là tự tạo thì sao kông nói một lời? Tung kết quả lên nhưng không một lời giải thích?

Nếu tự tạo thì có phải là: trong tập tin 1 trong bảng 2 có 11 dòng. Danh sách xuất CÓ DẠNG <PX><số thự tự từ 1 đến 11>? Nếu thế thì tại sao tập tin 2 có 5 dòng mà lại không có TIẾP THEO PX1, PX2, ..., PX5 (5 dòng từ tập tin 2)? Hoặc 5 dòng TIẾP THEO PX12, PX13, ..., PX16? Tức cứ mỗi tập tin thì đánh số lại từ 1, và tiền tố luôn là PX? Nếu thế thì chọn 3 tập tin sẽ có 3 PX1?

Tôi đã cho ví dụ trong bài #4 với số tập tin là 3, có 3 ngày khác nhau, với số dòng là 11, 5 và 9 thì cứ thế mà liệt kê trong P:R cho tôi hiểu chứ đính kèm thêm tập tin làm gì nữa?

Tung kết quả lên cũng phải giải thích cho người khác hiểu.
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ cái PX1...PXx là số thứ tự phiếu được lấy thông tin ạ với tiền tố là PX + số thứ tự phiếu ạ
 
Upvote 0
Upvote 0

File đính kèm

  • List PXK mong muon.xlsm
    45 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
4 bài hỏi nhằm xác định vấn đề để trợ giúp cứ như đi vào hư không bởi 4 bài trả lời không tưởng tượng nổi về khả năng đọc hiểu của người trả lời.
 
Upvote 0
Dạ anh giúp em với ạ
Thông tin lấy trong PXK của anh đã rất tuyệt vời rồi
Còn phần tạo 1 mảng tên phiếu và ngày xuất anh giúp em ạ
Bài đã được tự động gộp:

4 bài hỏi nhằm xác định vấn đề để trợ giúp cứ như đi vào hư không bởi 4 bài trả lời không tưởng tượng nổi về khả năng đọc hiểu của người trả lời.
Dạ mong muốn phần đó của em chỉ liệt kê số phiếu và ngày xuất của phiếu được import vào thôi ạ. Thực sự diễn giải và câu hỏi em cũng chưa rõ lắm ạ
 
Upvote 0
Dạ mong muốn phần đó của em chỉ liệt kê số phiếu và ngày xuất của phiếu được import vào thôi ạ. Thực sự diễn giải và câu hỏi em cũng chưa rõ lắm ạ
Bạn lặp lại chuyện đó làm gì nhỉ? Bạn có đọc và hiểu bài #4 chưa? Chắc là chưa hiểu gì vì đến bài này bạn vẫn cứ "em chỉ liệt kê số phiếu..."
 
Upvote 0
Bạn lặp lại chuyện đó làm gì nhỉ? Bạn có đọc và hiểu bài #4 chưa? Chắc là chưa hiểu gì vì đến bài này bạn vẫn cứ "em chỉ liệt kê số phiếu..."
Thớt chỉ cần 2 cột Q và R, còn cột P là số thứ tự với tiền tố "PX", dùng công thức excel là ="PX "&row()
 
Upvote 0
Thớt chỉ cần 2 cột Q và R, còn cột P là số thứ tự với tiền tố "PX", dùng công thức excel là ="PX "&row()
Tôi đoán được thớt nói gì nhưng tại sao cứ ông nói gà (là tiền đề, phải chấp nhận) thì bà nói vịt. Ông ấy cáu là phải, tôi ngoài cuộc mà còn cáu nữa là.
 
Upvote 0
Dạ khổ thế ạ, đến diễn giải cho người khác hiểu ý mình còn chưa được ạ
Anh Maika8008 và anh HieuCD giúp em với ạ. Anh batman1 giận em rồi
 
Upvote 0
Muốn lấy mã phiếu xuất ra theo code của anh batman1 em phải làm sao đây ạ
Anh em xin giúp thêm đoạn code tách ngày tháng phiếu với ạ
1635698882509.png
 
Upvote 0
Thớt chỉ cần 2 cột Q và R, còn cột P là số thứ tự với tiền tố "PX", dùng công thức excel là ="PX "&row()
Thế thì tại sao tới bài #11 vẫn cứ
Dạ cột P: Q chỉ liệt kê số phiếu, ngày xuất kho được import vào thôi anh

Sao không nói một câu: "Thôi em bỏ cột P, anh làm giúp em cột Q: R". Đừng nói là câu nói khó quá không nghĩ ra.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom