Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - макрос excel

Ответить
Настройки темы
VBA - макрос excel

Аватара для Maza11

Старожил


Сообщения: 284
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Maza11
Дата: 01-07-2015
нужен простой макрос. в документ 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
применять для других документов его как не открывая каждый из 492 документов ???

Отправлено: 13:17, 01-07-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Там лишнее.
Код: Выделить весь код
.Replace "02.07.2015", "09.07.2015"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:48, 20-07-2015 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Maza11

Старожил


Сообщения: 284
Благодарности: 2

Профиль | Отправить PM | Цитировать


это я пытался на основе вашего скрипта модифицировать
сделал так
Код: Выделить весь код
Sub WorkingWithWorkbook(objExcel, objFile)
	WScript.Echo objFile.Path
	
	With objExcel
		With .Workbooks.Open(objFile.Path)
			With .Worksheets.Item(1).Range("A4:I4")
				.Replace "02.07.2015", "09.07.2015"
			End With
			
			.Save
			.Close
		End With
	End With
End Sub
ругается, требуется объект objFile

Отправлено: 17:59, 20-07-2015 | #22


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Maza11:
ругается, требуется объект objFile »
Значит, Вы что-то не то передаёте в процедуру.

Отправлено: 18:44, 20-07-2015 | #23


Аватара для Maza11

Старожил


Сообщения: 284
Благодарности: 2

Профиль | Отправить 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
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Это не мой скрипт. Это непонятная компиляция.

Посмотрите сами:
Код: Выделить весь код
…
WorkingWithWorkbook objFile, .GetExtensionName(objFile.Name)
…
Sub WorkingWithWorkbook(objExcel, objFile)
…

Отправлено: 00:20, 21-07-2015 | #25


Аватара для Maza11

Старожил


Сообщения: 284
Благодарности: 2

Профиль | Отправить 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


Аватара для Maza11

Старожил


Сообщения: 284
Благодарности: 2

Профиль | Отправить PM | Цитировать


похоже это ошибка уже не в скрипте т.к. те скрипты из которых брался код тоже стали эту ошибку выдавать на моменте сохранения, хотя они 100% рабочие, бред какой то уже

Отправлено: 09:57, 21-07-2015 | #27


Аватара для Maza11

Старожил


Сообщения: 284
Благодарности: 2

Профиль | Отправить PM | Цитировать


бред заключается в том, что с логотипами и процентами теми которые вы убирали изначально в скрипте, он не сохраняет измененную дату, если прогнать сначала скриптом убирающим их, а потом меняющим дату, то все ок

именно по этой причине в одних накладных работало, а в других нет.

Последний раз редактировалось Maza11, 21-07-2015 в 10:34.


Отправлено: 10:12, 21-07-2015 | #28



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - макрос excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход