3

Excelマクロを使用して、OLEオートメーションを使用してエクスポートされたスプレッドシートを再フォーマットしようとしています

次のコードは正常に機能します。

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は私が利用できる唯一のバージョンであるため、これを試したのはExcel-2003だけです。

4

2 に答える 2

1

実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラー

このエラーを回避するには、少なくとも 1 回は両方の形式を使用した既存のセルが必要です。列名の最初の行があるため、文字列値のみが含まれ、最初の 2 つの列名を 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 で動作します。

于 2016-02-02T13:18:59.847 に答える
1

答えの一部を見つけました。これが機能するには、ワークブックに 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 を新しい形式に設定すると、エラーがスローされ始めたときにこれを発見しました。

于 2009-01-20T04:09:30.490 に答える