2014-12-02 2 views
1

Я хотел бы создать новые рабочие листы, назовите новые листы, добавить столбцы в рабочие листы и затем составить таблицу в каждой новой таблице, все в книге, которая имеет один лист для начала , Мой код не работает, но чтобы увидеть, где я с этим до сих пор:Создайте новый лист и создайте таблицу в пределах

Sub Create_Sheets() 

Sheets.Add.Name = "VA_NAME" 
Sheets.Add.Name = "VA_VALUE" 
Sheets.Add.Name = "CE_NAME" 
Sheets.Add.Name = "CE_VALUE" 

Dim Table As ListObject 
Set Table = Sheet1.ListObjects("VA_NAME") 

Table.ListColumns.Add 1 
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR" 
Table.ListColumns.Add 2 
Table.HeaderRowRange(2) = "L1_PARCEL_NBR" 
Table.ListColumns.Add 3 
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME" 
Table.ListColumns.Add 4 
Table.HeaderRowRange(4) = "L1_ATTR_NAME" 
Table.ListColumns.Add 5 
Table.HeaderRowRange(5) = "L1_ATTR_VALUE" 

Set Table = Sheet1.ListObjects("VA_VALUE") 
Table.ListColumns.Add 1 
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR" 
Table.ListColumns.Add 2 
Table.HeaderRowRange(2) = "L1_PARCEL_NBR" 
Table.ListColumns.Add 3 
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME" 
Table.ListColumns.Add 4 
Table.HeaderRowRange(4) = "L1_ATTR_NAME" 
Table.ListColumns.Add 5 
Table.HeaderRowRange(5) = "L1_ATTR_VALUE" 

Set Table = Sheet1.ListObjects("CE_NAME") 
Table.ListColumns.Add 1 
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR" 
Table.ListColumns.Add 2 
Table.HeaderRowRange(2) = "L1_PARCEL_NBR" 
Table.ListColumns.Add 3 
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME" 
Table.ListColumns.Add 4 
Table.HeaderRowRange(4) = "L1_ATTR_NAME" 
Table.ListColumns.Add 5 
Table.HeaderRowRange(5) = "L1_ATTR_VALUE" 

Set Table = Sheet1.ListObjects("CE_VALUE") 
Table.ListColumns.Add 1 
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR" 
Table.ListColumns.Add 2 
Table.HeaderRowRange(2) = "L1_PARCEL_NBR" 
Table.ListColumns.Add 3 
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME" 
Table.ListColumns.Add 4 
Table.HeaderRowRange(4) = "L1_ATTR_NAME" 
Table.ListColumns.Add 5 
Table.HeaderRowRange(5) = "L1_ATTR_VALUE" 

Columns.AutoFit 

Я предпочел бы, что код распознает имя листа (то есть, «VA_NAME»), а не на «Лист2, Лист3» и так далее. Я знаю, что «Set Table = Sheet1.ListObjects (« VA_NAME »)» - это, скорее всего, моя проблема, так как это зависит от соглашения «Sheet (X)», но делает «Таблицы» («VA_NAME»). ListObjects не работает. Есть ли быстрое решение этого, или это то, что я прошу против правил VBA?

Спасибо, все!

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

Sheet2.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "VA_NAME" 
Sheet3.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "VA_VALUE" 
Sheet4.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "CE_NAME" 
Sheet5.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "CE_VALUE" 

Моего порядок операций должен быть Создание именованных Sheets -> Создание именованных столбцов -> Создание таблиц из столбцов.

ответ

0

Хотя я сомневаюсь, что это самый интуитивный способ идти о создании именованных листов с именами таблиц и столбцов, это то, что я сделал (я все еще очень открыт для предложений):

Sub Create_Sheets() 

Sheets.Add.Name = "VA_NAME" 
Sheets.Add.Name = "VA_VALUE" 
Sheets.Add.Name = "CE_NAME" 
Sheets.Add.Name = "CE_VALUE" 

End Sub

Sub Create_PARCEL_ATTR_Tables()

Sheets("VA_NAME").Select 
Sheet2.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "VA_NAME" 
Sheets("VA_VALUE").Select 
Sheet3.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "VA_VALUE" 
Sheets("CE_NAME").Select 
Sheet4.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "CE_NAME" 
Sheets("CE_VALUE").Select 
Sheet5.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "CE_VALUE" 

End Sub

Sub Create_PARCEL_ATTR_COLUMNS()

Sheets("VA_NAME").Range("A1").Value = "SOURCE_SEQ_NBR" 
Sheets("VA_NAME").Range("B1").Value = "L1_PARCEL_NBR" 
Sheets("VA_NAME").Range("C1").Value = "L1_ATTRIB_TEMP_NAME" 
Sheets("VA_NAME").Range("D1").Value = "L1_ATTRIB_NAME" 
Sheets("VA_NAME").Range("E1").Value = "L1_ATTRIB_VALUE" 
Sheets("VA_NAME").Columns.AutoFit 

Sheets("VA_VALUE").Range("A1").Value = "SOURCE_SEQ_NBR" 
Sheets("VA_VALUE").Range("B1").Value = "L1_PARCEL_NBR" 
Sheets("VA_VALUE").Range("C1").Value = "L1_ATTRIB_TEMP_NAME" 
Sheets("VA_VALUE").Range("D1").Value = "L1_ATTRIB_NAME" 
Sheets("VA_VALUE").Range("E1").Value = "L1_ATTRIB_VALUE" 
Sheets("VA_VALUE").Columns.AutoFit 

Sheets("CE_NAME").Range("A1").Value = "SOURCE_SEQ_NBR" 
Sheets("CE_NAME").Range("B1").Value = "L1_PARCEL_NBR" 
Sheets("CE_NAME").Range("C1").Value = "L1_ATTRIB_TEMP_NAME" 
Sheets("CE_NAME").Range("D1").Value = "L1_ATTRIB_NAME" 
Sheets("CE_NAME").Range("E1").Value = "L1_ATTRIB_VALUE" 
Sheets("CE_NAME").Columns.AutoFit 

Sheets("CE_VALUE").Range("A1").Value = "SOURCE_SEQ_NBR" 
Sheets("CE_VALUE").Range("B1").Value = "L1_PARCEL_NBR" 
Sheets("CE_VALUE").Range("C1").Value = "L1_ATTRIB_TEMP_NAME" 
Sheets("CE_VALUE").Range("D1").Value = "L1_ATTRIB_NAME" 
Sheets("CE_VALUE").Range("E1").Value = "L1_ATTRIB_VALUE" 
Sheets("CE_VALUE").Columns.AutoFit 

Спасибо, все!

0

Если вы указали выше, это сократит его и сделает его менее громоздким.

Sub Create_PARCEL_Stuff() 

Sheets.Add.Name = "VA_NAME" 
Sheets.Add.Name = "VA_VALUE" 
Sheets.Add.Name = "CE_NAME" 
Sheets.Add.Name = "CE_VALUE" 
    Dim ws As Worksheet 
    For Each ws In ActiveWorkbook.Worksheets 
     If ws.Name = "NAME OF YOUR SHEET WITH DATA" Then 
      'Do Nothing 
     Else 
      ws.ListObjects.Add(xlSrcRange, Sheets("Name of source sheet").Range("$A$1:$E$1"), , xlNo).Name = ws.Name 
      ws.Range("A1").Value = "SOURCE_SEQ_NBR" 
      ws.Range("B1").Value = "L1_PARCEL_NBR" 
      ws.Range("C1").Value = "L1_ATTRIB_TEMP_NAME" 
      ws.Range("D1").Value = "L1_ATTRIB_NAME" 
      ws.Range("E1").Value = "L1_ATTRIB_VALUE" 
      ws.Columns.AutoFit 
     End If 
    Next ws 
End Sub 
+0

Благодарим за предложение! Ваш заданный код создает столбцы и таблицу для «CE_VALUE», но не идет дальше, ссылаясь на «Диапазон рабочих таблиц для данных таблицы должен быть на том же листе, что и создаваемая таблица». Это потому, что активный рабочий лист не изменяется в коде? – MattCoats

+0

Исправлен код. См. Мое редактирование. Не забудьте принять ответ, если он работает. – Chrismas007

+0

Это делает меньше, чем до последнего исправления. Когда я пробую это на чистом листе и заменим «НАЗВАНИЕ ВАШЕГО ЛИСТА С ДАННЫМИ» и «Имя исходного листа», он все равно останавливается после «CE_VALUE». Я должен был заметить, что содержание существующего листа не имеет к этому никакого отношения, и единственное значение, которое имеет этот лист, - это использование имени Sheet1. – MattCoats

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