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

Вход

Регистрация

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

 

= Мир MS Excel/Доработка скрипта для вставки значений - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Доработка скрипта для вставки значений
237732a Дата: Среда, 01.06.2022, 11:27 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, мне нужно доработать скрипт, который вставляет значения вместо формул так, чтобы он вставлял значения только в тех ячейках, где формула "ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ", а остальные формулы скрипт не трогал. Важно: скрипт должен работать вне зависимости от нахождения ячеек с формулой и на каждом листе файла. По сути, надо просто как-то задать условие этой формулы в скрипт, всю голову сломал, не могу придумать. Прикрепленный пример просто для понимания, что примерно надо сделать. Нужный файл не могу скинуть, так как он весит сильно больше 500кб
Вот сам скрипт:
[vba]
Код
Sub Formulas_To_Values_Book()
'преобразование формул в значения во всей книге
For Each ws In ActiveWorkbook.Worksheets
ws.UsedRange.Value = ws.UsedRange.Value
Next ws
End Sub
[/vba][
К сообщению приложен файл: 2231536.xlsx (15.1 Kb)


Сообщение отредактировал 237732a - Среда, 01.06.2022, 16:52
 
Ответить
СообщениеЗдравствуйте, мне нужно доработать скрипт, который вставляет значения вместо формул так, чтобы он вставлял значения только в тех ячейках, где формула "ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ", а остальные формулы скрипт не трогал. Важно: скрипт должен работать вне зависимости от нахождения ячеек с формулой и на каждом листе файла. По сути, надо просто как-то задать условие этой формулы в скрипт, всю голову сломал, не могу придумать. Прикрепленный пример просто для понимания, что примерно надо сделать. Нужный файл не могу скинуть, так как он весит сильно больше 500кб
Вот сам скрипт:
[vba]
Код
Sub Formulas_To_Values_Book()
'преобразование формул в значения во всей книге
For Each ws In ActiveWorkbook.Worksheets
ws.UsedRange.Value = ws.UsedRange.Value
Next ws
End Sub
[/vba][

Автор - 237732a
Дата добавления - 01.06.2022 в 11:27
китин Дата: Среда, 01.06.2022, 11:44 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7029
Репутация: 1078 ±
Замечаний: 0% ±

Excel 2007;2010;2016
237732a, - Прочитайте Правила форума
- Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 500 кб согласно п.3 Правил форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение237732a, - Прочитайте Правила форума
- Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 500 кб согласно п.3 Правил форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - китин
Дата добавления - 01.06.2022 в 11:44
jun Дата: Среда, 01.06.2022, 16:00 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

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
[/vba]
К сообщению приложен файл: 2231536.xlsb (18.1 Kb)
 
Ответить
Сообщение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
[/vba]

Автор - jun
Дата добавления - 01.06.2022 в 16:00
237732a Дата: Среда, 01.06.2022, 16:48 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

jun, добрый день, виноват, до конца не обрисовал ситуацию. Нужно, чтобы макрос это делал вне зависимости от нахождения ячеек, плюс на всех листах файла
 
Ответить
Сообщениеjun, добрый день, виноват, до конца не обрисовал ситуацию. Нужно, чтобы макрос это делал вне зависимости от нахождения ячеек, плюс на всех листах файла

Автор - 237732a
Дата добавления - 01.06.2022 в 16:48
_Boroda_ Дата: Среда, 01.06.2022, 17:03 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так?
[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
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак?
[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
[/vba]

Автор - _Boroda_
Дата добавления - 01.06.2022 в 17:03
237732a Дата: Среда, 01.06.2022, 17:15 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

_Boroda_, добрый день, ваш макрос вообще не хочет работать (
 
Ответить
Сообщение_Boroda_, добрый день, ваш макрос вообще не хочет работать (

Автор - 237732a
Дата добавления - 01.06.2022 в 17:15
_Boroda_ Дата: Среда, 01.06.2022, 17:18 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
У меня-то хочет. Значит, что-то не то делаете. Я, к сожалению, не могу ни класть, ни скачивать с этого форума файлы с макросами, политика безопасности ругается.
Что пишет? На какой строке ругается?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ меня-то хочет. Значит, что-то не то делаете. Я, к сожалению, не могу ни класть, ни скачивать с этого форума файлы с макросами, политика безопасности ругается.
Что пишет? На какой строке ругается?

Автор - _Boroda_
Дата добавления - 01.06.2022 в 17:18
237732a Дата: Среда, 01.06.2022, 17:22 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Он просто ничего не меняет. Я создал новый модуль, запускаю макрос и ничего не происходит
К сообщению приложен файл: 0709081.png (44.1 Kb)
 
Ответить
СообщениеОн просто ничего не меняет. Я создал новый модуль, запускаю макрос и ничего не происходит

Автор - 237732a
Дата добавления - 01.06.2022 в 17:22
msi2102 Дата: Среда, 01.06.2022, 17:31 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Ну тогда так попробуйте
[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
[/vba]
К сообщению приложен файл: 2231536_1.xlsb (22.0 Kb)
 
Ответить
СообщениеНу тогда так попробуйте
[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
[/vba]

Автор - msi2102
Дата добавления - 01.06.2022 в 17:31
237732a Дата: Среда, 01.06.2022, 17:43 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

msi2102, работает, спасибо вам огромное!!! _Boroda_, jun, вам тоже большое спасибо!!!
 
Ответить
Сообщениеmsi2102, работает, спасибо вам огромное!!! _Boroda_, jun, вам тоже большое спасибо!!!

Автор - 237732a
Дата добавления - 01.06.2022 в 17:43
  • Страница 1 из 1
  • 1
Поиск:

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