|
Компьютерный форум 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 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:48, 20-07-2015 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать это я пытался на основе вашего скрипта модифицировать
сделал так ругается, требуется объект objFile |
Отправлено: 17:59, 20-07-2015 | #22 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Maza11:
|
|
Отправлено: 18:44, 20-07-2015 | #23 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Цитата Iska:
скрипт
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(objExcel, objFile) WScript.Echo objFile.Path With objExcel With .Workbooks.Open(objFile.Path) With .Worksheets(1).Range("A4:I4") .Replace "02.07.2015", "09.07.2015" End With .Save .Close End With End With End Sub '============================================================================= |
|
Отправлено: 20:32, 20-07-2015 | #24 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 00:20, 21-07-2015 | #25 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать вот скрипт
скрипт оригинал
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 в нем я просто меняю эту часть 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 With .Workbooks.Open(objFile.Path) With .Worksheets(1).Range("A4:I4") .Replace "02.07.2015", "09.07.2015" End With .Save .Close End With скрипт измененный
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(1).Range("A4:I4") .Replace "02.07.2015", "15.07.2015" End With .Save .Close End With End With End Sub и для этих файлов он работает http://rghost.ru/private/7pFNmtcC7/9...a20229c1c14670 но для двух других файлов, где это ячейка "A3:G3" не работает (просто меняю адрес ячейки) http://rghost.ru/private/8V2CByf99/7...0a7ebd236852ec выдает ошибка 800A03EC, адрес строка 71 символ 4 это символ табуляции перед Save не понимаю почему так. для одних файлов работает. для других нет |
Последний раз редактировалось Maza11, 21-07-2015 в 09:47. Отправлено: 09:23, 21-07-2015 | #26 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать похоже это ошибка уже не в скрипте т.к. те скрипты из которых брался код тоже стали эту ошибку выдавать на моменте сохранения, хотя они 100% рабочие, бред какой то уже
|
Отправлено: 09:57, 21-07-2015 | #27 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать бред заключается в том, что с логотипами и процентами теми которые вы убирали изначально в скрипте, он не сохраняет измененную дату, если прогнать сначала скриптом убирающим их, а потом меняющим дату, то все ок
именно по этой причине в одних накладных работало, а в других нет. |
Последний раз редактировалось Maza11, 21-07-2015 в 10:34. Отправлено: 10:12, 21-07-2015 | #28 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|