Страницы: 1
RSS
Ошибка Runtime error 1004 при удалении пробелов
 
Добрый день
прошу помощи...

Записал макрос через Запись Макросов, но он перестал работать. Макрос убирает пробелы в одной из колонок
Ошибка вот в этом участке кода:
Код
 Columns("I:I").Select
  Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
   Range("I1").Select
 
Добрый и Вам день Михаил, небольшой файл-пример нужен, чтобы в нем возникала та самая ошибка, а то так вслепую сложно.
Цитата
Михаил написал:
...но он перестал работать...
Может пробелы закончились или еще чего...
Изменено: DANIKOLA - 20.01.2022 12:10:23
 
Они не закончились.... просто он почему то не срабатывает и выдает ошибку...  
вот файл с примером
 
Добрый день!

Попробуйте заменить указанный код на этот:
Код
Columns("I:I").Replace What:=" ", Replacement:="", LookAt:=xlPart
скорее всего не макрос перестал работать, а записан он был в Excel 2019, а запускается в более ранней версии
 
большое спасибо. помогло
А в чем ошибка была? Версия одна и та же. записывал на этой же версии буквально в понедельник. может формат файла поменялся... скорее всего так
 
Этот параметр появился в excel 2019 (с версией могу ошибиться)
Код
, FormulaVersion:=xlReplaceFormula2

Цитата
написал: версия одна и та же
тогда не знаю. Просто я убрал из кода все "лишнее" (не имеющее отношение к конкретной задаче)
 
Цитата
webley: Попробуйте заменить указанный код на этот
если не указать ВСЕ параметры инструмента, то будут использованы ПОСЛЕДНИЕ, а это плохо
Думаю, что достаточно убрать ", FormulaVersion:=xlReplaceFormula2" ну и НЕ работать с Selection:
Код
Columns("I:I").Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Изменено: Jack Famous - 20.01.2022 12:41:38
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, от ситуации зависит. В данном случае "Учитывать регистр" и "Просматривать по строкам" в контексте замены пробелов в столбце роли не играют. Да и формат тоже вряд ли (хотя, наверное, тут могут быть варианты). А чем компактнее код, тем проще он для понимания (но это уже исключительно мое мнение)
 
webley, большинство про нюанс запоминания неуказанных аргументов не знают, а это уже чревато серьёзными проблемами
Так, например, можно удалить все нули в значениях (вряд ли нужно) вместо очистки нолевых ячеек (часто)
У вас параметр xlPart учтён, но не учтён формат, а значит, если ДО этого пользователь с ним работал, то замена также не произойдёт (а могла бы), потому что искать будет И по формату тоже
Изменено: Jack Famous - 20.01.2022 12:58:56
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Про формат пожалуй соглашусь
 
Метод Range.Replace "помнит" параметры: LookAt, SearchOrder, MatchCase, MatchByte. Так что в данном конкретном случае вызов метода в #4 составлен корректно.
Изменено: sokol92 - 20.01.2022 13:16:09
Владимир
 
sokol92, приветствую!

Цитата
sokol92: Метод  Range.Replace  "помнит" параметры: LookAt, SearchOrder, MatchCase, MatchByte
не знал, что не всё помнит (но всегдп лучше перебдеть, чем недобдеть  :) ) — на каких версиях тестировали?
Изменено: Jack Famous - 20.01.2022 13:29:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Я этот метод (тщательно) изучал достаточно давно, противоречий в этой части с (указанной выше) документацией не находил. Microsoft не меняет поведение методов от версии к версии, даже баги не исправляет.  :)  
Владимир
 
Цитата
sokol92: противоречий в этой части с документацией не находил
сколько раз читал, а этот абзац не переводил  :D Спасибо!  :idea:
Изменено: Jack Famous - 20.01.2022 14:09:43
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
коллеги, снова подниму тему, ошибка уже немного другая появилась в том же файле но они связаны
сейчас выдало ошибку Невозможно получить свойство PivotFields класса PivotTable(строка 47 в коде)

я понимаю что макрос не может найти колонку Ship To чтобы сделать сводную таблицу, потому что формула вдруг начала убирать пробелы не в столбце I а во всей книге. Подскажите пож, почему так происходит что макрос работал только по столбцу I, после чего вдруг стал убирать пробелы во всей книге?
вот код
Код
    Columns("I:I").Select
    Columns("I:I").Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Cells.Select
    Range("C1").Activate
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Sheet1!R1C1:R1048576C31", Version:=6).CreatePivotTable TableDestination:= _
        "Ëèñò1!R3C1", TableName:="Ñâîäíàÿ òàáëèöà4", DefaultVersion:=6
    Sheets("Ëèñò1").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("Ñâîäíàÿ òàáëèöà4")
        .ColumnGrand = True
        .HasAutoFormat = True
        .DisplayErrorString = False
        .DisplayNullString = True
        .EnableDrilldown = True
        .ErrorString = ""
        .MergeLabels = False
        .NullString = ""
        .PageFieldOrder = 2
        .PageFieldWrapCount = 0
        .PreserveFormatting = True
        .RowGrand = True
        .SaveData = True
        .PrintTitles = False
        .RepeatItemsOnEachPrintedPage = True
        .TotalsAnnotation = False
        .CompactRowIndent = 1
        .InGridDropZones = False
        .DisplayFieldCaptions = True
        .DisplayMemberPropertyTooltips = False
        .DisplayContextTooltips = True
        .ShowDrillIndicators = True
        .PrintDrillIndicators = False
        .AllowMultipleFilters = False
        .SortUsingCustomLists = True
        .FieldListSortAscending = False
        .ShowValuesRow = False
        .CalculatedMembersInFilters = False
        .RowAxisLayout xlCompactRow
    End With
    With ActiveSheet.PivotTables("Сводная таблица4").PivotCache
        .RefreshOnFileOpen = False
        .MissingItemsLimit = xlMissingItemsDefault
    End With
    ActiveSheet.PivotTables("Сводная таблица4").RepeatAllLabels xlRepeatLabels
    With ActiveSheet.PivotTables("Сводная таблица4").PivotFields("Ship To")
 
Фрагменты макросов, как правило, мало полезны. Опишите точную последовательность действий, приводящую к ошибке. Например:
1. Открываю файл такой-то (из сообщения #3 ?)
2. Запускаю макрос такой-то. Возникает такая-то ошибка.

Если отвечающий сможет воспроизвести Ваши действия, то, с большой вероятностью, Вы в короткие сроки получите требуемую консультацию.

P.S. Вы загадочным образом сформировали сообщение #15. Сравните строки 11 и 42.
Изменено: sokol92 - 25.01.2022 13:11:13
Владимир
Страницы: 1
Наверх