3

我正在尝试使用 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 进行了尝试,因为它是我唯一可用的版本。

4

2 回答 2

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 回答
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!

于 2016-02-02T13:18:59.847 回答