Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Преобразовать формулы в листах в значения - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Преобразовать формулы в листах в значения (Макросы/Sub)
Преобразовать формулы в листах в значения
Richman Дата: Вторник, 27.01.2015, 08:44 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 346
Репутация: 54 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, Друзья

Проблема следующая, есть файл, порядка трехсот листов, на каждом листе есть формулы, правила условного форматирования, именованные диапазоны с формулами, и все это хозяйство жутко тормозит. Но из этих 300листов, с формулами нужны только штук 20 для текущего месяца, Можно ли сделать так, чтобы в листах из списка на листе "АРХИВАЦИЯ":

Все формулы преобразовать в значения,
Все форматы оставить, как они были до выполнения макроса и удалить правила условного форматирования с листа
С диспетчера имен удалить все именованные диапазоны, а имя Область Печати привязать к строгому текущему диапазону (область печати определяется формулами)

Спасибо за любую помощь!

[offtop]Я в теме макросов на уровне записать макрорекодером
К сообщению приложен файл: 3487276.xlsm (35.6 Kb)


С Уважением, Richman



Сообщение отредактировал Richman - Вторник, 27.01.2015, 08:48
 
Ответить
СообщениеЗдравствуйте, Друзья

Проблема следующая, есть файл, порядка трехсот листов, на каждом листе есть формулы, правила условного форматирования, именованные диапазоны с формулами, и все это хозяйство жутко тормозит. Но из этих 300листов, с формулами нужны только штук 20 для текущего месяца, Можно ли сделать так, чтобы в листах из списка на листе "АРХИВАЦИЯ":

Все формулы преобразовать в значения,
Все форматы оставить, как они были до выполнения макроса и удалить правила условного форматирования с листа
С диспетчера имен удалить все именованные диапазоны, а имя Область Печати привязать к строгому текущему диапазону (область печати определяется формулами)

Спасибо за любую помощь!

[offtop]Я в теме макросов на уровне записать макрорекодером

Автор - Richman
Дата добавления - 27.01.2015 в 08:44
Richman Дата: Вторник, 27.01.2015, 11:07 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 346
Репутация: 54 ±
Замечаний: 0% ±

Excel 2007
Вот нашел макрос Alex_ST для выделенного диапазона. Теперь остается выделить листы из списка и внести их в макрос, если я правильно понимаю

[vba]
Код
Sub Replace_by_VAL()   '  в выбранном диапазоне в не скрытых ячейках заменить формулы на значения
     Dim rRng As Range, rAr As Range
     On Error Resume Next
     With ActiveWindow.RangeSelection.Cells
     If .Count = 1 Or .MergeCells Then
         .Item(1) = .Item(1).Value: .Item(1).Font.Color = vbBlack: Exit Sub
     Else
         Set rRng = .SpecialCells(xlCellTypeFormulas).SpecialCells(xlCellTypeVisible)
     End If
     End With
     If rRng Is Nothing Then Exit Sub
     For Each rAr In rRng.Areas: rAr.Value = rAr.Value: Next
     rRng.Select
     rRng.Font.Color = vbBlack
End Sub
[/vba]

здесь и здесь смотрел


С Уважением, Richman

 
Ответить
СообщениеВот нашел макрос Alex_ST для выделенного диапазона. Теперь остается выделить листы из списка и внести их в макрос, если я правильно понимаю

[vba]
Код
Sub Replace_by_VAL()   '  в выбранном диапазоне в не скрытых ячейках заменить формулы на значения
     Dim rRng As Range, rAr As Range
     On Error Resume Next
     With ActiveWindow.RangeSelection.Cells
     If .Count = 1 Or .MergeCells Then
         .Item(1) = .Item(1).Value: .Item(1).Font.Color = vbBlack: Exit Sub
     Else
         Set rRng = .SpecialCells(xlCellTypeFormulas).SpecialCells(xlCellTypeVisible)
     End If
     End With
     If rRng Is Nothing Then Exit Sub
     For Each rAr In rRng.Areas: rAr.Value = rAr.Value: Next
     rRng.Select
     rRng.Font.Color = vbBlack
End Sub
[/vba]

здесь и здесь смотрел

Автор - Richman
Дата добавления - 27.01.2015 в 11:07
RAN Дата: Вторник, 27.01.2015, 12:45 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вечером.
Заодно уточни про область печати. Не понятно.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВечером.
Заодно уточни про область печати. Не понятно.

Автор - RAN
Дата добавления - 27.01.2015 в 12:45
Richman Дата: Вторник, 27.01.2015, 13:19 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 346
Репутация: 54 ±
Замечаний: 0% ±

Excel 2007
RAN, Области печати задается именованным диапазоном, соответственно если удалить именованные диапазоны, то область печати будет отображаться не корректно. Вот картинка, думаю должно быть понятно.



Спасибо за внимание
К сообщению приложен файл: 9985420.png (50.1 Kb)


С Уважением, Richman



Сообщение отредактировал Richman - Вторник, 27.01.2015, 18:15
 
Ответить
СообщениеRAN, Области печати задается именованным диапазоном, соответственно если удалить именованные диапазоны, то область печати будет отображаться не корректно. Вот картинка, думаю должно быть понятно.



Спасибо за внимание

Автор - Richman
Дата добавления - 27.01.2015 в 13:19
RAN Дата: Вторник, 27.01.2015, 16:04 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Это я и в файле видел.
А какой лист печатать?
[p.s.]Как меня бесят подобные картинки. Ткнешь в нее, 10 минут что-то крутится, а в результате ничего, кроме какого-то г...[/p.s.]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЭто я и в файле видел.
А какой лист печатать?
[p.s.]Как меня бесят подобные картинки. Ткнешь в нее, 10 минут что-то крутится, а в результате ничего, кроме какого-то г...[/p.s.]

Автор - RAN
Дата добавления - 27.01.2015 в 16:04
Richman Дата: Вторник, 27.01.2015, 17:56 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 346
Репутация: 54 ±
Замечаний: 0% ±

Excel 2007
RAN, Никакой лист печатать не нужно. просто оставить область печати как была на листе, если возможно.

Макрорекодером это записал так:
[vba]
Код
Sub область_печати()
'
' область_печати Макрос
'
'
        Application.Goto Reference:="Print_Area"
        ActiveSheet.PageSetup.PrintArea = "Print_Area"   
End Sub
[/vba]

[p.s.] Теперь буду удалять ссылки с картинок
К сообщению приложен файл: 8956598.xlsm (38.0 Kb)


С Уважением, Richman



Сообщение отредактировал Richman - Вторник, 27.01.2015, 18:59
 
Ответить
СообщениеRAN, Никакой лист печатать не нужно. просто оставить область печати как была на листе, если возможно.

Макрорекодером это записал так:
[vba]
Код
Sub область_печати()
'
' область_печати Макрос
'
'
        Application.Goto Reference:="Print_Area"
        ActiveSheet.PageSetup.PrintArea = "Print_Area"   
End Sub
[/vba]

[p.s.] Теперь буду удалять ссылки с картинок

Автор - Richman
Дата добавления - 27.01.2015 в 17:56
RAN Дата: Вторник, 27.01.2015, 19:35 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Мяу()
     Dim arr, nm As Name, x, arrPrintArea, i&
     arr = Sheets("АРХИВАЦИЯ").Range(Sheets("АРХИВАЦИЯ").Cells(1, 1), Sheets("АРХИВАЦИЯ").Cells(Rows.Count, 1).End(xlUp)).Value
     If Not IsArray(arr) Then arr = Array(arr)
     On Error Resume Next
     ReDim arrPrintArea(LBound(arr) To UBound(arr), 1 To 2)
     i = LBound(arr)
     For Each x In arr
         If Len(x) Then
             With ThisWorkbook.Sheets(x)
                 .UsedRange.Value = .UsedRange.Value
                 .Cells.FormatConditions.Delete
                 arrPrintArea(i, 1) = x
                 arrPrintArea(i, 2) = .PageSetup.PrintArea
                 i = i + 1
             End With
         End If
     Next
     For Each nm In ThisWorkbook.Names
         nm.Delete
     Next
     For i = LBound(arrPrintArea) To UBound(arrPrintArea)
         ThisWorkbook.Sheets(arrPrintArea(i, 1)).PageSetup.PrintArea = arrPrintArea(i, 2)
     Next
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub Мяу()
     Dim arr, nm As Name, x, arrPrintArea, i&
     arr = Sheets("АРХИВАЦИЯ").Range(Sheets("АРХИВАЦИЯ").Cells(1, 1), Sheets("АРХИВАЦИЯ").Cells(Rows.Count, 1).End(xlUp)).Value
     If Not IsArray(arr) Then arr = Array(arr)
     On Error Resume Next
     ReDim arrPrintArea(LBound(arr) To UBound(arr), 1 To 2)
     i = LBound(arr)
     For Each x In arr
         If Len(x) Then
             With ThisWorkbook.Sheets(x)
                 .UsedRange.Value = .UsedRange.Value
                 .Cells.FormatConditions.Delete
                 arrPrintArea(i, 1) = x
                 arrPrintArea(i, 2) = .PageSetup.PrintArea
                 i = i + 1
             End With
         End If
     Next
     For Each nm In ThisWorkbook.Names
         nm.Delete
     Next
     For i = LBound(arrPrintArea) To UBound(arrPrintArea)
         ThisWorkbook.Sheets(arrPrintArea(i, 1)).PageSetup.PrintArea = arrPrintArea(i, 2)
     Next
End Sub
[/vba]

Автор - RAN
Дата добавления - 27.01.2015 в 19:35
Richman Дата: Вторник, 27.01.2015, 21:31 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 346
Репутация: 54 ±
Замечаний: 0% ±

Excel 2007
RAN, На примере работает очень хорошо, Сейчас протестим на реальном файле

Спасибо большое. hands hands hands


С Уважением, Richman

 
Ответить
СообщениеRAN, На примере работает очень хорошо, Сейчас протестим на реальном файле

Спасибо большое. hands hands hands

Автор - Richman
Дата добавления - 27.01.2015 в 21:31
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Преобразовать формулы в листах в значения (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!