Это да, но этот кусок макроса является только частью общего макроса, который открывает документ и забирает из него данные. В исходном документе все данные с положительными значениями. Хотелось бы чтобы весь макрос выполнялся автоматически.
Если есть необходимость ниже приведу рабочий макрос целиком:
Код |
---|
Sub Input_COOIS_сделать_отр()
Application.ScreenUpdating = False 'отключаем обновление экрана (отображение изменений)
Application.Calculation = xlCalculationManual 'отключаем автоматический пересчет формул
Application.EnableEvents = False 'отключаем события
Call Данные_из_COOIS 'запускаем макрос Данные_из_COOIS
Application.Calculation = xlCalculationAutomatic 'включаем автоматический пересчет формул
Call Сделать_отр 'заупускаем макрос Сделать_отр
Application.ScreenUpdating = True 'включаем обновление экрана (отображенеие изменений)
Application.EnableEvents = True 'включаем события
End Sub
|
Соответственно
Данные_из_COOIS:
Код |
---|
Sub Данные_из_COOIS()
'Шаг 1: Определяем переменную.
Dim FName As Variant
Dim bookconst As Workbook
Dim abook As Workbook
Set abook = ActiveWorkbook
'Шаг 2: Метод GetOpenFilename активизирует диалоговое окно.
FName = Application.GetOpenFilename
'a – определяем тип файла
FileFilter = "Excel Workbooks,*.xl*"
'b – заголовок окна
Title = "Выбери файл, который надо открыть"
'c – множественный выбор
MultiSelect = False
'Шаг 3: Если был выбран файл, открыть его!
If FName <> False Then
Workbooks.Open Filename:=FName
'Range("A2:B15000").Copy 'Выделяем область и копируем (первые два столбца)
Range("A2:B2").Select
Range(Selection, Selection.End(xlDown)).Copy
ThisWorkbook.Activate 'Переходим в рабочую книгу из котрой запускали макрос
Sheets("CRT INPUT").Select 'Выбираем лист "CRT INPUT"
Range("A3").PasteSpecial Paste:=xlPasteValues 'Выбираем ячейку, Вставляем скопированные данные через специальныю вставку значениями, чтобы не сломаились формулы
Workbooks.Open Filename:=FName
'Range("C2:P15000").Copy 'Выделяем область и копируем (с material и дальше)
Range("C2:P2").Select
Range(Selection, Selection.End(xlDown)).Copy
ThisWorkbook.Activate
Sheets("CRT INPUT").Select 'Выбираем лист "CRT INPUT"
Range("E3").PasteSpecial Paste:=xlPasteValues 'Выбираем ячейку, Вставляем скопированные данные через специальныю вставку значениями, чтобы не сломаились формулы
End If
End Sub
|
И
Сделать_отр:
Код |
---|
Sub Сделать_отр()
'
' Сделать_отр Макрос
'
'
Columns("R:R").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'вставляет столбец
Range("R3").Select 'переходит в ячейку R3
ActiveCell.FormulaR1C1 = "=IF(RC[-6]*1=261,RC[-1],ABS(RC[-1])*-1)" 'прописывает в ячейке R3 формулу
Range("R3").Select 'выделяет ячейку R3
Selection.AutoFill Destination:=Range("R3:R20000") 'протягивает формулу вниз до 20000 строки
Range("R3:R20000").Select 'выделяет диапазон R3:R26270
Selection.Copy 'копирует выделенное
Range("Q3").Select 'выделяет ячейку Q3
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 'вставляет выделенное в качестве значений
Columns("R:R").Select 'выделяет весь столбец R
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft 'удаляет выделенный столбец
End Sub
|
Вот, если есть замечания и рекомендации по ускорению работы всего этого с радостью выслушаю.