Здравствуйте, мне нужно доработать скрипт, который вставляет значения вместо формул так, чтобы он вставлял значения только в тех ячейках, где формула "ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ", а остальные формулы скрипт не трогал. Важно: скрипт должен работать вне зависимости от нахождения ячеек с формулой и на каждом листе файла. По сути, надо просто как-то задать условие этой формулы в скрипт, всю голову сломал, не могу придумать. Прикрепленный пример просто для понимания, что примерно надо сделать. Нужный файл не могу скинуть, так как он весит сильно больше 500кб Вот сам скрипт: [vba]
Код
Sub Formulas_To_Values_Book() 'преобразование формул в значения во всей книге For Each ws In ActiveWorkbook.Worksheets ws.UsedRange.Value = ws.UsedRange.Value Next ws End Sub
[/vba][
Здравствуйте, мне нужно доработать скрипт, который вставляет значения вместо формул так, чтобы он вставлял значения только в тех ячейках, где формула "ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ", а остальные формулы скрипт не трогал. Важно: скрипт должен работать вне зависимости от нахождения ячеек с формулой и на каждом листе файла. По сути, надо просто как-то задать условие этой формулы в скрипт, всю голову сломал, не могу придумать. Прикрепленный пример просто для понимания, что примерно надо сделать. Нужный файл не могу скинуть, так как он весит сильно больше 500кб Вот сам скрипт: [vba]
Код
Sub Formulas_To_Values_Book() 'преобразование формул в значения во всей книге For Each ws In ActiveWorkbook.Worksheets ws.UsedRange.Value = ws.UsedRange.Value Next ws End Sub
237732a, - Прочитайте Правила форума - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 500 кб согласно п.3 Правил форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
237732a, - Прочитайте Правила форума - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 500 кб согласно п.3 Правил форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Sub FindAndReplace() Dim lr, i As Range lr = ActiveSheet.Cells(Rows.Count, 9).End(xlUp).Row For Each i In Range("I13:I" & lr) If InStr(1, i.Formula, "=GETPIVOTDATA", vbTextCompare) Then i.Copy i.PasteSpecial xlValues End If Next i End Sub
[/vba]
237732a, добрый день! макрос: [vba]
Код
Sub FindAndReplace() Dim lr, i As Range lr = ActiveSheet.Cells(Rows.Count, 9).End(xlUp).Row For Each i In Range("I13:I" & lr) If InStr(1, i.Formula, "=GETPIVOTDATA", vbTextCompare) Then i.Copy i.PasteSpecial xlValues End If Next i End Sub
jun, добрый день, виноват, до конца не обрисовал ситуацию. Нужно, чтобы макрос это делал вне зависимости от нахождения ячеек, плюс на всех листах файла
jun, добрый день, виноват, до конца не обрисовал ситуацию. Нужно, чтобы макрос это делал вне зависимости от нахождения ячеек, плюс на всех листах файла237732a
Sub tt() Dim i As Range, sh As Worksheet, Cal_ Cal_ = Application.Calculation Application.Calculation = 3 For Each sh In ThisWorkbook.Worksheets With sh For Each i In .UsedRange If InStr(1, i.Formula, "=GETPIVOTDATA", vbTextCompare) Then i = i.Value End If Next i End With Next sh Application.Calculation = Cal_ End Sub
[/vba]
Так? [vba]
Код
Sub tt() Dim i As Range, sh As Worksheet, Cal_ Cal_ = Application.Calculation Application.Calculation = 3 For Each sh In ThisWorkbook.Worksheets With sh For Each i In .UsedRange If InStr(1, i.Formula, "=GETPIVOTDATA", vbTextCompare) Then i = i.Value End If Next i End With Next sh Application.Calculation = Cal_ End Sub
У меня-то хочет. Значит, что-то не то делаете. Я, к сожалению, не могу ни класть, ни скачивать с этого форума файлы с макросами, политика безопасности ругается. Что пишет? На какой строке ругается?
У меня-то хочет. Значит, что-то не то делаете. Я, к сожалению, не могу ни класть, ни скачивать с этого форума файлы с макросами, политика безопасности ругается. Что пишет? На какой строке ругается?_Boroda_
Sub Formulas_To_Values_Book() Dim arr As Variant, ws As Worksheet, i As Long, k As Long For Each ws In ActiveWorkbook.Worksheets arr = ws.UsedRange.Formula If IsArray(arr) Then For i = LBound(arr) To UBound(arr) For k = LBound(arr, 2) To UBound(arr, 2) If InStr(arr(i, k), "=GETPIVOTDATA") Then ws.Cells(i, k).Value = ws.Cells(i, k).Value Next Next End If Next ws End Sub
[/vba]
Ну тогда так попробуйте [vba]
Код
Sub Formulas_To_Values_Book() Dim arr As Variant, ws As Worksheet, i As Long, k As Long For Each ws In ActiveWorkbook.Worksheets arr = ws.UsedRange.Formula If IsArray(arr) Then For i = LBound(arr) To UBound(arr) For k = LBound(arr, 2) To UBound(arr, 2) If InStr(arr(i, k), "=GETPIVOTDATA") Then ws.Cells(i, k).Value = ws.Cells(i, k).Value Next Next End If Next ws End Sub