2015-12-23 6 views
0

Когда я запускаю эту функциюНевозможно создать таблицу Excel VBA

Call makeTable("Uber Tracker", range(Cells(7, 1), Cells(LastUber, 42))) 
    Call makeTable("Finance Tracker", range(Cells(21, 1), Cells(LastFinance, 23))) 

Первый вызов работает отлично, но вторая показывает ошибка 1004 диапазон рабочего листа должна быть на том же листе, как таблица создается.

Sub makeTable(TableSheet As String, TableRange As range) 
     On Error GoTo errorHandler 
     Sheets(TableSheet).ListObjects.Add(xlSrcRange, TableRange, ,xlYes).name = TableSheet 

    errorHandler: 
     If Err.Number <> 0 Then 
      Debug.Print "Error number :" + CStr(Err.Number) + " reason: " + Err.Description 
     End If 

    End Sub 

Что не так? Я проверил, какой лист он выбирает, и он должен быть правильным, таким же для диапазона.

ответ

2

Ваш TableRange находится на ActiveSheet (где бы это ни было). Вы пытаетесь создать таблицу на листе («Финансовый трекер») с диапазоном, взятым из активной таблицы.

В зависимости от того, что вам действительно нужно, вы можете либо изменить maketable к югу, как это:

ActiveSheet.ListObjects.Add(xlSrcRange, TableRange, ,xlYes).name = TableSheet 

Или изменить вызов, как это:

Call makeTable("Finance Tracker", sheets("Finance Tracker").range(sheet("Finance Tracker").Cells(21, 1), sheet("Finance Tracker").Cells(LastFinance, 23))) 

Просто убедитесь, что все, что происходит на такой же лист.

EDIT:

Еще одна вещь, чтобы попробовать (работает для меня так Aswell):

Worksheets("Uber Tracker").Activate 
Call makeTable("Uber Tracker", Range(Cells(7, 1), Cells(10, 42))) 
Worksheets("Finance Tracker").Activate 
Call makeTable("Finance Tracker", Range(Cells(21, 1), Cells(30, 23))) 

Просто убедитесь, что диапазон, используемый для создания таблицы на одном листе где добавляется таблица. Есть много способов сделать это, это всего лишь несколько примеров.

+0

так что вы хотите сказать, что если я явно связать диапазон с нужным листом, то он должен работать? – user1902692

+0

попробовал ваше решение для активных действий, теперь они оба не работают – user1902692

+0

ммм ... дай мне минуту. в то же время, работает ли другой метод? – vacip

0

Вы также можете просто использовать адрес какой диапазон передается рутина:

Sheets(TableSheet).ListObjects.Add(xlSrcRange, Sheets(TableSheet).Range(TableRange.Address), ,xlYes).name = TableSheet 
Смежные вопросы