Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA在从CVS文件复制时更改日期格式_Excel_Vba - Fatal编程技术网

Excel VBA在从CVS文件复制时更改日期格式

Excel VBA在从CVS文件复制时更改日期格式,excel,vba,Excel,Vba,我有一个csv文件,基本上有一个列,其中的日期格式为澳大利亚日期格式: 4/10/2016 15/03/2017 但是,在使用以下代码将其复制并粘贴到其他工作簿时: srcBook.Sheets(tabf).Range("B1:AD10000").Copy Workbooks(thisworkbook).Activate Sheets("raw Data").Range("A2").Select ActiveSheet.Paste 对于某些条目,月份/日期将切换为美国格式,并成为 10/04

我有一个csv文件,基本上有一个列,其中的日期格式为澳大利亚日期格式:

4/10/2016
15/03/2017
但是,在使用以下代码将其复制并粘贴到其他工作簿时:

srcBook.Sheets(tabf).Range("B1:AD10000").Copy
Workbooks(thisworkbook).Activate
Sheets("raw Data").Range("A2").Select
ActiveSheet.Paste
对于某些条目,月份/日期将切换为美国格式,并成为

10/04/2016
15/03/2017

我在澳大利亚的windows环境中。是否可以修复此意外行为?

您可以使用VBA使用.NumberFormat格式化范围

srcBook.Sheets(tabf).Range("B1:AD10000").NumberFormat = "dd/mm/yyyy"

奇怪的是,它只会更改某些条目的日期。可能目标工作表对不同的单元格应用了不同的格式。如果是这种情况,请选择目标工作表中的单元格或列,并在excel中将其格式化为正确的日期格式。

您可以使用VBA使用.NumberFormat格式化范围

srcBook.Sheets(tabf).Range("B1:AD10000").NumberFormat = "dd/mm/yyyy"
奇怪的是,它只会更改某些条目的日期。可能目标工作表对不同的单元格应用了不同的格式。如果是这种情况,请选择目标工作表中的单元格或列,并在excel中将其格式化为正确的日期格式。

请尝试以下代码:

' copy >> paste in 1 line
srcBook.Sheets(tabf).Range("B1:AD10000").Copy Destination:= _
Workbooks(thisworkbook).Sheets("raw Data").Range("A2")

' convert column C to date format of "dd/mm/yyyy"
Workbooks(thisworkbook).Sheets("raw Data").Range("C:C").NumberFormat = "dd/mm/yyyy"
编辑1

' try copy >> paste special
srcBook.Sheets(tabf).Range("B1:AD10000").Copy
Workbooks(ThisWorkbook).Sheets("raw Data").Range("A2").PasteSpecial xlValues
请尝试以下代码:

' copy >> paste in 1 line
srcBook.Sheets(tabf).Range("B1:AD10000").Copy Destination:= _
Workbooks(thisworkbook).Sheets("raw Data").Range("A2")

' convert column C to date format of "dd/mm/yyyy"
Workbooks(thisworkbook).Sheets("raw Data").Range("C:C").NumberFormat = "dd/mm/yyyy"
编辑1

' try copy >> paste special
srcBook.Sheets(tabf).Range("B1:AD10000").Copy
Workbooks(ThisWorkbook).Sheets("raw Data").Range("A2").PasteSpecial xlValues

我发现使用CTRL-V粘贴以制表符分隔的dd/mm/yy字符串不会交换日-月,但使用VBA则会交换日-月。我刚刚发现,如果以yyyy-mm-dd字符串开头,它不会交换日-月。我的makro在粘贴前对单元格进行格式化,这也很有效。

我发现使用CTRL-V粘贴以制表符分隔的dd/mm/yy字符串不会交换日-月,但使用VBA则会。我刚刚发现,如果以yyyy-mm-dd字符串开头,它不会交换日-月。My makro在粘贴前对单元格进行格式化,这也很有效。

此问题的解决方案始终是打开并保存CSV文件,并将Local属性设置为True

打开CSV文件时,您的操作如下:

Workbooks.Open "path & filename.csv", Local:=True
当您保存它时,您可以执行以下操作:

ActiveWorkbook.SaveAs Filename:="path & filename.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True

始终在末尾添加,Local:=True

此问题的解决方案始终是打开并保存CSV文件,并将Local属性设置为True

打开CSV文件时,您的操作如下:

Workbooks.Open "path & filename.csv", Local:=True
当您保存它时,您可以执行以下操作:

ActiveWorkbook.SaveAs Filename:="path & filename.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True


始终在末尾添加,Local:=True

首先,您可以将代码中的4行替换为1:
srcBook.Sheets(tabf).Range(“B1:AD10000”)。复制目标:=工作簿(This工作簿)。Sheets(“原始数据”).Range(“A2”)
-无需
激活
选择
,即可在工作簿之间复制>>粘贴。关于日期格式,在使用vba粘贴后,可以使用
Range(“A2”)=format(Range(“A2”),“dd/mm/yyyy”)
重新格式化它。第二点没有帮助,因为只有一列中有日期,其余的值是整数,我不想批量转换为日期。好的,那么,哪一列包含原始工作簿中的日期值?可能是一个提示-如何重新构造此代码以仅粘贴值。然后我可以将单元格预先格式化为文本格式或正确的日期格式。您建议的代码要如何实现这一点?谢谢第3列有日期首先,您可以将代码中的4行替换为1:
srcBook.Sheets(tabf).Range(“B1:AD10000”)。复制目的地:=工作簿(thisworkbook).Sheets(“原始数据”).Range(“A2”)
-无需
激活
选择
,即可在工作簿之间复制>>粘贴。关于日期格式,在使用vba粘贴后,可以使用
Range(“A2”)=format(Range(“A2”),“dd/mm/yyyy”)
重新格式化它。第二点没有帮助,因为只有一列中有日期,其余的值是整数,我不想批量转换为日期。好的,那么,哪一列包含原始工作簿中的日期值?可能是一个提示-如何重新构造此代码以仅粘贴值。然后我可以将单元格预先格式化为文本格式或正确的日期格式。您建议的代码要如何实现这一点?谢谢第三栏已经过了我不知道第二点有什么不同?我们对其进行格式化,使其看起来像是颠倒了月份和日期,它不会改变日期的值,该日期仍然是颠倒的,如OP中所述。哦,我不明白这些值是颠倒的,它们在粘贴之前在
表(tabf)
中颠倒了吗?是的,这是一种奇怪的行为,是的,CSV中的原始日期是10月4日(在澳大利亚格式下正确显示为4/10)。复制后,它将变为4月10日,显示为10/4。在源和目标中,格式都是澳大利亚的,但不知何故,该值在途中被解释为美国的。是的,奇怪,但这是相同的问题,似乎转换发生在复制阶段,而不是粘贴。解释和解决月/日反转的方法ere:我不知道第二点有什么不同?我们将其格式化为反转其月份和日期,它不会改变日期的值,该日期仍保持反转,如OP中所述。哦,我不明白值被反转了,它们在
表(tabf)中反转了吗
粘贴之前?是的,这是一种奇怪的行为,是的,CSV中的原始日期是10月4日(在澳大利亚格式下正确显示为4/10)。复制后,它将变为4月10日,显示为10/4。在源和目标中,格式都是澳大利亚的,但不知何故,该值在途中被解释为美国的。是的,奇怪,但这是相同的问题,似乎转换发生在复制阶段,而不是粘贴。解释和解决月/日反转的方法ere:这是一个优雅的解决方案,不需要修改单元格格式。当然,用户必须确保文件处于打开状态