Code để tự động cập nhật dữ liệu từ 1 file khác

Liên hệ QC

khoahoc78

Thành viên chính thức
Tham gia
27/9/10
Bài viết
55
Được thích
1
Xin diễn đàn chỉ giúp
- Mình có 2 file :
+ File 1 (Data) chứa dữ liệu được cập nhật thường xuyên
+ File 2 (Tonghop) được trích dữ liệu từ file 1
- Mình vô hiệu bảng thông báo Update, Don't Update và Hepl bằng cách vào Edit/Links/Startup Prompt/chọn don't display the alert and don't update automatic links.
- Nhưng khi cập nhập dữ liệu vào file 1 thì khi mở file 2 lên không xuất hiện dữ liệu được cập nhập vào và phải vào lại Edit/Links/ chọn update values thì dữ liệu mới được cập nhập vào.
- Mình muốn file 2 này tự động nhận dữ liệu mà không cân thao tác rườm rà như vậy. Mong được giúp đỡ. Chọn tùy chọn thế nào hay có code tự chạy trong workbook hoặc cho 1 nút lệnh
Xin cảm ơn!
 
Xin diễn đàn chỉ giúp
- Mình có 2 file :
+ File 1 (Data) chứa dữ liệu được cập nhật thường xuyên
+ File 2 (Tonghop) được trích dữ liệu từ file 1
- Mình vô hiệu bảng thông báo Update, Don't Update và Hepl bằng cách vào Edit/Links/Startup Prompt/chọn don't display the alert and don't update automatic links.
- Nhưng khi cập nhập dữ liệu vào file 1 thì khi mở file 2 lên không xuất hiện dữ liệu được cập nhập vào và phải vào lại Edit/Links/ chọn update values thì dữ liệu mới được cập nhập vào.
- Mình muốn file 2 này tự động nhận dữ liệu mà không cân thao tác rườm rà như vậy. Mong được giúp đỡ. Chọn tùy chọn thế nào hay có code tự chạy trong workbook hoặc cho 1 nút lệnh
Xin cảm ơn!
Nếu đúng như yêu cầu của bạn thì thử sử dụng code này cho file Tonghop nhé:
PHP:
Private Sub Workbook_Open()
    Application.DisplayAlerts = False
    Workbooks.Open ThisWorkbook.Path & "\Data.xls"
    ActiveWorkbook.ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.[A1]
    ActiveWorkbook.Close False
    Application.DisplayAlerts = True
End Sub
Bạn tùy biến cho phù hợp với thực tế của bạn. VD: Nguồn ActiveSheet.Cells có thể là Sheets("Sheet1").[B2:D10], đích ActiveSheet.[A1] có thể là Sheets("Sheet1").[B2]
 

File đính kèm

  • Update_Data.rar
    9.3 KB · Đọc: 603
Cảm ơn bạn nếu mình có nhiều file cùng cập nhập đến file tổng hợp thì sao. Các file con này cùng nằm trong 1 thư mục, còn file tổng hợp nằm ngoài thư mục này. Dữ liệu thì được cập nhập theo công thức. chỉ dẫn giùm nhé
 
Cảm ơn bạn nếu mình có nhiều file cùng cập nhập đến file tổng hợp thì sao. Các file con này cùng nằm trong 1 thư mục, còn file tổng hợp nằm ngoài thư mục này. Dữ liệu thì được cập nhập theo công thức. chỉ dẫn giùm nhé
Có phải bạn đang nói đến bài toán tổng hợp theo nhóm và theo quý mà bạn đã có lần hỏi trên GPE?
Nếu đúng thì chúng ta có thể xử lý như sau: Đây là code cho các file TH1.xls, TH2.xls, TH3.xls, TH4.xls:
PHP:
Private Sub Workbook_Open()
    Dim i As Byte, j As Byte
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For j = 1 To 4
            Sheets(j).[C3:E12].ClearContents
    Next j
    For i = 1 To 8
        Workbooks.Open ThisWorkbook.Path & "\Nguoi " & i & ".xls"
        For j = 1 To 4
            ActiveWorkbook.Sheets(j).[C3:E12].Copy
            ThisWorkbook.Sheets(j).[C3:E12].PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
        Next j
        ActiveWorkbook.Close False
    Next i
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Mình viết code này cho trường hợp file TH1.xls nằm trong thư mục Nhom1, nếu file này nằm ngoài thì bạn thay câu lệnh
PHP:
Workbooks.Open ThisWorkbook.Path & "\Nguoi " & i & ".xls"
thành câu lệnh
PHP:
Workbooks.Open ThisWorkbook.Path & "Nhom1\Nguoi " & i & ".xls"
Lưu ý: Với cách xử lý này, cấu trúc các file con phải hoàn toàn giống với file tổng hợp, kể cả thứ tự sheet và thứ tự tên hàng trong mỗi sheet.
 

File đính kèm

  • Nhom1.rar
    42.7 KB · Đọc: 404
Cảm ơn bạn đã giúp mình nhưng ý mình không phải như thế. Mình muốn ở đây là Vô hiệu hóa cái bảng Update, UnUpdate, Hepl bằng cách vào menu Edit/Links/Startup Prompt/chọn don't display the alert and don't update automatic links. Khi đó cái bảng đó mất đi. Nhưng khi cập nhập xong dữ liệu thì ở file tổng hợp nó cứ trơ ra. Khi nào vào Edit/Links/ chọn Update Values thì nó mới nhận. Mình muốn có code tự động cho file này. Khỏi phải làm như trên. Chứ dữ liệu đã có công thức chuyển qua rồi. Bạn xem trong file tổng hợp thì rõ. Xin cảm ơn bạn nhiều. Chúc khỏe
 
Cảm ơn bạn đã giúp mình nhưng ý mình không phải như thế. Mình muốn ở đây là Vô hiệu hóa cái bảng Update, UnUpdate, Hepl bằng cách vào menu Edit/Links/Startup Prompt/chọn don't display the alert and don't update automatic links. Khi đó cái bảng đó mất đi. Nhưng khi cập nhập xong dữ liệu thì ở file tổng hợp nó cứ trơ ra. Khi nào vào Edit/Links/ chọn Update Values thì nó mới nhận. Mình muốn có code tự động cho file này. Khỏi phải làm như trên. Chứ dữ liệu đã có công thức chuyển qua rồi. Bạn xem trong file tổng hợp thì rõ. Xin cảm ơn bạn nhiều. Chúc khỏe
Mình hiểu ý bạn. Nhưng bạn nhìn những chữ màu đỏ ở trên sẽ thấy: Nếu bạn chọn như vậy thì dữ liệu đương nhiên sẽ không tự động cập nhật. Chính vì vậy, mình mới đề xuất cách thức mỗi lần mở file tổng hợp, dữ liệu được cập nhật (chỉ là giá trị, không chứa công thức). Thực hiện như vậy có 2 ưu điểm:
- Trong file tổng hợp chỉ chứa giá trị mà không có công thức, do đó kích thước sẽ giảm đi.
- Trong file tổng hợp không có công thức liên kết đến các file khác nên sẽ không xuất hiện hộp thoại hỏi ta có cập nhật dữ liệu hay không --> Đỡ khó chịu mỗi khi mở file.
Mình cũng đã thử sử dụng câu lệnh
PHP:
Application.DisplayAlert=False
trong Sub Workbook_Open, và mình cũng đã thử sử dụng phương thức SendKeys trong Sub này để tự động hóa việc nhấn nút Update hay Don't Update nhưng chẳng có tác dụng gì cả, hộp thoại vẫn hiện ra như thường, hình như Excel yêu cầu xác nhận việc này trước khi cho phép chạy Sub Workbook_Open.
Với cách xử lý của mình, mình cũng nhận thấy 1 nhược điểm, đó là khi số lượng hoặc kích thước các file con lớn thì tốc độ xử lý sẽ bị chậm lại. Nghe nói sử dụng lập trình ADO có thể xử lý được vấn đề lấy dữ liệu từ file đang đóng mà không phải mở file này ra, nhưng mà món này thì mình hoàn toàn mù tịt...
 
Cảm ơn bạn đã trả lời vướng mắc này của mình. Thật tình thì các file của mình kích cở cũng quá lớn vì mình chưa thạo về VBA, nên toàn công thức. Mỗi file có đến 8M, có khoảng 30 file như thế nên khi mở cái biển báo đó thấy chán quá. Chúc bạn khỏe.
 
Ơ rê ka... Mình mới tìm ra một cách cực kỳ đơn giản và phù hợp với trường hợp của bạn:
- Đầu tiên, bạn cứ chọn Don't display the alert and don't update automatic links như bạn đã chọn để không hiện ra hộp thoại "quái quỷ" kia nữa.
- Sau đó, trong file TH1, bạn sử dụng code sau:
PHP:
Private Sub Workbook_Open()
    Application.SendKeys "%Ek%U%l"
End Sub
Mục đích của sub này là mỗi khi mở file TH1 ra sẽ chạy lệnh Edit\Links\Update Values, sau đó đóng hộp thoại này lại.
Bạn thử xem trong file đính kèm nhé.
 

File đính kèm

  • Nhom1.rar
    11.7 KB · Đọc: 250
bạn[h=2]nghiaphuc[/h] ơi bạn có thẻ cho minh xin code cập nhật như trên không với điều kiện là file tổng hợp không cần quan tâm tới file thành phần với lại file tong hơp có nút lệnh tổng hợp được không?
Cảm ơn bạn nhiều
 
bạnnghiaphuc

ơi bạn có thẻ cho minh xin code cập nhật như trên không với điều kiện là file tổng hợp không cần quan tâm tới file thành phần với lại file tong hơp có nút lệnh tổng hợp được không?
Cảm ơn bạn nhiều
Bạn phải đưa một vài file mẫu (file con, file tổng hợp) lên thì mới biết cấu trúc của file này ra sao, cần tổng hợp những gì từ file con?...
Nói chung là bạn hãy đưa file lên và nêu rõ yêu cầu trong đó, mình tin là sẽ có câu trả lời cho bạn.
Thân!
 
Bạn giúp mình với cam ơn bạn trước nhé.
File tong hop sẽ cập nhật tất cả các file con mà không hạn chế số lượng file con, không quan tâm đến cách đặt tên file con như thế nào.
Nếu được bạn gửi qua mail của mình nhé
nguyenvanhieuc2bk@gmail.com
một lần nữa xin cảm ơn bạn nhiều
 

File đính kèm

  • Nho giup do.rar
    61.3 KB · Đọc: 32
Nhờ giúp đỡ

đây là file ví dụ của tôi về tổng hợp dữ liệu từ file thành phần vào file tổng hợp mong các anh em GPE giúp đỡ.
 

File đính kèm

  • Nho giup do.rar
    61.3 KB · Đọc: 19
Đây là file ví dự của tôi cầm cập nhật từ file thành phần vào file tổng hợp rất mong các anh en GPE giúp đỡ.
Tôi xin chân thành cảm ơn
 

File đính kèm

  • Nho giup do.rar
    61.3 KB · Đọc: 33
em chào cả nhà! chúc cả nhà cuối tuần zui ze!
Hiện tại, em đang muôn làm 1 file excel mới cho NV mới tự khai thông tin vào và gửi lại cho mình sau đó mình sẽ update file đó sang file của của mình. Nhưng chưa biết làm.
bác nào làm món này rồi chỉ em với! thankss nhiều
 
Nếu đúng như yêu cầu của bạn thì thử sử dụng code này cho file Tonghop nhé:
PHP:
Private Sub Workbook_Open()
    Application.DisplayAlerts = False
    Workbooks.Open ThisWorkbook.Path & "\Data.xls"
    ActiveWorkbook.ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.[A1]
    ActiveWorkbook.Close False
    Application.DisplayAlerts = True
End Sub
Bạn tùy biến cho phù hợp với thực tế của bạn. VD: Nguồn ActiveSheet.Cells có thể là Sheets("Sheet1").[B2:D10], đích ActiveSheet.[A1] có thể là Sheets("Sheet1").[B2]


Nếu chỉ lấy giá trị thôi, không mang theo các hàm thì làm sao? xin tư vấn giúp!
 
Ơ rê ka... Mình mới tìm ra một cách cực kỳ đơn giản và phù hợp với trường hợp của bạn:
- Đầu tiên, bạn cứ chọn Don't display the alert and don't update automatic links như bạn đã chọn để không hiện ra hộp thoại "quái quỷ" kia nữa.
- Sau đó, trong file TH1, bạn sử dụng code sau:
PHP:
Private Sub Workbook_Open()
    Application.SendKeys "%Ek%U%l"
End Sub
Mục đích của sub này là mỗi khi mở file TH1 ra sẽ chạy lệnh Edit\Links\Update Values, sau đó đóng hộp thoại này lại.
Bạn thử xem trong file đính kèm nhé.

Chào bác,
Em tìm ra bài viết này của bác, có liên quan đến cái Báo Cáo Nhóm của em.
Em muốn có 1 file tổng hợp tự động cập nhật dữ liệu từ các file con, giống như trong file đính kèm ạ.
Phiền bác làm giúp em với ạ :)
Cảm ơn bác!
 

File đính kèm

  • Báo cáo nhóm.rar
    117.4 KB · Đọc: 39
Có phải bạn đang nói đến bài toán tổng hợp theo nhóm và theo quý mà bạn đã có lần hỏi trên GPE?
Nếu đúng thì chúng ta có thể xử lý như sau: Đây là code cho các file TH1.xls, TH2.xls, TH3.xls, TH4.xls:
PHP:
Private Sub Workbook_Open()
    Dim i As Byte, j As Byte
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For j = 1 To 4
            Sheets(j).[C3:E12].ClearContents
    Next j
    For i = 1 To 8
        Workbooks.Open ThisWorkbook.Path & "\Nguoi " & i & ".xls"
        For j = 1 To 4
            ActiveWorkbook.Sheets(j).[C3:E12].Copy
            ThisWorkbook.Sheets(j).[C3:E12].PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
        Next j
        ActiveWorkbook.Close False
    Next i
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Mình viết code này cho trường hợp file TH1.xls nằm trong thư mục Nhom1, nếu file này nằm ngoài thì bạn thay câu lệnh
PHP:
Workbooks.Open ThisWorkbook.Path & "\Nguoi " & i & ".xls"
thành câu lệnh
PHP:
Workbooks.Open ThisWorkbook.Path & "Nhom1\Nguoi " & i & ".xls"
Lưu ý: Với cách xử lý này, cấu trúc các file con phải hoàn toàn giống với file tổng hợp, kể cả thứ tự sheet và thứ tự tên hàng trong mỗi sheet.
Chào anh! em dùng code của a trong 1 foder thì ok! nhưng khi file TH1 ở foder khác thì phát sinh lỗi ! a có sửa giúp e với! thay đổi theo code a đặt thêm Nhom1/data.xls rui nhưng không được! lỗi name gì đó
 

File đính kèm

  • Nhom1.rar
    42.9 KB · Đọc: 25
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom