Chạy code (workbook open) sau khi sheet nguồn có dữ liệu

Liên hệ QC

Nhattanktnn

Thành viên gắn bó
Tham gia
11/11/16
Bài viết
3,154
Được thích
4,125
Donate (Momo)
Donate
Giới tính
Nam
Chào các anh chị và các bạn!
Mình có file xuất từ hệ thống ERP, sau khi xuất file thì sheet "draft" chạy sql lấy dữ liệu từ hệ thống (khoảng vài giây sau khi file được mở lên mới trả về đủ kết quả - cái này do IT làm và mình không can thiệp được)
Sheet "Result" mình có "chế" báo cáo theo ý muốn của mình, mình dùng workbook open để khi xuất báo cáo từ hệ thống thì Result sẽ lấy kết quả từ Draft
Tuy nhiên, do khi xuất file, sheet "draft" chưa kịp lấy dữ liệu thì sheet "Result" đã chạy code, nên kết quả mở lên file vẫn không có gì
Vậy anh chị và các bạn xem giúp có cách nào để code bên sheet "Result" "đợi" sheet "draft" có dữ liệu thì mới chạy code không?
(Nếu không có cách nào khác thì mình sẽ ấn nút chạy code, tuy nhiên hiểu biết hạn chế nên mình vẫn muốn hỏi xem có cách nào tự động được không?)
File đính kèm là file giả lập số liệu, để mọi người hình dung. Đuôi file gốc là định dạng .xltm
 

File đính kèm

  • GPE.xlsm
    145.5 KB · Đọc: 14
Chào các anh chị và các bạn!
Mình có file xuất từ hệ thống ERP, sau khi xuất file thì sheet "draft" chạy sql lấy dữ liệu từ hệ thống (khoảng vài giây sau khi file được mở lên mới trả về đủ kết quả - cái này do IT làm và mình không can thiệp được)
Sheet "Result" mình có "chế" báo cáo theo ý muốn của mình, mình dùng workbook open để khi xuất báo cáo từ hệ thống thì Result sẽ lấy kết quả từ Draft
Tuy nhiên, do khi xuất file, sheet "draft" chưa kịp lấy dữ liệu thì sheet "Result" đã chạy code, nên kết quả mở lên file vẫn không có gì
Vậy anh chị và các bạn xem giúp có cách nào để code bên sheet "Result" "đợi" sheet "draft" có dữ liệu thì mới chạy code không?
(Nếu không có cách nào khác thì mình sẽ ấn nút chạy code, tuy nhiên hiểu biết hạn chế nên mình vẫn muốn hỏi xem có cách nào tự động được không?)
File đính kèm là file giả lập số liệu, để mọi người hình dung. Đuôi file gốc là định dạng .xltm
Bạn thử thêm thế này xem sao
Mã:
#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
#Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
#End If
Sub Run()
sleep 1000
Call....
End sub
 
Upvote 0
Bạn thử thêm thế này xem sao
Mã:
#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
#Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
#End If
Sub Run()
sleep 1000
Call....
End sub
Cảm ơn bạn, cái hạn chế của sleep hay wait là mình phải đặt một thời gian cố định. thỉnh thoảng xuất dữ liệu cả năm thì thời gian truy xuất lâu, mà nếu để thời gian chờ lâu thì khi xuất dữ liệu ít lại phải chờ mất thời gian
Nên ý mình muốn hỏi là có cách nào nhận biết sheet "draft" đã có dữ liệu thì bắt đầu chạy code
(Mình vẫn nghĩ là không nhưng thử hỏi xem biết đâu... )
 
Upvote 0
Cảm ơn bạn, cái hạn chế của sleep hay wait là mình phải đặt một thời gian cố định. thỉnh thoảng xuất dữ liệu cả năm thì thời gian truy xuất lâu, mà nếu để thời gian chờ lâu thì khi xuất dữ liệu ít lại phải chờ mất thời gian
Nên ý mình muốn hỏi là có cách nào nhận biết sheet "draft" đã có dữ liệu thì bắt đầu chạy code
(Mình vẫn nghĩ là không nhưng thử hỏi xem biết đâu... )
Sao bạn không chờ fle dữ liệu chạy ra hết mới chạy Code trên VBA. Vân toàn làm vậy
 
Upvote 0
Sao bạn không chờ fle dữ liệu chạy ra hết mới chạy Code trên VBA. Vân toàn làm vậy
Giả sử xuất dữ liệu cả năm, nó chờ 1 phút. xuất dữ liệu một tháng, hoặc vài ngày (mình thường xuất như này) thì khoảng 10 giây
Vậy nếu đặt sleep 10 giây thì nó không đúng cho trường hợp cả năm. Còn nếu để 1 hoặc 2 phút thì khi xuất dữ liệu 1 tháng mình phải ngồi đợi 2 phút
 
Lần chỉnh sửa cuối:
Upvote 0
Giải thuật: Kiểm tra dung lượng File, nếu thỏa mãn có dữ liệu thì dung lượng ra sao >> Mở.
 
Upvote 0
Tôi đề nghị bỏ code vào sheet_Activate. Trong workbook open thì active sheet draft (chắc đang trắng). Ngó thấy có dữ liệu thì mở result coi
Nếu không thì xem code xltm có mở không, chèn code của mình và câu lệnh vào và gọi
 
Upvote 0
Chào các anh chị và các bạn!
Mình có file xuất từ hệ thống ERP, sau khi xuất file thì sheet "draft" chạy sql lấy dữ liệu từ hệ thống (khoảng vài giây sau khi file được mở lên mới trả về đủ kết quả - cái này do IT làm và mình không can thiệp được)
Sheet "Result" mình có "chế" báo cáo theo ý muốn của mình, mình dùng workbook open để khi xuất báo cáo từ hệ thống thì Result sẽ lấy kết quả từ Draft
Tuy nhiên, do khi xuất file, sheet "draft" chưa kịp lấy dữ liệu thì sheet "Result" đã chạy code, nên kết quả mở lên file vẫn không có gì
Vậy anh chị và các bạn xem giúp có cách nào để code bên sheet "Result" "đợi" sheet "draft" có dữ liệu thì mới chạy code không?
(Nếu không có cách nào khác thì mình sẽ ấn nút chạy code, tuy nhiên hiểu biết hạn chế nên mình vẫn muốn hỏi xem có cách nào tự động được không?)
File đính kèm là file giả lập số liệu, để mọi người hình dung. Đuôi file gốc là định dạng .xltm
Nên tách 2 phần code,
- Phần 1 đọc dữ liệu
- Phần 2 , xử lý dữ liệu

Nên cứ bấm chạy phần 1, xong thì mới sang phần 2
 
Upvote 0
Một cách khác bạn tham khảo: Kiểm trả hiện trạng kết nối tới ERP, nếu đóng rồi thì bắt đầu xử lý.
 
Upvote 0
Giải thuật: Kiểm tra dung lượng File, nếu thỏa mãn có dữ liệu thì dung lượng ra sao >> Mở.
Nhưng code chung chung là thế nào vậy bác, xuất file là code đếm dung lượng liên tục, và khi nào đạt đến mốc quy định của mình thì sheet result bắt đầu chạy code xuất báo cáo phải không ạ?
Tôi đề nghị bỏ code vào sheet_Activate. Trong workbook open thì active sheet draft (chắc đang trắng). Ngó thấy có dữ liệu thì mở result coi
Nếu vậy nó cũng tương đương với button click mà thầy?
Nếu không thì xem code xltm có mở không, chèn code của mình và câu lệnh vào và gọi
Phần này em không hiểu lắm, thầy hướng dẫn thêm được không?
Nên tách 2 phần code,
- Phần 1 đọc dữ liệu
- Phần 2 , xử lý dữ liệu

Nên cứ bấm chạy phần 1, xong thì mới sang phần 2
Phần đọc dữ liệu ý tưởng cụ thể ra sao vậy bác?
Bài đã được tự động gộp:

Một cách khác bạn tham khảo: Kiểm trả hiện trạng kết nối tới ERP, nếu đóng rồi thì bắt đầu xử lý.
Ý tưởng này quá hay nhưng code này em không biết, bác có thể hướng dẫn sơ cho em được không?
 
Upvote 0
Nhưng code chung chung là thế nào vậy bác, xuất file là code đếm dung lượng liên tục, và khi nào đạt đến mốc quy định của mình thì sheet result bắt đầu chạy code xuất báo cáo phải không ạ?
Nếu vậy nó cũng tương đương với button click mà thầy?

Phần đọc dữ liệu ý tưởng cụ thể ra sao vậy bác?
Ý tưởng này quá hay nhưng code này em không biết, bác có thể hướng dẫn sơ cho em được không?
Ý tưởng của tôi nó tự động theo yêu cầu của bạn là không cần nhấn button
Các ý tưởng khác cũng chỉ là kiểm tra bằng các cách khác nhau, chưa có dữ liệu cũng thoát ra mất, không chạy. Nếu chỉ để kiểm tra thì code của bạn cũng kiểm tra rồi (LRow < 2)

Phần này em không hiểu lắm, thầy hướng dẫn thêm được không?
Nếu file xltm tự động lấy dữ liệu từ ERP, tức là nó có code. Nếu code mở (không bị khoá) thì chèn câu lệnh run codeTui vào cuối code của họ
 
Upvote 0
Nếu file xltm tự động lấy dữ liệu từ ERP, tức là nó có code. Nếu code mở (không bị khoá) thì chèn câu lệnh run codeTui vào cuối code của họ
Dạ để em tìm hiểu thêm có gì em xin hỏi lại thầy. Cái này em đang hơi gà mờ ạ
 
Upvote 0
Mình có file xuất từ hệ thống ERP, sau khi xuất file thì sheet "draft" chạy sql lấy dữ liệu từ hệ thống (khoảng vài giây sau khi file được mở lên mới trả về đủ kết quả - cái này do IT làm và mình không can thiệp được)
Tức là có 2 files phải không bạn?
 
Upvote 0
Tôi đề nghị bỏ code vào sheet_Activate. Trong workbook open thì active sheet draft (chắc đang trắng). Ngó thấy có dữ liệu thì mở result coi
Nếu không thì xem code xltm có mở không, chèn code của mình và câu lệnh vào và gọi

Dữ liệu nó đang ghi xuống sheet nếu nó mới ghi vài dòng, ngó thấy dữ liệu thì xử lý liền coi như bị thiếu dữ liệu rồi bác.
 
Upvote 0
Rút lại giải pháp do cảm thấy lạc đề :wacko:
 
Lần chỉnh sửa cuối:
Upvote 0
file xuất từ hệ thống ERP, sau khi xuất file thì sheet "draft" chạy sql lấy dữ liệu từ hệ thống (khoảng vài giây sau khi file được mở lên mới trả về đủ kết quả - cái này do IT làm và mình không can thiệp được)
Mình chưa hiểu mấy chỗ bôi đậm ở trên:
- Xuất là đi ra ngoài, trong khi tham chiếu gốc bây giờ là file Excel thì phải gọi là lấy (nhập) chứ.
- SQL kia như nào và do IT làm thì phải có file nữa chứ?
 
Upvote 0
Dữ liệu nó đang ghi xuống sheet nếu nó mới ghi vài dòng, ngó thấy dữ liệu thì xử lý liền coi như bị thiếu dữ liệu rồi bác.
Dữ liệu ghi xuống có 2 dạng:
- Ghi từng dòng: Sẽ nhìn thấy vài dòng thật, nhưng đồng thời thấy chớp chớp đang thêm dòng nữa, dòng nữa, ... khi nào ngưng là xong
- Ghi cái đùng nguyên bảng dữ liệu: Thấy dữ liệu là đã ghi xong
 
Upvote 0
Mình chưa hiểu mấy chỗ bôi đậm ở trên:
- Xuất là đi ra ngoài, trong khi tham chiếu gốc bây giờ là file Excel thì phải gọi là lấy (nhập) chứ.
- SQL kia như nào và do IT làm thì phải có file nữa chứ?
Nó có mục xuất file báo cáo này, nó là hình dưới, bác xem xong để em xóa hình nhé
 
Upvote 0
Nhưng code chung chung là thế nào vậy bác, xuất file là code đếm dung lượng liên tục, và khi nào đạt đến mốc quy định của mình thì sheet result bắt đầu chạy code xuất báo cáo phải không ạ?

Nếu vậy nó cũng tương đương với button click mà thầy?

Phần này em không hiểu lắm, thầy hướng dẫn thêm được không?

Phần đọc dữ liệu ý tưởng cụ thể ra sao vậy bác?
Bài đã được tự động gộp:


Ý tưởng này quá hay nhưng code này em không biết, bác có thể hướng dẫn sơ cho em được không?
Tóm lại, giải pháp nhanh và chính xác nhất, là đưa code VBA của bạn cho IT xử lý tiếp nối vào phần đọc dữ liệu draft - là xong. Hoặc trao đổi với IT bên bạn , người ta cho giải pháp nối code theo.
Còn đưa lên đây hỏi kiểu đoán voi thế này , mọi người cũng chỉ đoán và tư vấn thôi
 
Upvote 0
Web KT

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

Back
Top Bottom