Cách cập nhật nhanh bảng được liên kết khi tên tệp bên ngoài bị thay đổi

Chia sẻ ngay bây giờ:

Các bảng được liên kết có thể cực kỳ hữu ích (mặc dù tất nhiên không phải lúc nào cũng vậy) – đặc biệt khi bạn đang xử lý thông tin bên ngoài thường xuyên thay đổi. Một ví dụ điển hình có thể là khi nhà cung cấp cấp cho bạn quyền truy cập vào tệp giá hàng tháng hiện tại của họ. Nhưng điều gì sẽ xảy ra khi họ phát hành tệp vào tháng tới và tên tệp thay đổi từ “Bảng giá-01-01-2016” thành “Bảng giá-01-02-2016”? Điều đầu tiên sẽ xảy ra là liên kết của bạn sẽ bị hỏng, vì vậy bạn sẽ phải cập nhật thủ công. Mỗi lần họ thay đổi tên tập tin. Điều đó cũng đúng với tên bảng (tất nhiên!). Bạn hỏi có cách nào để làm điều này một cách nhanh chóng và dễ dàng không? Chúng tôi rất vui vì bạn đã hỏi – hãy đọc tiếp và tìm hiểu cách…

Dàn cảnh – kịch bản

Trình quản lý bảng được liên kếtTrong bài viết này, tôi sẽ sử dụng một tình huống hư cấu – nhưng tôi chắc chắn rằng bạn sẽ nhanh chóng nhận ra!

Hàng tháng, Acme Trading gửi cho chúng tôi bảng giá cập nhật cho tất cả các vật tư tiêu hao được sử dụng tại DataNumen. Để biết mình sẽ chi bao nhiêu cho văn phòng phẩm mỗi tháng, chúng tôi liên kết tới tệp đó trong cơ sở dữ liệu quản lý văn phòng của mình.

Thay đổi tên tệpVấn đề là, mặc dù định dạng của tệp vẫn giữ nguyên nhưng tên tệp lại thay đổi hàng tháng. Tháng trước nó “đứng yênosts Jan 2017.xls”, tháng này là “c cố địnhosts tháng 2017 năm XNUMX.xls”.

Không có nhiều thay đổi, tôi chắc chắn bạn sẽ đồng ý, nhưng trừ khi chúng tôi gặp rắc rối khi đổi tên tệp theo cách thủ công (sau khi chúng tôi đã di chuyển tệp cũ sang một bên hoặc xóa nó) hoặc thực hiện quá trình liên kết lại bảng thông qua trình quản lý bảng được liên kết trong Access.

Bởi vì chúng tôi không muốn làm điều này nên thay vào đó chúng tôi đã tạo đoạn mã sau để thực hiện điều đó – dễ dàng hơn nhiều vì tôi chắc chắn bạn sẽ thấy:

Public Sub UpdateLink (tableName As String, newFileName As String)
    Dim objDB As Database
    Dim objTableDef As TableDef
    Dim newConnect as String
    
    Set objDB = CurrentDb
    Set objTableDef = objDB.TableDefs(tableName)

    'format of the connection string in our case, for example, is:
    ' Excel 5.0;HDR=YES;IMEX=2;DATABASE=File name including path and extension type
    newConnect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & newFileName
    objTableDef.Connect = newConnect
    objTableDef.RefreshLink

    Set objTableDef = Nothing
    Set objDB = Nothing
End Sub

Giải thích mã

Như bạn có thể thấy, chúng tôi chuyển tên bảng (được liên kết), cùng với tên của tệp mới mà bảng sẽ được liên kết tới. Tên tệp phải bao gồm đường dẫn đầy đủ đến tệp. Một lĩnh vực tiềm năng mà bạn có thể gặp khó khăn ở thời điểm hiện tạitart đang nhận được định dạng chính xác cho chuỗi kết nối để đặt vào biến “newConnect”. Mặc dù có rất nhiều nguồn để tìm ra định dạng chính xác nhưng một trong những cách dễ nhất mà tôi tìm thấy là chỉ cần xem chuỗi kết nối của bảng được liên kết hiện tại. Để làm điều đó, chỉ cần thêm dòng sau ngay bên dưới dòng “Set objTableDef = objDB.TableDefs(tableName)”:

Debug.Print (objTableDef.Connect)

Điều đó sẽ in chuỗi kết nối hiện có ra cửa sổ gỡ lỗi/ngay lập tức của trình chỉnh sửa mã (nếu chuỗi đó chưa hiển thị, hãy nhấn CTRL-G từ trong màn hình trình soạn thảo mã VBA để chuyển đổi chế độ hiển thị của cửa sổ Ngay lập tức trước khi chạy mã.

Một lời cảnh báo

Như thường lệ, đừng quên rằng mặc dù đoạn mã trên có thể giúp bạn tiết kiệm thời gian khi bạn cần thay đổi tệp mà một bảng được liên kết tới, nhưng điều mà nó không thể làm là giúp bạn nếu bạn gặp phải bất kỳ vấn đề nào. Truy cập tập tin bị hư hỏng, vì vậy hãy đảm bảo bạn luôn sao lưu và biết nơi cần chuyển nếu vẫn thất bại.

Giới thiệu tác giả:

Mitchell Pond là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm sửa chữa thiệt hại SQL và các sản phẩm phần mềm phục hồi excel. Để biết thêm thông tin, hãy truy cập www.datanumennăm

Chia sẻ ngay bây giờ:

Được đóng lại.