EDIT:
Я отладил и обнаружил, что, хотя я вижу все таблицы запросов перед собой в ссылочных листах, Excel сосчитал и нашел 0 таблиц запросов в любых листах.
РЕДАКТИРОВАТЬ 2:
Итак, я обнаружил, что QueryTables
существует под ListObjects
. Итак, сейчас я пытаюсь создать новое соединение с источником данных следующим образом:
tw.Worksheets(2).ListObjects(1).QueryTable.Connection = "OLEDB;" & M1
tw.Worksheets(5).ListObjects(1).QueryTable.Connection = "OLEDB;" & M1
tw.Worksheets(3).ListObjects(1).QueryTable.Connection = "OLEDB;" & M2
tw.Worksheets(6).ListObjects(1).QueryTable.Connection = "OLEDB;" & M2
tw.Worksheets(4).ListObjects(1).QueryTable.Connection = "OLEDB;" & M3
tw.Worksheets(7).ListObjects(1).QueryTable.Connection = "OLEDB;" & M3
ОРИГИНАЛЬНЫЙ ПОЧТА
Я хочу использовать VBA для дальнейшей автоматизации процесса отчетности. Первым шагом является обновление всех данных на основе данных за квартал и год, введенных на странице сводки.
Вот как это выглядит в данный момент
Моя цель - сделать 3 вещи и иметь возможность обновлять данные.
- Изменить квартал
- Отчет об изменении года
- Нажмите кнопку Обновить все
Ниже приведен мой код, который я пытаюсь использовать для этого. У меня есть Excel 16, и я пытаюсь обновить Macro Workbook с помощью соединений Excel. Где я сталкиваюсь с проблемой «Подпись вне диапазона»:
tw.Worksheets(2).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M1
Public Sub Refresh_All()
Dim tw As ThisWorkbook: Set tw = ThisWorkbook
Dim qd As Worksheet: Set qd = tw.Worksheets("Quarterly Data")
Dim yr As String: yr = qd.Range("H11").Value2
Dim qrtr As String: qrtr = qd.Range("G11").Value2
Dim fpath As String: fpath = "X:\Dump Report for Loans\" & yr
Dim ldr As String: ldr = "\Loan Dump Report (000.Original).xlsx"
Dim M1 As String
Dim M2 As String
Dim M3 As String
If qrtr = "Q1" Then
M1 = fpath & "\02-01-" & yr & ldr
M2 = fpath & "\03-01-" & yr & ldr
M3 = fpath & "\04-01-" & yr & ldr
tw.Worksheets(2).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M1
tw.Worksheets(2).QueryTables(1).Refresh
tw.Worksheets(3).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M2
tw.Worksheets(3).QueryTables(1).Refresh
tw.Worksheets(4).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M3
tw.Worksheets(4).QueryTables(1).Refresh
ElseIf qrtr = "Q2" Then
M1 = fpath & "\05-01-" & yr & ldr
M2 = fpath & "\06-01-" & yr & ldr
M3 = fpath & "\07-01-" & yr & ldr
tw.Worksheets(2).QueryTables(1).Item Connection:=M1
tw.Worksheets(2).QueryTables(1).Refresh
tw.Worksheets(3).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M2
tw.Worksheets(3).QueryTables(1).Refresh
tw.Worksheets(4).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M3
tw.Worksheets(4).QueryTables(1).Refresh
ElseIf qrtr = "Q3" Then
M1 = fpath & "\08-01-" & yr & ldr
M2 = fpath & "\09-01-" & yr & ldr
M3 = fpath & "\010-01-" & yr & ldr
tw.Worksheets(2).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M1
tw.Worksheets(2).QueryTables(1).Refresh
tw.Worksheets(3).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M2
tw.Worksheets(3).QueryTables(1).Refresh
tw.Worksheets(4).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M3
tw.Worksheets(4).QueryTables(1).Refresh
ElseIf qrtr = "Q4" Then
M1 = fpath & "\11-01-" & yr & ldr
M2 = fpath & "\12-01-" & yr & ldr
M3 = fpath & "\01-01-" & yr + 1 & ldr
tw.Worksheets(2).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M1
tw.Worksheets(2).QueryTables(1).Refresh
tw.Worksheets(3).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M2
tw.Worksheets(3).QueryTables(1).Refresh
tw.Worksheets(4).QueryTables(1).Item Connection:="EXCEL.Worksheets;" & M3
tw.Worksheets(4).QueryTables(1).Refresh
Else:
MsgBox "ERROR!! NO QUARTER ENTERED!!"
End If
ThisWorkbook.RefreshAll
End Sub
Заранее спасибо за помощь!