|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - макрос excel |
|
VBA - макрос excel
|
Старожил Сообщения: 284 |
Профиль | Отправить PM | Цитировать
нужен простой макрос. в документ excel удалить два логотипа организации, уместить для печати на 1 страницу документ, сохранить и напечатать 3 копии.
Можно ли как то его применить для всех документов в конкретной папке, есть много папок по разным торг.точкам, но документ одинаковый и в каждой папке по 20-50 документов. чтобы каждый не открывать и не проделывать это все. Пробовал записать макрос нажав на "Запись", вот такой код вышел Sub лямина2() ' ' лямина2 Макрос ' ' Сочетание клавиш: Ctrl+l ' Range("H4:I7").Select Selection.ClearContents ActiveSheet.Shapes.Range(Array("Picture -767")).Select Selection.Delete Application.PrintCommunication = False With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.236220472440945) .RightMargin = Application.InchesToPoints(0.236220472440945) .TopMargin = Application.InchesToPoints(0.393700787401575) .BottomMargin = Application.InchesToPoints(0.393700787401575) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlPortrait .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .ScaleWithDocHeaderFooter = True .AlignMarginsHeaderFooter = False .EvenPage.LeftHeader.Text = "" .EvenPage.CenterHeader.Text = "" .EvenPage.RightHeader.Text = "" .EvenPage.LeftFooter.Text = "" .EvenPage.CenterFooter.Text = "" .EvenPage.RightFooter.Text = "" .FirstPage.LeftHeader.Text = "" .FirstPage.CenterHeader.Text = "" .FirstPage.RightHeader.Text = "" .FirstPage.LeftFooter.Text = "" .FirstPage.CenterFooter.Text = "" .FirstPage.RightFooter.Text = "" End With Application.PrintCommunication = True ActiveWindow.SelectedSheets.PrintPreview ActiveWorkbook.Save ActiveWindow.SelectedSheets.PrintOut Copies:=3, Collate:=True, _ IgnorePrintAreas:=False End Sub |
|
Отправлено: 13:17, 01-07-2015 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Цитата:
сохранил ваш код в блокноте в файл Module3.bas нажимаю запустить его, тыкаю файл в wscript.exe, ругается |
|
Отправлено: 16:59, 01-07-2015 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Maza11:
|
|
Отправлено: 17:54, 01-07-2015 | #12 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Iska,
круто, работает, НО 1. нельзя перетащить один файл, работает только если папку перетаскивать 2. не выставляет печать по ширине документа (фото распечатанного документа https://www.dropbox.com/s/wxfgrma9oe...41.01.jpg?dl=0 ) p.s. в остальном все работает как надо. логотип и строку под ним удаляет, внизу строку "автор печати" удаляет, печатает 3 копии |
Отправлено: 08:43, 02-07-2015 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Maza11:
Цитата Maza11:
Скрытый текст
Option Explicit Dim strSourceFileSystemObject Dim objFile Dim objExcel If WScript.Arguments.Count = 1 Then strSourceFileSystemObject = WScript.Arguments.Item(0) With WScript.CreateObject("Scripting.FileSystemObject") If .FolderExists(strSourceFileSystemObject) Then Set objExcel = Nothing For Each objFile In .GetFolder(strSourceFileSystemObject).Files Select Case LCase(.GetExtensionName(objFile.Name)) Case "xls", "xlsx" If objExcel Is Nothing Then Set objExcel = WScript.CreateObject("Excel.Application") End If WorkingWithWorkbook objExcel, objFile Case Else ' Nothing to do End Select Next If Not objExcel Is Nothing Then objExcel.Quit Set objExcel = Nothing End If ElseIf .FileExists(strSourceFileSystemObject) Then Set objFile = .GetFile(strSourceFileSystemObject) Select Case LCase(.GetExtensionName(objFile.Name)) Case "xls", "xlsx" With WScript.CreateObject("Excel.Application") WorkingWithWorkbook .Application, objFile .Quit End With Case Else WScript.Echo "Source file [" & strSourceFileSystemObject & "] probably has not an Excel Workbook." End Select Set objFile = Nothing Else WScript.Echo "Can't find source file or source folder [" & strSourceFileSystemObject & "]." WScript.Quit 2 End If End with Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file or source folder>" WScript.Quit 1 End If WScript.Quit 0 '============================================================================= '============================================================================= Sub WorkingWithWorkbook(objExcel, objFile) WScript.Echo objFile.Path With objExcel With .Workbooks.Open(objFile.Path) With .Worksheets.Item(1) .Shapes.Item("Picture -767").Delete .Range("H4:I6").Select objExcel.Selection.ClearContents .Range("A1").Select objExcel.Union(.Rows(.UsedRange.Rows.Count).EntireRow, .Rows(.UsedRange.Rows.Count -1).EntireRow).Delete With .PageSetup .Zoom = False .FitToPagesWide = 1 End With .PrintOut ,, 3 End With .Save .Close End With End With End Sub '============================================================================= Я, кстати, в предыдущем коде забыл сделать выход из Excel и сослепу оставил после копирования куска кода вместо очистки объекта — его создание. Цитата Maza11:
Давайте попробуем добавить ещё и рекомендуемое «.Zoom = False». |
|||
Отправлено: 09:57, 02-07-2015 | #14 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Идеально, печатает по ширине листа теперь.
Один файл перетягиваеш - работает, два или более - Usage: cscript.exe//nologo "Module.vbs" <Soutce file or source folder> папку перетягиваеш - работает. Но то такое, главное такой титанический труд занимавший пол часа, теперь занимает одну минуту. понажимать ОК и все. p.s. и последняя "хотелка" попробовал убрать чтобы был еще один скрипт, который делал бы все тоже самое но непечатал. Ругается так на синтаксическую ошибку при выполнении и еще тогда пусть будет отдельный скрипт который бы просто печатал по 3 копии документа XLS при перетягивании на него. Чтобы уже на все случаи жизни. |
Отправлено: 10:31, 02-07-2015 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Maza11:
Цитата Maza11:
Цитата Maza11:
Пробуйте: Скрытый текст
Option Explicit Dim objExcel Dim strSourceFileSystemObject Dim objFile If WScript.Arguments.Count > 0 Then With WScript.CreateObject("Scripting.FileSystemObject") Set objExcel = Nothing For Each strSourceFileSystemObject In WScript.Arguments If .FolderExists(strSourceFileSystemObject) Then For Each objFile In .GetFolder(strSourceFileSystemObject).Files WorkingWithWorkbook objFile, .GetExtensionName(objFile.Name) Next ElseIf .FileExists(strSourceFileSystemObject) Then WorkingWithWorkbook .GetFile(strSourceFileSystemObject), .GetExtensionName(strSourceFileSystemObject) Else WScript.Echo "Can't find source file or source folder [" & strSourceFileSystemObject & "]." End If Next If Not objExcel Is Nothing Then objExcel.Quit Set objExcel = Nothing End If End With Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file or source folder> [<Source file or source folder> [...]]" WScript.Quit 1 End If WScript.Quit 0 '============================================================================= '============================================================================= Sub WorkingWithWorkbook(objFile, strExtension) Select Case LCase(strExtension) Case "xls", "xlsx" WScript.Echo objFile.Path If objExcel Is Nothing Then Set objExcel = WScript.CreateObject("Excel.Application") End If With objExcel With .Workbooks.Open(objFile.Path) With .Worksheets.Item(1) .Shapes.Item("Picture -767").Delete .Range("H4:I6").Select .Parent.Parent.Selection.ClearContents .Range("A1").Select .Parent.Parent.Union(.Rows(.UsedRange.Rows.Count).EntireRow, .Rows(.UsedRange.Rows.Count -1).EntireRow).Delete With .PageSetup .Zoom = False .FitToPagesWide = 1 End With .PrintOut ,, 3 End With .Save .Close End With End With Case Else WScript.Echo "Source file [" & strSourceFileSystemObject & "] probably has not an Excel Workbook." End Select End Sub '============================================================================= Цитата Maza11:
|
||||
Отправлено: 04:50, 03-07-2015 | #16 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Очень благодарен Вам за помощь.
Но задача усложняется, эти чудики теперь стали присылать накладные в одном файле на 3000 строк, и нужно каждую накладную копировать оттуда и сохранять в новый файл http://rghost.ru/private/8PfsnjH6B/f...d5d81c3d8b9f35 сможете помочь ??? |
Отправлено: 17:27, 03-07-2015 | #17 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Или научите как самому написать
|
Отправлено: 15:48, 04-07-2015 | #18 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать А если у меня есть код для макроса делающий разбивающий одну большую накладную на отдельные и размещает их с номерами 01, 02, 03 .. в той же папке, помогите переделать ее на скрипт VBS т.к. у них отличается синтаксис чуть-чуть, всякие WScript добавляются, чтобы работало перетягивание файла из провдника, и накладные создавались в той же папке где файл оригинал лежит
Sub Эпицентр() Dim fn As String, Sh As Worksheet, Sh_out As Worksheet Dim Fout As String, Cl As Collection fn = Get_FileName If fn = "" Then Exit Sub Application.ScreenUpdating = False Fout = ThisWorkbook.Path Set Cl = New Collection Set Sh = Workbooks.Open(fn).Worksheets(1) LastRow = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row dx = Sh.Range("A1:A" & LastRow) ss = "1:" For n = 1 To LastRow If InStr(1, dx(n, 1), "Автор друку:", vbTextCompare) > 0 Then ss = ss & (n - 1) Cl.Add ss ss = (n + 1) & ":" End If Next For n = 1 To Cl.Count ThisWorkbook.Worksheets("Документ").Copy Set Sh_out = ActiveSheet Sh.Rows(Cl.Item(n)).Copy Sh_out.Range("A1") For Each hp In Sh_out.Shapes hp.Delete Next Set xx = Sh_out.Cells.Find("%!", , , xlPart) If Not xx Is Nothing Then xx.Value = "" Sh_out.SaveAs Filename:=Fout & "\" & n & ".xls", FileFormat:=xlExcel8 Sh_out.Parent.Close (False) Next Sh.Parent.Close (False) Application.ScreenUpdating = True MsgBox "Game Over" End Sub Function Get_FileName(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal FilterDescription As String = "Файлы Excel", _ Optional ByVal FilterExtention As String = "*.xls*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) ' .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function Get_FileName = .SelectedItems(1) End With End Function |
Отправлено: 10:48, 07-07-2015 | #19 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать нужно в документе менять дату
делаю так Sub WorkingWithWorkbook(objExcel, objFile) WScript.Echo objFile.Path With objExcel With .Workbooks.Open(objFile.Path) With .Worksheets(1).Range("A4:I4") .Replace:="02.07.2015", Replacement:="09.07.2015" End With .Save .Close End With End With End Sub Подскажите пожалуйста |
Отправлено: 17:32, 20-07-2015 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. | E.v.g | Программирование и базы данных | 7 | 03-05-2018 22:18 | |
VBS/WSH/JS - исправить макрос excel | oleg-sm | Скриптовые языки администрирования Windows | 1 | 09-08-2013 19:01 | |
VBA - [решено] Макрос excel | neo21 | Программирование и базы данных | 4 | 06-03-2012 22:04 | |
Разное - Макрос Excel. | KiriJolit | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 02-12-2010 23:19 | |
Макрос Excel работает после перезагрузки :( | Guest | Программирование и базы данных | 1 | 11-05-2004 08:43 |
|