为什么我不能将Application.ReplaceFormat.NumberFormat设置为某些有效格式?

时间:2009-01-19 22:54:57

标签: excel-vba excel-2003 vba excel

我正在尝试使用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 个答案:

答案 0 :(得分: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

似乎没有任何合集可以让我获得自定义数字格式(According to this site anyway)。

我在将Application.FindFormat设置为新格式​​时开始抛出错误,我发现了这一点!

答案 1 :(得分:1)

  

运行时错误'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!