Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2009, 14:20   #1
Виталий К
 
Регистрация: 18.05.2009
Сообщений: 7
По умолчанию Вопрос по форматированию

Если возможно, посоветуйте, как в VBA из активной ячейки охватить определенный диапазон для форматирования: например, изменяется активная ячейка в столбике В:В (может быть В36, а может В52), необходимо выделить диапазон ячеек из этой активной ячейки до постоянноя ячейки Е10.

Cells(Row, 2).Select так заканчивается макрос и далее нужно выделить необходимый диапазон для форматирования.

И еще вопрос, как лучше ввести данные из буфера в ячейки уже отформатированные (то есть копируются в одном формате, а вставляются уже в другом)
Виталий К вне форума Ответить с цитированием
Старый 21.05.2009, 15:26   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Правой кнопкой на ярлычке листа, выбираем пункт ИСХОДНЫЙ ТЕКСТ.
Так мы попадаем в модуль кода выбранного листа
Туда вставляем такой код:
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 2 And Target.Cells.Count = 1 Then  ' выделена ОДНА ячейка во 2-м столбце
        Range(Target, [e10]).Select ' выделяем нужный диапазон
    End If
End Sub
Вообще, для форматирования ячеек совсем необязательно их выделять.

Цитата:
как лучше ввести данные из буфера в ячейки уже отформатированные (то есть копируются в одном формате, а вставляются уже в другом)
Копируйте как есть, а потом форматируйте:
Код:
Sub test()
    [a3:d35].Copy [e4:h36]    ' копируем из a3:d35  в диапазон  e4:h36
    [e4:h36].Interior.Color = vbGreen ' и сразу форматируем
    [e4:h36].Font.Size = 12 ' без всякого выделения ячеек
End Sub
Или сразу копируйте только значения.
Вариантов множество.

Для получения готового решения прикрепите файл, и объясните, чего Вы пытаетесь добиться.

(добавлено после просмотра файла)
Цитата:
Сообщение от Виталий К Посмотреть сообщение
Пытаюсь автоматизировать создание ком. предложения с сбором информации с разных страниц и приведению к единому виду.
Ваши макросы можно сократить раз в 8-10... Очень много лишнего кода (что естественно, учитывая, что Вы пользовались макрорекордером)
Автоматизировать, конечно, можно.
Но разбираться в файле потребуется долго, поэтому я не возьмусь за это.

Последний раз редактировалось EducatedFool; 21.05.2009 в 17:03.
EducatedFool вне форума Ответить с цитированием
Старый 21.05.2009, 16:51   #3
Виталий К
 
Регистрация: 18.05.2009
Сообщений: 7
По умолчанию

Пытаюсь автоматизировать создание ком. предложения с сбором информации с разных страниц и приведению к единому виду.
Вложения
Тип файла: rar ком пред от 27.02.09.rar (167.7 Кб, 15 просмотров)
Виталий К вне форума Ответить с цитированием
Старый 21.05.2009, 18:09   #4
Виталий К
 
Регистрация: 18.05.2009
Сообщений: 7
По умолчанию

А можете дать какие нибудь советы по улучшению, так как Вы уже знаете смысл доработок.?
Виталий К вне форума Ответить с цитированием
Старый 22.05.2009, 13:07   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Прежде всего, надо избавляться от всех Select-ов.
Они абсолютно не нужны, и только замедляют макрос.

Возьмём, к примеру, код:
Код:
Sheets("Коммерческое предложение").Select
    Range("A25:G100").Select
    Selection.ClearContents
Чтобы очистить диапазон ячеек, совсем необязательно активировать лист, и очищаемый диапазон.

Гораздо быстрее код будет работать в таком варианте:
Код:
Sheets("Коммерческое предложение").Range("A25:G100").ClearContents
И так далее...
Например, вместо 2 строк:
Cells(Row, 3).Select
ActiveCell.FormulaR1C1 = "2. Система кормления:"


вполне достаточно одной:
Cells(Row, 3) = "2. Система кормления:"
EducatedFool вне форума Ответить с цитированием
Старый 26.05.2009, 15:00   #6
Виталий К
 
Регистрация: 18.05.2009
Сообщений: 7
По умолчанию

Большое спасибо за помощь. Сделал корректировки, работает намного быстрее, форматирует заданный диапазон, в общем супер. Напишите пожалуйста еще фрагмент макроса с форматированием вставки текста, пример:
Cells(Row, 3) = "3. Система поения:" (хотелось бы вставить текст в формате Сourier New, жирный, 12 размер)
Cells(Row, 1) = "111"
Sheets("ПОЕНИЕ").Select
Selection.AutoFilter Field:=23, Criteria1:="<>"
Range("AZ2:BF56").Copy
Sheets("Коммерческое предложение").Select
Row = Application.CountA(Range("A:A")) + 4
Cells(Row, 1).PasteSpecial Paste:=xlValues (хотелось бы вставить текст в формате Сourier New, нежирный, 11 размер)
В прикрепленном файле обновленный пример
Вложения
Тип файла: rar ком пред от 27.02.09.rar (174.5 Кб, 15 просмотров)
Виталий К вне форума Ответить с цитированием
Старый 26.05.2009, 16:01   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Форматирование-то недолго сделать.
Только с Вашим подходом к решению задачи придётся часто вносить изменения в макрос.
Возьмём, к примеру, этот кусок кода:
Код:
Sheets("ПОЕНИЕ").AutoFilter Field:=23, Criteria1:="<>"
    Range("AZ2:BF56").Copy
А если на данном листе будет больше строк? Переписывать макрос?

Всё делается намного проще.
Даже не нужны дополнительные столбцы с формулами.

Но, чтобы написать универсальный макрос, надо учитывать множество нюансов.
Если у Вас есть возможность объяснить мне через Skype, как это всё должно работать, то сделаю весь макрос.

Если разговаривать по Скайпу Вы не можете, сделаю только форматирование ячеек (и то чуть попозже - через пару часов, не раньше)
EducatedFool вне форума Ответить с цитированием
Старый 26.05.2009, 18:45   #8
Виталий К
 
Регистрация: 18.05.2009
Сообщений: 7
По умолчанию

Спасибо за участие. Вы правильно заметили, что с изменением кол-ва продукции с таким подходом прийдется переписывать макрос. А смысл такой, что бы сделать ком предложение набирая информацию с разных листов; конечно хорошо, если на листе ничего не выбрано, что бы и в ком предложении ничего не отражалось. В общем автоматическое ком предложение со сбором информации с разных листов с отображением только выбранной продукции.
Виталий К вне форума Ответить с цитированием
Старый 26.05.2009, 18:56   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
с отображением только выбранной продукции.
А как производится выбор?
Чтобы написать макрос, надо знать ответ на этот вопрос (и многие другие сопутствующие вопросы)

Или подробно описывайте на форуме, как всё должно работать, или звоните через Скайп, и объясняйте все нюансы.
Иначе написание макроса может затянуться очень надолго...
EducatedFool вне форума Ответить с цитированием
Старый 27.05.2009, 11:12   #10
Виталий К
 
Регистрация: 18.05.2009
Сообщений: 7
По умолчанию

Выбор производится на листе, то есть выбираеш необходимое оборудование, например поение и ставиш нужное количество вручную и так далее, а затем формируется ком пред.
Виталий К вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь по форматированию max_paine Microsoft Office Excel 1 26.11.2008 11:07
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
есть вопрос мб по условному форматированию Exo Microsoft Office Excel 6 03.04.2008 12:33
Тип даты не поддается форматированию multyaga Microsoft Office Excel 2 22.12.2006 10:54