Всем доброго дня! |
|
Макрос такой у меня получается, но как сделать, чтобы было равно не «$C$3:$H$25», Sub Макрос1() |
|
vlanib Пользователь Сообщений: 26 |
|
{quote}{login=vlanib}{date=03.05.2010 10:01}{thema=}{post}Selection.PrintOut{/post}{/quote} |
|
vlanib Пользователь Сообщений: 26 |
Всё просто. Sub Макрос1() |
{quote}{login=vlanib}{date=03.05.2010 10:06}{thema=}{post}Всё просто. Sub Макрос1() |
|
Ирина Гость |
#7 04.12.2012 01:50:39 1. На листе создала управляющую кнопку, записала макрос (выделила диапазон, нажала кнопку форма). Когда нажимаю на кнопку, запрашивает названия столбцов и не создает форму. Когда проделываю эту операцию без кнопки, все работает? 2. Первая кнопка подает на печать выделенный диапазон. К моему компьютеру не подключен принтер. А как изменить запись макроса, чтобы фрагмент печатался принтером по умолчанию на любом компютере, если это возможно? Прикрепленные файлы
|
Макрос печати выделенной области по заполненной ячейке. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Skip to content
Как в Эксель задать область печати
На чтение 1 мин. Просмотров 2.8k.
Что делает макрос: Этот макрос позволяет автоматически задать область печати.
Содержание
- Как макрос работает
- Код макроса
- Как использовать
Как макрос работает
В этом простом макросе, мы используем свойство PrintArea, чтобы определить диапазон ячеек, которые будут включены при печати. Как вы можете видеть, мы просто используем свойство PrintArea с адресом UsedRange. Свойство UsedRange дает диапазон, который охватывает ячейки, которые были использованы для ввода данных.
Чтобы сохранить эту динамику, мы реализуем код в изменении событии рабочего листа:
Код макроса
Private Sub Worksheet_Change(ByVal Target As Range) ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address End Sub
Как использовать
Для реализации этого макроса, вам нужно скопировать и вставить его в окно кода события Worksheet_Change. Размещение макроса позволяет запускать каждый раз, когда вы дважды щелкаете на листе.
- Активируйте редактор Visual Basic, нажав ALT + F11.
- В окне проекта, найти свой проект / имя рабочей книги и нажмите на знак плюс рядом с ней, чтобы увидеть все листы.
- Нажмите на лист, в котором вы хотите, чтобы вызвать код.
- Выберите Изменить событие из событий в раскрывающемся списке.
- Введите или вставьте код.
SysUnit, спасибо, но к сожалению не подойдет. Мне нужно универсальное решение. Ваш вариант подойдет только как частный случай: крайний левый столбец можно определить по 4 строке, нижнюю строку — по 1 столбцу. Мне нужно
универсальное
решение, которое сработает на
любом листе
с любым раскладом данных и форматов ячеек (заранее неизвестном программисту), такое же надёжное, как UsedRange, или как .SpecialCells(xlCellTypeLastCell), но с иным вложенным в него смыслом.
toiai, ваше решение, если приглядеться и проверить всегда выдает диапазон, совпадающий с UsedRange Ведь .SpecialCells(xlCellTypeLastCell) является правым нижним краем диапазона .UsedRange
Сейчас подумал, можно сформулировать задачу как поиск модификации UsedRange, нечувствительной к форматированию — только на слое данных (формул, включая значения). Я раньше уже решал эту задачу итерационно, но это кажется мне нерациональным и медленным путем. Суть том, чтобы начать с .SpecialCells(xlCellTypeLastCell) брать диапазоны от .Range(.Cells(lr, 1), .Cells(lr, lc)), их свойство .Text сравнивать с «», двигаться вверх до тех пор, пока не дойдем до данных (непустых значений), как найдем последнюю строку. Тем же методом двигаемся влево проверяя столбцы. Такой метод работает, но не лишен недостатков: 1) на практике итерации могут дико тормозить процесс; 2) свойство .Text не увидит формул, возвращающих пустое значение.
Мне всегда казалось, что раз «Страничный режим» умеет показывать то, что мне надо, значит это уже реализовано в Excel наиболее эффективным образом. Другой вопрос в том, есть ли доступ через объектную модель Excel к параметрам такой области?
Добрый день!
Есть кнопка, которая запускает следующий макрос:
Sub SaveThisBook3()
Dim FolderName2 As Range
Set FolderName2 = ThisWorkbook.Worksheets(«Лист1»).Range(«G1»)
Dim PathToSave As String, FolderName As String, FellPathToSave As String
Dim fs As Object
PathToSave = «P:2010» ‘<————— Здесь укажи путь к папке в которую нужно сохранить книгу
FolderName = FolderName2 ‘<————— Здесь задай название папки
FellPathToSave = PathToSave & FolderName & «»
Set fs = CreateObject(«Scripting.FileSystemObject»)
If Not fs.FolderExists(FellPathToSave) Then
fs.CreateFolder (FellPathToSave)
End If
Application.ThisWorkbook.SaveAs FellPathToSave & «Приход » & Left(Now, 10) & «.xlsx»
End Sub
Этот макрос привязан к кнопке, при нажатию на которую создается в указанном каталоге новая папка, имя которой берется из ячейки и туда же, под тем же именем, сохраняется сам файл.
Мне нужно добавить в этот макрос печать — чтобы после того, как папка создалась, файл распечатался. В крайнем случае, чтобы автоматом вызывался диалог печати.
Спасибо.
В Excel есть такая замечательная штука как Запись макроса (Сервис -> Макрос -> …). Выполнив после начала записи определённые действия, например такие как печать, сохранение, добавление листов, данных в ячейки… да чего угодно, можно получить готовенький код макроса.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
Спасибо!
Попробовал записать, вот что получилось:
Sub mAcros1()
‘
‘ mAcros1 Макрос
‘ mm
‘
‘
Application.Run Range()
Application.ActivePrinter = «\192.168.1.45PRINTERCC245 (Ne02:)»
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
«\192.168.1.45PRINTERCC245 (Ne02:)», Collate:=True
End Sub
Выдает ошибку:
Copmpile error: argument not optimal
Во-первых, свою процедуру нельзя называть Range() (это зарезервированное имя Excel), а, во-вторых, программный запуск другого макроса должен выглядеть так:
Application.Run "Книга1!My_Range"
Или что за действие там у тебя первой строкой перед печатью должно происходить?
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
Я тыкаю на кнопку, которая создает каталог и сохраняет туда файл, а потом вызываю диалог печати и печатаю содерждимое файла.
Предлагаю поменять последовательность с такой:
Sub Макрос1()
'Нажатие кнопки
'Печать
End Sub
Private Sub CommandButton1_Click()
'Сохранение файла
End Sub
на такую:
Sub Макрос1()
'Раньше здесь был код, записанный макрорекордером.
'Теперь же, когда мы узнали как нужно автоматически запускать на печать,
'код более не требуется
End Sub
Private Sub CommandButton1_Click()
'Сохранение файла
'Печать
End Sub
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
C VBA сталкиваюсь первый раз! создал кнопку прописал макрос:
Sub Кнопка2_Щелчок()
Dim FolderName2 As Range
Set FolderName2 = ThisWorkbook.Worksheets(«НСС»).Range(«Y1»)
Dim PathToSave As String, FolderName As String, FellPathToSave As String
Dim fs As Object
PathToSave = «D:2010»
FolderName = FolderName2
FellPathToSave = PathToSave & FolderName & «»
Set fs = CreateObject(«Scripting.FileSystemObject»)
If Not fs.FolderExists(FellPathToSave) Then
fs.CreateFolder (FellPathToSave)
End If
Application.ThisWorkbook.SaveAs FellPathToSave & «VedomostNSS_» & Left(Now, 10) & «.xlsm»
End Sub
все отлично работает, но мне необходимо чтобы к имени файла добавлялось не просто дата а еще и время. В Y1 у меня стоит функция =СЕГОДНЯ(), если меняю на =TDATA(), то выдает ошибку. В чем причина
Цитата: Gery от 29.07.2010, 14:29
но мне необходимо чтобы к имени файла добавлялось не просто дата а еще и время.
Чтобы вместе со временем нужно просто заменить эту строку:
Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Left(Now, 10) & ".xlsm"
На такую:
Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Now & ".xlsm"
Но лучше заменять двоеточия и точки на что-нибудь другое. Например так:
Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Format(Now, "DD_MM_YYYY HH_MM_SS") & ".xlsm"
P.S. Хотя и для только даты можно было написать короче:
Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Date & ".xlsm"
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453
Спасибо, Prist! ТЫ МЕГА МОЗГ!!