Đăng ký học Excel và VBA cùng GPE tháng 10 - TPHCM

Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

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

Thảo luận trong 'Những vấn đề chung' bắt đầu bởi khoahoc78, 22 Tháng mười 2010.

  1. khoahoc78

    khoahoc78 Thành viên chính thức

    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!
     
  2. nghiaphuc

    nghiaphuc Hoàng Nghĩa Phúc Staff Member

    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]
     

    Các file đính kèm:

  3. khoahoc78

    khoahoc78 Thành viên chính thức

    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é
     
  4. nghiaphuc

    nghiaphuc Hoàng Nghĩa Phúc Staff Member

    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 ByteAs Byte
        Application
    .ScreenUpdating False
        Application
    .DisplayAlerts False
        
    For 1 To 4
                Sheets
    (j).[C3:E12].ClearContents
        Next j
        
    For 1 To 8
            Workbooks
    .Open ThisWorkbook.Path "\Nguoi " ".xls"
            
    For 1 To 4
                ActiveWorkbook
    .Sheets(j).[C3:E12].Copy
                ThisWorkbook
    .Sheets(j).[C3:E12].PasteSpecial Paste:=xlPasteValuesOperation:=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 " ".xls"
    thành câu lệnh
    PHP:
    Workbooks.Open ThisWorkbook.Path "Nhom1\Nguoi " ".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.
     

    Các file đính kèm:

    • Nhom1.rar
      Kích thước:
      42.7 KB
      Đọc:
      309
    myhau212 thích bài này.
  5. khoahoc78

    khoahoc78 Thành viên chính thức

    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
     
  6. nghiaphuc

    nghiaphuc Hoàng Nghĩa Phúc Staff Member

    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...
     
  7. khoahoc78

    khoahoc78 Thành viên chính thức

    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.
     
  8. nghiaphuc

    nghiaphuc Hoàng Nghĩa Phúc Staff Member

    Ơ 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é.
     

    Các file đính kèm:

    • Nhom1.rar
      Kích thước:
      11.7 KB
      Đọc:
      187
  9. hieubk2010

    hieubk2010 Thành viên mới

    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
     
  10. nghiaphuc

    nghiaphuc Hoàng Nghĩa Phúc Staff Member

    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!
     
  11. hieubk2010

    hieubk2010 Thành viên mới

    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
     

    Các file đính kèm:

  12. hieubk2010

    hieubk2010 Thành viên mới

    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 đỡ.
     

    Các file đính kèm:

  13. hieubk2010

    hieubk2010 Thành viên mới

    Đâ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
     

    Các file đính kèm:

  14. trexanhvn

    trexanhvn Thành viên mới

    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
     
  15. hotiengap

    hotiengap Thành viên mới


    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!
     
  16. mrluong_2010

    mrluong_2010 Thành viên mới

    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!
     

    Các file đính kèm:

Chia sẻ trang này