GPE Phát hành sách: "Lập trình VBA trong Excel cho người mới bắt đầu - 2014" | "VBA trong Excel - Cải thiện và tăng tốc - 2013"
Trang 1/5 1 2 3 4 5 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 50
  1. #1
    Tham gia ngày
    06 2006
    Nơi Cư Ngụ
    Nha Trang
    Bài gởi
    528
    Cảm ơn
    185
    Được cảm ơn 723 lần trong 288 bài viết

    Liên kết động trong Excel

    Dear all,
    -------
    Mình không biết đặt tên chủ đề như vậy đã thích hợp chưa nhưng vấn đề mình sắp nêu dưới đây thì tin rằng nó sẽ được ứng dụng hữu ích.

    Chúng ta biết đến chức năng Link Manager như một công cụ quản lý các liên kết bên ngoài, từ Workbook hiện hành với 1 hay nhiều Workbook khác. Người dùng Excel thường gặp hộp thoại Edit or Update link nếu Workbook liên kết chưa mở. Dĩ nhiên là bạn có thể tắt chức năng cảnh báo này bằng tuỳ chọn "Don't alert..." trong Startup Prompt. Tuy nhiên bạn vẫn có thể gặp rắc rối nếu như cố gắng cập nhật liên kết từ một Workbook chưa mở, không tồn tại do di chuyển hoặc đổi tên.

    Một ví dụ điển hình khác, bạn có một Workbook bao gồm nhiều Name (Workbook lưu trữ các bảng danh mục chẳng hạn) và bạn muốn tham chiếu đến Name này trong một Book khác. Tất nhiên điều mà bạn mong muốn là khi định nghĩa lại tham chiếu của Name trong Workbook nguồn thì Name trong Book kia cũng thay đổi theo (về bản chất là một).

    "Liên kết động" là công cụ để giải quyết các yêu cầu trên.

    Thật ra chưa có tài liệu nào nói về khái niệm này một cách chính tắc. Từ "động" ở đây bao hàm ý nghĩa là sự tương ứng so với những thay đổi của nguồn dữ liệu được liên kết tới một Workbook bên ngoài. Đây là phương thức liên kết với một Workbook thực sự tồn tại, được lưu trữ tại bất cứ ở đâu, miễn sao khi cần cập nhật liên kết thì Workbook đó phải được mở.

    Nghe có vẻ chẳng có tác dụng gì vì lấy thông tin từ một Workbook đang mở thì có nhất thiết phải liên kết?

    Câu trả lời là "Có"!

    Một ứng dụng rất hữu ích mà mình vẫn đang làm đó là tạo ra mối liên kết giữa Workbook bảng cân đối phát sinh (CDPS) với Workbook sổ nhật ký (SNK). Chúng ta hiểu mối quan hệ giữa 2 Workbook này: SNK được xem là Workbook nguồn (Workbook được liên kết) và CDPS là Workbook liên kết. Vì rất nhiều lý do, sổ nhật ký thường bị di chuyển, đổi tên dẫn đến CDPS không tìm đọc được số liệu từ SNK. Mặt khác SNK là bảng dữ liệu thường xuyên được mở để cập nhật còn CDPS chỉ được mở khi có nhu cầu xem báo cáo. Việc tách biệt giữa số liệu và báo cáo sẽ cải thiện đáng kể tốc độ cập nhật và tính toán trên SNK. Một lý do khác nữa khiến bạn có ý tưởng về "liên kết động" là bạn muốn chỉ cần một CDPS để xem số phát sinh các tài khoản với nhiều kỳ khác nhau, mỗi kỳ được tổ chức trên một Workbook nhật ký, có cấu trúc giống nhau. Nếu bạn cung cấp cho liên kết biết bạn có ý định tham chiếu đến SNK nào thì liên kết đó thực sự có hiệu lực và đáp ứng cho bạn theo tham số kỳ kế toán mà bạn đưa vào.

    Có lẽ chúng ta không mất thời gian để xây dựng khái niệm "Liên kết động" là gì nữa. Hi vọng rằng bạn đã hiểu được nhu cầu về việc liên kết với một Workbook bên ngoài mà nguồn dữ liệu đó không cố định.

    Bây giờ bạn sẽ hỏi: liên kết theo dạng đó như thế nào?

    Nào, hãy định nghĩa một Name để thể hiện rằng chúng ta muốn liên kết đến các SNK của các kỳ: năm 2004, 2005, 2006, 2007... được lưu trữ trong các Workbook: SNK_2004.xls, SNK_2005.xls, SNK_2006.xls, SNK_2007.xls...

    Chúng ta nhận thấy tham số ở đây là các kỳ kế toán và tham số này được truyền vào khi người dùng lựa chọn kỳ kế toán (được thiết kế trên sheet). Giả sử Sheet1!$A$1 của Workbook hiện hành chứa giá trị tham số kỳ kế toán, chúng ta sẽ có một Name:
    SNK:= "SNK_" & Sheet1!$A$1 & ".xls"

    Với Name này, bạn chưa thể tạo ra một bảng CDPS với những con số sống động. Một Name khác sẽ cho phép bạn tham chiếu đến vùng dữ liệu NHATKY_Range trên SNK:

    Như đã đề cập, bạn có thể "mượn" Name của một Workbook này để sử dụng cho một Workbook khác: bảng danh mục khác hàng (KHACHHANG) có thể được sử dụng cho nhiều SNK mà bất cứ một thông tin nào của khách hàng bị thay đổi thì thông tin ở tất cả các SNK được cập nhật theo. Đây là ưu điểm chính giúp bạn quản lý dữ liệu trên Excel tập trung và đồng bộ hơn.

    Kỹ thuật không có gì mới mẻ, bạn dễ dàng tạo ra liên kết giữa CDPS với SNK thông qua sử dụng Name NHATKY_Range đã được định nghĩa trong Workbook nhật ký bằng việc sử dụng kết hợp hàm INDIRECT. Công thức sau sẽ liên kết thông tin từ SNK sang CDPS ở mức Worksheet:

    NHATKY_Range:= INDIRECT(SNK & "!NHATKY_Range" )
    trong đó SNK là Name đã được định nghĩa như ở trên

    Tất nhiên bạn có thể kết hợp để tham chiếu thẳng đến vùng dữ liệu NHATKY_Range trên sổ nhật ký bằng công thức cải tiến trong reference to của name NHATKY_Range trên CDPS như sau:

    NHATKY_Range:=INDIRECT("SNK_" & Sheet1!$A$1 & ".xls!NHATKY_Range")

    Tuy vậy mình khuyến nghị các bạn nên sử dụng name SNK để thuận tiện cho việc bảo trì các tham chiếu có sử dụng SNK sau này!

    Công thức trên được diễn giải như sau: chúng ta cần tham chiếu đến Name SNK trong Workbook SNK_????.xls, trong đó ???? là giá trị được tham chiếu từ Sheet1!$A$1. (???? được thay đổi theo người dùng nhập vào)

    Bây giờ, trên CDPS, bạn có thể kết hợp các hàm có sử dụng Name SNK một cách bình thường.

    Lưu ý rằng, nếu workbook nguồn đóng lại thì công thức có sử dụng Name này sẽ báo lỗi #REF! vì dữ liệu của Name luôn được cập nhật (online). Ngược lại khi bạn mở Workbook liên kết (CDPS) excel không đưa ra hộp thoại cảnh báo về việc không tìm thấy dữ liệu nguồn. Đây có thể là lợi điểm khiến chúng ta yêu thích khi sử dụng liên kết động.

    Kiến thức về liên kết động không có gì mới nhưng khả năng ứng dụng thì rất đa dạng. Hi vọng bài viết này gợi mở cho bạn cách thức quản lý thông tin bằng Excel tốt hơn, nhanh hơn và tối ưu hơn.

    Chúng ta sẽ cùng nhau thảo luận kỹ hơn về khả năng ứng dụng của liên kết động cũng như có điều kiện để chỉ ra những ưu nhược điểm của nó.

    Thân ái
    thay đổi nội dung bởi: Đào Việt Cường, 08-07-07 lúc 08:13 AM Lý do: Diễn giải rõ hơn
    Always careful - Always successful


  2. #2
    Tham gia ngày
    08 2006
    Nơi Cư Ngụ
    TP.HCM
    Bài gởi
    1,866
    Cảm ơn
    2,087
    Được cảm ơn 2,295 lần trong 1,105 bài viết
    Xin chào
    Trong khi chờ anh Cu Tí, mình gởi các bạn một số ví dụ về cách dùng hàm INDIRECT (có cả Lookup và Validation)

    Thân!
    Tập tin đính kèm Tập tin đính kèm


  3. #3
    Tham gia ngày
    05 2007
    Nơi Cư Ngụ
    Hà Nội
    Bài gởi
    214
    Cảm ơn
    52
    Được cảm ơn 158 lần trong 19 bài viết
    các bác xem hộ em cái liên kết động này với, em làm thấy các ô tòn là REF
    Tập tin đính kèm Tập tin đính kèm

  4. Có 5 thành viên cảm ơn connhangheo về bài viết này:


  5. #4
    Tham gia ngày
    08 2006
    Nơi Cư Ngụ
    TP.HCM
    Bài gởi
    1,866
    Cảm ơn
    2,087
    Được cảm ơn 2,295 lần trong 1,105 bài viết
    Trích Nguyên văn bởi connhangheo
    các bác xem hộ em cái liên kết động này với, em làm thấy các ô tòn là REF
    Công thức của bạn: =INDIRECT("book1.xls!sheet2!B7")
    Như vậy là chưa chính xác, bạn thử công thức này xem nhé :
    =INDIRECT("[book1.xls]sheet2!B7")

    TDN

  6. Có 4 thành viên cảm ơn tedaynui về bài viết này:


  7. #5
    Tham gia ngày
    05 2007
    Nơi Cư Ngụ
    Hà Nội
    Bài gởi
    214
    Cảm ơn
    52
    Được cảm ơn 158 lần trong 19 bài viết
    em thử rồi nhưng không được bác ah, các ô vẫn hiện ra là #REF,mong bác xem lại hộ em

  8. #6
    Tham gia ngày
    03 2007
    Nơi Cư Ngụ
    Biên Hòa, Đồng Nai
    Bài gởi
    5,802
    Cảm ơn
    3,447
    Được cảm ơn 6,304 lần trong 2,613 bài viết
    Công thức sẽ đúng với điều kiện bạn mở 2 file cùng 1 lúc

  9. #7
    Tham gia ngày
    08 2006
    Bài gởi
    3,267
    Cảm ơn
    1,733
    Được cảm ơn 3,724 lần trong 1,763 bài viết
    Trích Nguyên văn bởi connhangheo
    em thử rồi nhưng không được bác ah, các ô vẫn hiện ra là #REF,mong bác xem lại hộ em
    Đọc kỹ bạn nhé :
    Trích Nguyên văn bởi Đào Việt Cường
    Lưu ý rằng, nếu workbook nguồn đóng lại thì công thức có sử dụng Name này sẽ báo lỗi #REF! vì dữ liệu của Name luôn được cập nhật (online). Ngược lại khi bạn mở Workbook liên kết (CDPS) excel không đưa ra hộp thoại cảnh báo về việc không tìm thấy dữ liệu nguồn. Đây có thể là lợi điểm khiến chúng ta yêu thích khi sử dụng liên kết động.
    Thân!
    -----------------------------------------------------------------------------------
    Một ngày mới bắt đầu bằng ÁNH MẮT - NỤ CƯỜI !!!!

    -------------------------------------------------------------------------
    TanPhu Investment Co.,ltd
    http://skstanphu.com
    tronghieu@skstanphu.com

  10. #8
    Tham gia ngày
    05 2007
    Nơi Cư Ngụ
    Hà Nội
    Bài gởi
    214
    Cảm ơn
    52
    Được cảm ơn 158 lần trong 19 bài viết
    em mở cả 2 workbook cùng 1 lúc mà
    Bầu trời xanh biếc - Liếc mắt nhìn em - Nụ cười thánh thiện - Ru mãi hồn tôi ...

  11. #9
    Em cũng có tìm hiểu về vấn đề này, nhưng không biết có thể đưa vào VBA không.
    co đoạn code nay các anh cho ý kiến (hơi ẹ <--- Nghiệp dư mà)
    Sub kiemtraDM()
    Dim i As Long
    Dim ketthuc As String
    Application.Goto Reference:="R2C2"
    ketthuc = InputBox("", "", 10)

    'TAOCONGTHUC
    For i = 1 To ketthuc
    ActiveCell.FormulaR1C1 = _
    "RE#RA='D:\[BANG KE VAT LIEU NHAP KHAU.xls]" & Sheet1.Cells(i + 1, 1).Value & "'!$B$1"
    Cells.Replace What:="RE#RA", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Application.Goto Reference:="R[1]C"
    Next

    End Sub
    Em dùng ghi macro để có các anh đừng cươi nhé
    Còn nữa,
    Em thử nghiệm với indirect() thi trường hợp:
    'D:\[Book1.xls]Sheet1'!$A$1
    'D:\[Book2.xls]Sheet1'!$A$1
    'D:\[Book3.xls]Sheet1'!$A$1
    .......
    'D:\[Bookn.xls]Sheet1'!$A$1
    Thì mình làm sao?
    À ma làm sao attach file khi pót bai nhi?
    thay đổi nội dung bởi: LEHOANGANHTUAN, 04-12-07 lúc 05:10 PM

  12. #10

    Question

    Xin chào! minh la thành viên mới của diễn đàn. Mình biết rất ít về Excel, mong các bạn chỉ thêm cho ạ.

    Mình đang có một vướng mắc xin các bạn giải đáp giùm cho:
    Trong 1 file có 3 sheet chi tiết và 1 sheet tổng hợp, mình muốn số liệu từng khoản mục trong 3 sheet chi tiết tự động chạy qua sheet tổng hợp nhung không biết dùng công thức nào để link. Các bạn giúp mình nhé.
    Mình gởi kèm theo file.
    cam on nhiu nhiu

    Emnhattrendoi chú ý: Bài viết phải có dấu, bạn phải sửa lại không sẽ bị xóa!
    Tập tin đính kèm Tập tin đính kèm
    thay đổi nội dung bởi: emnhattrendoi, 10-12-07 lúc 09:43 PM

  13. Có 2 thành viên cảm ơn emnhattrendoi về bài viết này:


Trang 1/5 1 2 3 4 5 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Đề tài tương tự

  1. Lỗi trong "các tập tin đi kèm trong sách Lập trình VBA trong Excel tái bản năm 2012
    Viết bởi siwtom trong chuyên mục Lập Trình với Excel
    Trả lời: 0
    Bài mới gởi: 06-07-12, 05:53 AM
  2. VBA trong Excel 2003 không chạy được trong Excel 2010
    Viết bởi ngthethat trong chuyên mục Lập Trình với Excel
    Trả lời: 1
    Bài mới gởi: 22-06-12, 10:01 PM
  3. Chức năng Calendar không sử dụng được trong excel 2007 và một vài bản excel 2003?
    Viết bởi khacbao72 trong chuyên mục Hỏi đáp về VBA - Macro
    Trả lời: 0
    Bài mới gởi: 02-02-12, 07:09 PM
  4. Hỏi về sự khác nhau giữa Macro, code và hàm trong excel. Excel và VBA
    Viết bởi vdtam_08 trong chuyên mục Lập Trình với Excel
    Trả lời: 4
    Bài mới gởi: 12-07-11, 10:22 PM
  5. File bị hỏng định dạng excel 2003, không save lại được trong excel 2007
    Viết bởi chiphoiloithoi trong chuyên mục Những vấn đề chung
    Trả lời: 0
    Bài mới gởi: 22-04-11, 11:36 AM

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]