Почему я не могу установить Application.ReplaceFormat.NumberFormat в некоторые допустимые форматы? - PullRequest
3 голосов
/ 20 января 2009

Я пытаюсь использовать макрос Excel для переформатирования электронной таблицы, экспортированной с помощью OLE-Automation

Следующий код работает нормально:

Application.FindFormat.NumberFormat = "#,##0.0000000"
Application.ReplaceFormat.NumberFormat = "#,##0.00"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
    xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True

если я изменю ReplaceFormat на

Application.ReplaceFormat.NumberFormat = "#,##0.0" 

для отображения только 1 знака после запятой, я получаю ошибку 1004 (ошибка приложения или объекта). «0.0» также не срабатывает.

Я могу установить формат ячейки (Cells.NumberFormat) на "#, ## 0.0"

Я пробовал это только в Excel-2003, так как это единственная доступная версия.

Ответы [ 2 ]

1 голос
/ 02 февраля 2016

Ошибка времени выполнения «1004»: ошибка приложения или объекта

Чтобы избежать этой ошибки, вы должны иметь существующие ячейки с обоими используемыми форматами хотя бы один раз. У меня есть первые строки для имен столбцов, поэтому они имеют только строковые значения, и установка первых двух имен столбцов в dateformat не окажет видимого влияния на мои данные листа.

Sub datum_popravak_rucno()
    ' add find format to cell A1
    ActiveSheet.Range("A1").NumberFormat = "m/d/yyyy"
    ' add replace format to cell B1
    ActiveSheet.Range("B1").NumberFormat = "yyyy-mm-dd hh:mm:ss"
    ' define find format
    Application.FindFormat.NumberFormat = "m/d/yyyy"
    ' define replace format
    Application.ReplaceFormat.NumberFormat = "yyyy-mm-dd hh:mm:ss"
    ' do replace on all cells
    Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
        xlByColumns, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
End Sub

Работает в Excel 2003, 2007, 2010!

1 голос
/ 20 января 2009

Я нашел часть ответа. Чтобы это работало, NumberFormat должен уже существовать в рабочей книге.

Обходной путь - установить формат ячейки на «#, ## 0.0», а затем выполнить замену:

Worksheets("Sheet1").Range("A1").NumberFormat = "#,##0.0" 
Application.FindFormat.NumberFormat = "#,##0.0000000"
Application.ReplaceFormat.NumberFormat = "#,##0.00"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
    xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True

Похоже, что нет коллекций, которые позволили бы мне использовать пользовательские числовые форматы ( В любом случае по этому сайту ).

Я обнаружил это при установке Application.FindFormat в новый формат, который начал выдавать ошибки!

...