2015-05-12 3 views
1

У меня возникла проблема с Excel VBA.Excel VBA получение и использование Имя таблицы

Я должен выполнить любую легкую задачу: скопировать/вставить переменный диапазон ячеек из «листа2» в тот же диапазон в «sheet1».

500 Строки, как в моем коде, слишком много, но я пробовал это таким образом, чтобы «поймать» переменный аспект.

Сложная часть состоит в том, что диапазон в «sheet1» представляет собой таблицу (которая создается из TFS).

Sub CopyP() 


Sheets("Sheet1").Range("B3:F500").Value = Sheets("Sheet2").Range("B3:F500").Value 

SheetObject.ListObjects (ListObjectName) 
Range("NAME OF TABLE[Iteration Path]").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

End Sub 

код [Итерация Path] является именем столбца моей таблицы, я хочу, чтобы проверить в этом столбце/с этим параметром, если «строка» пуста.

Я знаю, что код далек от того, чтобы быть хорошим или чистым, но таблица дает мне трудное копирование.

С этим кодом у меня возникла еще одна проблема: таблица создается из TFS, нет проблем с копированием в нее, НО имя таблицы является переменной (похоже, что TFS создает имя), поэтому, если я не буду вручную вводить имя в коде, «программа» не может выполнить из-за отсутствия диапазона.

Не удалось найти способ вернуть имя таблицы так или иначе.

Но я думаю, что просто следую неправильному пути в целом, может быть, кто-то может привести меня на правильный путь.

Моя другая идея состоит в том, чтобы перебирать строки в листе 2, чтобы получить столько данных, сколько необходимо, а затем скопировать их с помощью итерации в таблицу. Но я думаю, что у меня была бы такая же проблема с именем таблицы.

Вся информация, которую я нахожу с помощью google, рассказывает о таблицах, где пользователь может «называть» таблицу. В моем случае я не могу, поэтому мне нужно работать с именем, которое использует TFS для моей таблицы.

+0

Публикация с телефона, пожалуйста, игнорируйте опечатки. Если есть только одна таблица, вы можете получить имя, зацикливая объект listobject. У меня нет доступа к excel прямо сейчас, я бы дал вам пример –

+0

К сожалению, мне действительно нужен пример, чтобы понять это. Было бы здорово, если бы вы могли дать мне один в ближайшие несколько дней! Изменить: Да есть только одна таблица. –

ответ

0

В дополнение к моим комментариям ниже вашего вопроса, я просто набрал это в блокноте. Пожалуйста, внесите изменения в соответствии с вашими потребностями.

Это даст вам имена всех таблиц в активной таблице. Если есть несколько таблиц, вы получите несколько имен. (НЕОПРЕДЕЛЕННЫЕ КАК СТОИМОСТЬ ОТ ТЕЛЕФОНА)

Sub sample() 
    Dim objLB As ListObject, TableName As String 

    For Each objLB In ActiveSheet.ListObjects 
     TableName = objLB.Name 
     Exit For 
    Next 

    Range(TableName & "[Iteration Path]").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
End Sub 
+0

ОК, это работает до сих пор, спасибо за это! Но у меня есть последний вопрос. Во время отладки я могу увидеть значение, хранящееся в objLB, но если я попытаюсь использовать objLB в: Range («NAME OF TABLE [Iteration Path]»). SpecialCells (xlCellTypeBlanks) .EntireRow.Delete я все еще получаю ошибку диапазона. Или я неправильно использовал переменную? –

+0

Итак, что еще вы теперь делаете? –

+0

В основном я просто хочу использовать имя таблицы, чтобы удалить каждую пустую строку. Вот что: Range («ИМЯ ТАБЛИЦЫ [Итерационный путь]»). SpecialCells (xlCellTypeBlanks) .EntireRow.Delete, делает. –

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