2015-04-21 7 views
1

Я пытаюсь создать процедуру циклирования, которая проходит через несколько листов и преобразует данные в таблицу. Я думаю, что мой код продолжает ломаться, потому что, очевидно, каждый массив может иметь только один экземпляр «Table1». У меня есть пара вопросов:Цитирование через рабочие листы для преобразования диапазона в таблицу

1: Есть ли способ динамически назвать каждую таблицу. Пример: укажите имя таблицы в заголовке рабочего листа?

2: как я могу создать код обработки ошибок, который выходит из подпрограммы, если уже существует существующая таблица. EX. Я уже запустил это в своей существующей книге, но добавил новый лист с необработанными данными и все равно должен преобразовать его в таблицу.

Вот что я до сих пор, все и вся помощь оценена (новый VBA)

Sub newTables() 


' newTables Macro 
' T 
' 
' Keyboard Shortcut: Ctrl+Shift+T 

Dim rngSelectionRange As Range 
Set rngSelectionRange = ActiveSheet.Range(Selection.Address) 

For i = 1 To Worksheets.Count 

    Worksheets(i).Range("A1").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    'where it breaks 
    ActiveSheet.ListObjects.Add(xlSrcRange, rngSelectionRange, , xlYes).Name = "Table1" 
    'Range("Table1[#All]").Select 
    'ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2" 
    'ActiveSheet.ListObjects("Employ").Name = "Employee_Data" 
    If ActiveSheet.ListObjects.Count > 1 Then 
    End If 

Next i 
End Sub 

ответ

0

Как насчет:

ActiveSheet.ListObjects.Add(xlSrcRange, rngSelectionRange, , xlYes).Name = "Table" & i 

Это имя первой таблицы в цикле Table1 , затем Table2 и т. д.

Или, если вы хотите, чтобы имя рабочего листа, замените "Table" & i на: Worksheets(i).Name, хотя perh aps, вы хотите добавить префикс, скажем, «Таблица», чтобы избежать путаницы.

+0

Спасибо! по какой-то причине, хотя после того, как он проходит первый лист, он переходит ко второму и дает «выбор класса диапазона с ошибкой». есть идеи? – chs

+0

Вы только устанавливаете 'rngSelectionRange' для первого листа, но используете его каждый раз, когда вы определяете таблицу (это второй параметр). Я думаю, вы должны использовать только то, что вы выбрали, т. Е.' Выбор'? –

1

Я думаю, что это в основном то, что вы хотите. Вы можете проверить, есть ли в ассортименте ListObject, который удобен здесь:

Sub AddTablesIfNone() 
Dim ws As Excel.Worksheet 

    For Each ws In ActiveWorkbook.Worksheets 
     With ws 
      If .UsedRange.ListObject Is Nothing Then 
       .ListObjects.Add SourceType:=xlSrcRange, Source:=.UsedRange, xllistobjecthasHeaders:=xlYes 
      End If 
     End With 
    Next ws 
    End Sub 
+0

Спасибо! что, похоже, работает очень хорошо, но он не выбирает точно, где находятся данные (он просто падает на случайное число строк. Есть ли способ исправить это? – chs

+0

Там, безусловно, есть. Как бы вы описали пределы своих диапазон данных? –

+0

Моя конечная цель - вставить выделение в новую строку в каждой таблице на каждом листе, для диапазона требуется динамическое выражение: xldown xlright type thing. – chs

Смежные вопросы