Сообщение от Jimmyyong
В этой теме задан вопрос относительно поиска таблиц
Сугубо личное мнение, но постановка вопроса, на мой взгляд, абсурдна. Отсюда и вопросы к вам.
Если вы ищете на бескрайних просторах книги Excel «то, не знаю, что», тогда становится непонятно: зачем это делать макросом? Ведь в этом случае, вам, в любом случае, придется залезать на лист книги и находить эти таблицы самому, чтобы понять что с ними делать.
Если вы знаете, что вы ищете, то есть знаете: что представляет из себя эта таблица, какие у нее столбцы и сколько их, тогда непонятно: зачем искать границы — естественней и проще вести поиск по заголовкам, либо по известной вам информации, то есть отталкиваться от содержания каждой таблицы.
Если таблицы разбросаны по листу книги, и вам не хочется работать полосой прокрутки, то естественней найти пустые столбцы и строки и удалить их, чтобы собрать информацию в одной компактной зоне.
Возможно, есть какие-то другие нюансы в вашем случае, но при любом раскладе, скорее всего, найдутся и другие, более простые способы поиска, чем отслеживание очерченных границ. Поэтому у вас и пытаются выяснить эти нюансы.
Sub Поиск_и_вставка()
Dim tbl As Table
‘1. Цикл по всем таблицам в файле в поисках нужной таблицы.
For Each tbl In ActiveDocument.Tables
‘ Если начало таблицы находится на странице 3, то выход из цикла, при этом таблице,
‘ которая находится на странице 3, будет присвоено vba-имя «tbl».
If ActiveDocument.Range(Start:=tbl.Range.Start, End:=tbl.Range.Start). _
Information(wdActiveEndPageNumber) = 3 Then
Exit For
End If
Next tbl
‘2. Проверка, была ли найдена нужная таблица.
If tbl Is Nothing Then
MsgBox «На странице 3 нет таблицы.», vbExclamation
Exit Sub
End If
‘3. Вставка в конец таблицы строки.
tbl.Rows.Add
End Sub
A «table» in Excel is indeed known as a ListObject.
The «proper» way to reference a table is by getting its ListObject from its Worksheet i.e. SheetObject.ListObjects(ListObjectName)
.
If you want to reference a table without using the sheet, you can use a hack Application.Range(ListObjectName).ListObject
.
NOTE: This hack relies on the fact that Excel always creates a named range for the table’s DataBodyRange with the same name as the table. However this range name can be changed…though it’s not something you’d want to do since the name will reset if you edit the table name! Also you could get a named range with no associated ListObject.
Given Excel’s not-very-helpful 1004 error message when you get the name wrong, you may want to create a wrapper…
Public Function GetListObject(ByVal ListObjectName As String, Optional ParentWorksheet As Worksheet = Nothing) As Excel.ListObject
On Error Resume Next
If (Not ParentWorksheet Is Nothing) Then
Set GetListObject = ParentWorksheet.ListObjects(ListObjectName)
Else
Set GetListObject = Application.Range(ListObjectName).ListObject
End If
On Error GoTo 0 'Or your error handler
If (Not GetListObject Is Nothing) Then
'Success
ElseIf (Not ParentWorksheet Is Nothing) Then
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found on sheet '" & ParentWorksheet.Name & "'!")
Else
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found!")
End If
End Function
Also some good ListObject info here.
lcf2003 Пользователь Сообщений: 2 |
Есть необходимость вставить через VBA в строку «умной» таблицы на которой стоит курсор (выделена) некоторые данные. |
Пытливый Пользователь Сообщений: 4662 |
#2 13.11.2015 14:39:57
Кому решение нужно — тот пример и рисует. |
||
МВТ Пользователь Сообщений: 1198 |
#3 13.11.2015 14:44:56 Как-то так
Пытливый, здорово,не знал про такой способ Изменено: МВТ — 13.11.2015 14:46:39 |
||
lcf2003 Пользователь Сообщений: 2 |
Спасибо, ребят. Все получилось! |
Pelik Пользователь Сообщений: 3 |
Как получить имя — понятно. А как узнать индекс (присвоенный порядковый номер) умной таблицы? |
Ігор Гончаренко Пользователь Сообщений: 13808 |
#6 07.08.2022 12:49:46
а понятно потому, что написали как это сделать? Изменено: Ігор Гончаренко — 07.08.2022 12:51:03 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Pelik Пользователь Сообщений: 3 |
Так мне кажется очень сложно. Мне просто нужно придумать обращение к умной таблице на листе через ее индекс. Искал что-то типа ActiveCell.ListObject.Item, но это не работает. Думал есть какой-то другой выход на этот параметр . Он же где-то зашит, как я понимаю. И обращаться к нему можно, напримерMsgBox ThisWorkbook.Worksheets(1).ListObjects(1).Name. |
Ігор Гончаренко Пользователь Сообщений: 13808 |
#8 08.08.2022 21:22:45
покажите способ проще, буду знать Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
New Пользователь Сообщений: 4649 |
#9 09.08.2022 00:15:00 нормальный способ Игорь предложил, у вас же на листе не миллион умных таблиц
|
||
Jack Famous Пользователь Сообщений: 11027 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#10 09.08.2022 09:04:52
вопрос из зала: нахрена, а, главное — зачем? У вас есть Таблица. Засуньте её в переменную и обращайтесь в любое время. Изменено: Jack Famous — 09.08.2022 09:05:14 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
RAN Пользователь Сообщений: 7135 |
#11 09.08.2022 09:20:32
Поддерживаю всеми лапами и хвостом. С одной таблицей на листе (ActiveSheet.ListObjects(1)) понятно, но остальные? |
||
если активная ячейка в умной таблице Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Pelik Пользователь Сообщений: 3 |
New
Спасибо! То что надо! |
Ігор Гончаренко Пользователь Сообщений: 13808 |
#14 11.08.2022 08:41:54 Pelik, ???
ответ написан в сообщении 2:
четкий короткий ответ на конкретный вопрос, все остальное к заявленной теме имеет мало отношения Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||||
Имена таблиц на листе |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |