Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменение размера динамической таблицы макросом. - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение размера динамической таблицы макросом. (Иное/Other)
Изменение размера динамической таблицы макросом.
AwdBor Дата: Четверг, 09.07.2015, 03:50 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Искал в на форуме и вообще в инете, но не нашёл.

Вопрос к профессионалам.

Есть ли в Excel 2013 возможность изменять размер динамической таблицы по вертикали при помощи макроса?
 
Ответить
СообщениеИскал в на форуме и вообще в инете, но не нашёл.

Вопрос к профессионалам.

Есть ли в Excel 2013 возможность изменять размер динамической таблицы по вертикали при помощи макроса?

Автор - AwdBor
Дата добавления - 09.07.2015 в 03:50
_Boroda_ Дата: Четверг, 09.07.2015, 07:43 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вы про это?
[vba]
Код
ActiveSheet.ListObjects("Таблица1").Resize Range("$A$1:$B$4")
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВы про это?
[vba]
Код
ActiveSheet.ListObjects("Таблица1").Resize Range("$A$1:$B$4")
[/vba]

Автор - _Boroda_
Дата добавления - 09.07.2015 в 07:43
AwdBor Дата: Четверг, 09.07.2015, 08:28 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
_Boroda_, про это да не совсем. Чтобы этот вопрос решался рекордером - я бы не спрашивал)

Допустим, таблица содержит 500 строк. И периодически появляется необходимость передвинуть нижнюю границу таблицы, к примеру, в начало.
На строку номер 20. А потом опять вниз передвинуть, на строку 150 и т.д.

В примере на Лист1 таблица, в которой данные зависят от размера таблицы на Лист2.
На Лист1 вверху кнопки.
Щелк мышкой по "5 вниз" - и нижняя граница таблицы на Лист2 на 5 строк вниз опустилась (независимо от того, какого размера была изначально).
Еще раз щёлкнуть - и нижняя граница таблицы уже в итоге на 10 строк ниже стала.
Щёлк мышкой по "1 вверх" - и нижняя граница таблицы на Лист2 поднялась вверх на одну строку и т.д.
Т.е. на фактически для такой задачи нужны четыре макроса.

Если я правильно понимаю, надо объявлять переменные вместо $A$1:$B$4 , а то еще и циклы использовать?

Или проще будет убрать так называемую умную таблицу и колдовать при помощи СМЕЩ, СУММЕСЛИ и т.п.?
К сообщению приложен файл: 8799273.xlsm (13.3 Kb)


Сообщение отредактировал AwdBor - Четверг, 09.07.2015, 08:37
 
Ответить
Сообщение_Boroda_, про это да не совсем. Чтобы этот вопрос решался рекордером - я бы не спрашивал)

Допустим, таблица содержит 500 строк. И периодически появляется необходимость передвинуть нижнюю границу таблицы, к примеру, в начало.
На строку номер 20. А потом опять вниз передвинуть, на строку 150 и т.д.

В примере на Лист1 таблица, в которой данные зависят от размера таблицы на Лист2.
На Лист1 вверху кнопки.
Щелк мышкой по "5 вниз" - и нижняя граница таблицы на Лист2 на 5 строк вниз опустилась (независимо от того, какого размера была изначально).
Еще раз щёлкнуть - и нижняя граница таблицы уже в итоге на 10 строк ниже стала.
Щёлк мышкой по "1 вверх" - и нижняя граница таблицы на Лист2 поднялась вверх на одну строку и т.д.
Т.е. на фактически для такой задачи нужны четыре макроса.

Если я правильно понимаю, надо объявлять переменные вместо $A$1:$B$4 , а то еще и циклы использовать?

Или проще будет убрать так называемую умную таблицу и колдовать при помощи СМЕЩ, СУММЕСЛИ и т.п.?

Автор - AwdBor
Дата добавления - 09.07.2015 в 08:28
ikki Дата: Четверг, 09.07.2015, 08:57 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
появляется необходимость
а зачем? %)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
появляется необходимость
а зачем? %)

Автор - ikki
Дата добавления - 09.07.2015 в 08:57
AwdBor Дата: Четверг, 09.07.2015, 09:21 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
ikki, с какой целью интересуетесь? :)

для лучшего восприятия информации, ага)
а то пока "врукопашную" перейдешь на Лист2, сдвинешь таблицу и вернешься на Лист1 - вся наглядность улетучилась. только лишняя нагрузка на глаза осталась.
 
Ответить
Сообщениеikki, с какой целью интересуетесь? :)

для лучшего восприятия информации, ага)
а то пока "врукопашную" перейдешь на Лист2, сдвинешь таблицу и вернешься на Лист1 - вся наглядность улетучилась. только лишняя нагрузка на глаза осталась.

Автор - AwdBor
Дата добавления - 09.07.2015 в 09:21
_Boroda_ Дата: Четверг, 09.07.2015, 09:29 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Чтобы этот вопрос решался рекордером - я бы не спрашивал)

Дык, откуда ж я знал-то, Вы ж не написали.
ну тогда так
[vba]
Код
Sub Pl_5()
     n_ = 5
     ad0_ = Лист2.ListObjects("Таблица1").Range.Address
     h0_ = Range(ad0_).Rows.Count
     ad1_ = Range(ad0_).Resize(h0_ + n_).Address
     Лист2.ListObjects("Таблица1").Resize Range(ad1_)
End Sub
[/vba]
Правда, я тоже не совсем понимаю тайного смысла всего этого, ну да дело Ваше - спрашиваете, значит, нужно.
К сообщению приложен файл: 8799273_1.xlsm (40.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Чтобы этот вопрос решался рекордером - я бы не спрашивал)

Дык, откуда ж я знал-то, Вы ж не написали.
ну тогда так
[vba]
Код
Sub Pl_5()
     n_ = 5
     ad0_ = Лист2.ListObjects("Таблица1").Range.Address
     h0_ = Range(ad0_).Rows.Count
     ad1_ = Range(ad0_).Resize(h0_ + n_).Address
     Лист2.ListObjects("Таблица1").Resize Range(ad1_)
End Sub
[/vba]
Правда, я тоже не совсем понимаю тайного смысла всего этого, ну да дело Ваше - спрашиваете, значит, нужно.

Автор - _Boroda_
Дата добавления - 09.07.2015 в 09:29
AwdBor Дата: Четверг, 09.07.2015, 09:35 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
_Boroda_,
Дык, откуда ж я знал-то, Вы ж не написали.


Согласен :) Упустил этот момент :)
Спасибо за код. Сейчас посмотрю что у меня получится.

Смысл-то не тайный. Делаю что-то типа программы в екселе. Вот когда доделаю - тогда (если Вам еще будет интересен смысл) и поясню :) Впрочем, если до этого дойдёт - то Вы и сами все увидите))


Сообщение отредактировал AwdBor - Четверг, 09.07.2015, 09:39
 
Ответить
Сообщение_Boroda_,
Дык, откуда ж я знал-то, Вы ж не написали.


Согласен :) Упустил этот момент :)
Спасибо за код. Сейчас посмотрю что у меня получится.

Смысл-то не тайный. Делаю что-то типа программы в екселе. Вот когда доделаю - тогда (если Вам еще будет интересен смысл) и поясню :) Впрочем, если до этого дойдёт - то Вы и сами все увидите))

Автор - AwdBor
Дата добавления - 09.07.2015 в 09:35
AwdBor Дата: Четверг, 09.07.2015, 15:53 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
_Boroda_, Вам почёт и уважение. Все шикарно получилось и всё отлично работает.
К сообщению приложен файл: 0002984.xlsm (19.8 Kb)
 
Ответить
Сообщение_Boroda_, Вам почёт и уважение. Все шикарно получилось и всё отлично работает.

Автор - AwdBor
Дата добавления - 09.07.2015 в 15:53
AwdBor Дата: Суббота, 11.07.2015, 19:21 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
_Boroda_, оказывается, если переименовать лист, то макрос выдаёт ошибку.
Таблицу переименовывать можно. А лист нет.

[vba]
Код
Sub Вниз5()
n_ = 5
[color=red]ad0_ = Сумма.ListObjects("Общее").Range.Address[/color]
h0_ = Range(ad0_).Rows.Count
ad1_ = Range(ad0_).Resize(h0_ + n_).Address
Сумма.ListObjects("Общее").Resize Range(ad1_)
End Sub
[/vba]
[moder]Оформляйте коды кнопкой #[/moder]


Сообщение отредактировал Manyasha - Суббота, 11.07.2015, 19:25
 
Ответить
Сообщение_Boroda_, оказывается, если переименовать лист, то макрос выдаёт ошибку.
Таблицу переименовывать можно. А лист нет.

[vba]
Код
Sub Вниз5()
n_ = 5
[color=red]ad0_ = Сумма.ListObjects("Общее").Range.Address[/color]
h0_ = Range(ad0_).Rows.Count
ad1_ = Range(ad0_).Resize(h0_ + n_).Address
Сумма.ListObjects("Общее").Resize Range(ad1_)
End Sub
[/vba]
[moder]Оформляйте коды кнопкой #[/moder]

Автор - AwdBor
Дата добавления - 11.07.2015 в 19:21
AwdBor Дата: Суббота, 11.07.2015, 19:28 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
[vba]
Код
ad0_ = Сумма.ListObjects("Общее").Range.Address
[/vba]

Вот эту строку подсвечивает, в общем.

А то с [color=red] так ясное дело, что ошибка будет, угу B)
 
Ответить
Сообщение[vba]
Код
ad0_ = Сумма.ListObjects("Общее").Range.Address
[/vba]

Вот эту строку подсвечивает, в общем.

А то с [color=red] так ясное дело, что ошибка будет, угу B)

Автор - AwdBor
Дата добавления - 11.07.2015 в 19:28
RAN Дата: Суббота, 11.07.2015, 19:32 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А вы всерьез полагаете, что
"Лист2" или "Сумма"
это имя листа?
Смею вас разочаровать, это кодовое имя ("CodeName")


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА вы всерьез полагаете, что
"Лист2" или "Сумма"
это имя листа?
Смею вас разочаровать, это кодовое имя ("CodeName")

Автор - RAN
Дата добавления - 11.07.2015 в 19:32
AwdBor Дата: Суббота, 11.07.2015, 19:42 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
RAN, попробуйте переименовать Лист2 в Лист3, например.
Надо копать глубже?
И как задать любое имя листа в таком случае?


Сообщение отредактировал AwdBor - Суббота, 11.07.2015, 19:43
 
Ответить
СообщениеRAN, попробуйте переименовать Лист2 в Лист3, например.
Надо копать глубже?
И как задать любое имя листа в таком случае?

Автор - AwdBor
Дата добавления - 11.07.2015 в 19:42
RAN Дата: Суббота, 11.07.2015, 19:44 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я это сделаю без проблем. :)
Я буду менять не имя, а кодовое имя.

Если привязываться к имени листа
[vba]
Код
Sheets("Лист1")
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 11.07.2015, 19:46
 
Ответить
СообщениеЯ это сделаю без проблем. :)
Я буду менять не имя, а кодовое имя.

Если привязываться к имени листа
[vba]
Код
Sheets("Лист1")
[/vba]

Автор - RAN
Дата добавления - 11.07.2015 в 19:44
AwdBor Дата: Суббота, 11.07.2015, 19:55 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
RAN, так уже и я тогда без проблем так сделаю B)

Же ву ремерси за пояснение - как говорят у нас в селе))
 
Ответить
СообщениеRAN, так уже и я тогда без проблем так сделаю B)

Же ву ремерси за пояснение - как говорят у нас в селе))

Автор - AwdBor
Дата добавления - 11.07.2015 в 19:55
_Boroda_ Дата: Суббота, 11.07.2015, 19:59 | Сообщение № 15
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я буду менять не имя, а кодовое имя.

Я почему так написал
ad0_ = Лист2.ListObjects("Таблица1").Range.Address

- специально, чтобы Вы могли менять имя листа, а макрос все равно бы работал.
Почитайте вот здесь http://www.excelworld.ru/forum/7-4482-46631-16-1366183627


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Я буду менять не имя, а кодовое имя.

Я почему так написал
ad0_ = Лист2.ListObjects("Таблица1").Range.Address

- специально, чтобы Вы могли менять имя листа, а макрос все равно бы работал.
Почитайте вот здесь http://www.excelworld.ru/forum/7-4482-46631-16-1366183627

Автор - _Boroda_
Дата добавления - 11.07.2015 в 19:59
RAN Дата: Суббота, 11.07.2015, 20:09 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А у меня все последние макросы сполош напиханы
[vba]
Код
with shИмячко.ListObjects(1)
[/vba]
Притомился... :(


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 11.07.2015, 20:09
 
Ответить
СообщениеА у меня все последние макросы сполош напиханы
[vba]
Код
with shИмячко.ListObjects(1)
[/vba]
Притомился... :(

Автор - RAN
Дата добавления - 11.07.2015 в 20:09
OIU Дата: Понедельник, 14.03.2016, 19:58 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 48
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код
Public Function Name_list(NameTabl As String) As String
    Dim lst As ListObject ' Переменная как лист-объект
    Dim wsh As Worksheet ' Переменная как рабочий лист
    Dim wshs As Sheets ' Переменная как листы
    Set wshs = ThisWorkbook.Worksheets
    
    For Each wsh In wshs
        For Each lst In wsh.ListObjects
             If lst.Name = NameTabl Then Name_list = wsh.Name: Exit Function
        Next
    Next
End Function
[/vba]
В модуль можно вставить данную функцию и там где потребуется получить имя листа для конкретной таблицы, нужно написать:
[vba]
Код
Set rngTable = Sheets(Name_list("ИмяТаблицы")).ListObjects("ИмяТаблицы")
[/vba]
В итоге - можно менять названия листов и изменять порядок листов не зависимо .


С уважением Евгений Ковель
 
Ответить
Сообщение[vba]
Код
Public Function Name_list(NameTabl As String) As String
    Dim lst As ListObject ' Переменная как лист-объект
    Dim wsh As Worksheet ' Переменная как рабочий лист
    Dim wshs As Sheets ' Переменная как листы
    Set wshs = ThisWorkbook.Worksheets
    
    For Each wsh In wshs
        For Each lst In wsh.ListObjects
             If lst.Name = NameTabl Then Name_list = wsh.Name: Exit Function
        Next
    Next
End Function
[/vba]
В модуль можно вставить данную функцию и там где потребуется получить имя листа для конкретной таблицы, нужно написать:
[vba]
Код
Set rngTable = Sheets(Name_list("ИмяТаблицы")).ListObjects("ИмяТаблицы")
[/vba]
В итоге - можно менять названия листов и изменять порядок листов не зависимо .

Автор - OIU
Дата добавления - 14.03.2016 в 19:58
RAN Дата: Понедельник, 14.03.2016, 20:18 | Сообщение № 18
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Function Name_list(NameTabl As String) As String
    Name_list = Range(NameTabl).Parent.Name
End Function
[/vba]
yes


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Понедельник, 14.03.2016, 20:20
 
Ответить
Сообщение[vba]
Код
Function Name_list(NameTabl As String) As String
    Name_list = Range(NameTabl).Parent.Name
End Function
[/vba]
yes

Автор - RAN
Дата добавления - 14.03.2016 в 20:18
OIU Дата: Понедельник, 14.03.2016, 20:34 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 48
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
Function Name_list(NameTabl As String) As String
    Name_list = Range(NameTabl).Parent.Name
End Function

Ну и чудеса...
"Век живи - век учись!"


С уважением Евгений Ковель
 
Ответить
Сообщение
Function Name_list(NameTabl As String) As String
    Name_list = Range(NameTabl).Parent.Name
End Function

Ну и чудеса...
"Век живи - век учись!"

Автор - OIU
Дата добавления - 14.03.2016 в 20:34
OIU Дата: Четверг, 14.07.2016, 18:00 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 48
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
RAN, данный код просит небольшого дополнения)
[vba]
Код
Function Name_list(NameTabl As String) As String
    ThisWorkbook.Activate
    Name_list = Range(NameTabl).Parent.Name
End Function
[/vba]
Иначе выдаёт ошибку если открыто несколько книг. По крайней мере у меня так было.
Может есть и другой вариант)


С уважением Евгений Ковель
 
Ответить
СообщениеRAN, данный код просит небольшого дополнения)
[vba]
Код
Function Name_list(NameTabl As String) As String
    ThisWorkbook.Activate
    Name_list = Range(NameTabl).Parent.Name
End Function
[/vba]
Иначе выдаёт ошибку если открыто несколько книг. По крайней мере у меня так было.
Может есть и другой вариант)

Автор - OIU
Дата добавления - 14.07.2016 в 18:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение размера динамической таблицы макросом. (Иное/Other)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!