Tôi đang phát triển công cụ MS Excel 2013 với VBA liên quan đến việc sử dụng QueryTables. Một sự bất tiện mà tôi đang gặp phải là truy cập hiện có QueryTables trong trang tính Excel. Hiện tại, phương pháp duy nhất tôi có thể tìm thấy để truy cập vào bảng truy vấn là bằng cách lập chỉ mục số nguyên. Tôi đã đưa ra đoạn mã sau để có bằng chứng nhanh về khái niệmExcel VBA tham chiếu đến đối tượng QueryTable theo tên
Sub RefreshDataQuery()
Dim querySheet As Worksheet
Dim interface As Worksheet
Set querySheet = Worksheets("QTable")
Set interface = Worksheets("Interface")
Dim sh As Worksheet
Dim QT As QueryTable
Dim startTime As Double
Dim endTime As Double
Set QT = querySheet.ListObjects.item(1).QueryTable
startTime = Timer
QT.Refresh
endTime = Timer - startTime
interface.Cells(1, 1).Value = "Elapsed time to run query"
interface.Cells(1, 2).Value = endTime
interface.Cells(1, 3).Value = "Seconds"
End Sub
Điều này làm việc nhưng tôi thực sự không muốn làm theo cách này. Công cụ sản phẩm cuối cùng sẽ có tối đa năm QueryTables khác nhau. Những gì tôi muốn là để chỉ một QueryTable theo tên của nó.
Điều gì sẽ là tốt đẹp là nếu tôi có thể dịch các đoạn mã sau
Set QT = querySheet.ListObjects.item(1).QueryTable
Để một cái gì đó dọc theo dòng
Set QT = querySheet.ListObjects.items.QueryTable("My Query Table")
Bất kỳ đề xuất sẽ được nhiều đánh giá cao.
Đặt QT = querySheet.ListObjects.items.QueryTable không biên dịch. Tôi không thấy một mục thích hợp cho ListObjects. Đối với đề nghị thứ hai của bạn, Set QT = Worksheet ("QTable"). QueryTables ("Bảng truy vấn của tôi"), điều này không có tác dụng với tôi vì QTable đã tồn tại từ trước. –
Tôi đã thay đổi thành: 'Set QT = querySheet.ListObjects.items (1) .QueryTable' tương tự như mã của bạn. –
ý của bạn là 'bảng tính đã tồn tại từ trước?' ... rõ ràng là thay đổi tên QT thành cái mà bạn thực sự có. Bạn luôn có thể kiểm tra số lượng QT trong bảng theo cách này: 'Debug.Print Worksheets (" QTable "). QueryTables.Count' và tên của mỗi QT theo cách này:' có. Bạn luôn có thể kiểm tra số lượng QT trong bảng theo cách này: 'Debug.Print Worksheets (" QTable "). QueryTables (1) .Name' cho lần đầu tiên. –