【发布时间】:2014-05-06 13:34:35
【问题描述】:
我在约会方面遇到了一些麻烦。我已经阅读了很多关于它的内容,而且日期格式很奇怪似乎很常见。
我的情况是,当我将 xlsx 文件或 csv 文件中的数据带入我自己的工作簿(通过 vba 加载宏)时,日期被格式化为文本。加载宏只是打开所需的文件,将所有行复制并粘贴到当前书籍中,然后关闭该文件。
我检查了我的源文件,所有日期的格式都正确 - dd/mm/yyyy 并在源 xlsx 和 csv 文件中正确显示。当我输入数据时,日期变成了文本格式,你看到的只是:40246,实际上是:09/03/2010。
我检查了我的文件,它们都存储为日期。我尝试格式化为数字、文本、特殊、所有变体,然后改回日期,但没有任何反应。
列中的每个单元格(只有 1 列)都有绿色错误指示符,并且信息显示“此单元格格式为文本或前面带有撇号”,但两者都不是。我确保我的 excel 或源代码中没有撇号。但是,如果我在该错误上单击“转换为数字”,然后将格式更改回最新,它会修复。
我想在代码中执行此操作,获取整个列,转换为数字,然后更改为日期。但我似乎无法弄清楚如何做到这一点。
我尝试过更改格式,例如:ActiveCell.numberformat = "0.00"(我只是尝试使用 1 个单元格进行练习)但这并没有清除错误,当我将其更改回最新时,什么也没发生。我尝试录制我在错误框中单击“转换为数字”的宏,但代码中没有任何内容。是否有用于修复错误单元格的 vba 命令?我知道有一个iserror(或类似的东西)函数来判断单元格是否有错误,但我不知道使用什么命令来实际修复错误。
有什么建议吗?
如果我突出显示整个列,然后在错误中单击“转换为数字”,它会转换整个列,此时我可以转换为修复它的日期,这就是我希望宏做的事情..我不想每次用户遇到这个问题时都跑过去修复它(我不相信我可以让他们自己解决,这真的是最简单的)
注意绿色的小指示器,它显示“转换为数字”,我可以这样做,然后将格式更改为日期,但是当我单击转换为数字时,录制的宏中没有代码,这很奇怪。
编辑
加载代码:
openfnameandpath = Application.GetOpenFilename(Title:="Select File To Be Opened") 'get file path
dim openfnameandpath as string
dim loadworkbook as workbook
dim numrows as long, numcols as long
openfnameandpath = Application.GetOpenFilename(Title:="Select File To Be Opened") 'get file path
Set loadWorkbook = Workbooks.Open(openfnameandpath)
loadWorkbook.Sheets(1).Activate 'in case a different sheet was active
numrows = Cells.find("*", [A1], , , xlByRows, xlPrevious).Row
numcols = Cells.find("*", [A1], , , xlByColumns, xlPrevious).Column
loadWorkbook.Sheets(1).Range("A1", Cells(numRows, numCols)).Copy Sheets(1).Cells(1, 1) =
loadWorkbook.Close False
我把它简化了,问题仍然存在。
【问题讨论】:
-
你的VBA加载宏有问题,能分享一下代码吗?
-
发布了我的加载代码,我已经将其缩减为我发布的内容并且存在问题。看不到那里的任何东西会对此有何影响..
-
somcoe 你的回答很有效。我只是错过了
.value = .value部分......它很愚蠢,你必须包括它。因此,要完成它,我所要做的就是在末尾添加.numberformat = "dd/mm/yyy",然后将其更改为日期。