我对VBA很陌生,但多年前做过很多编码。
我正在创建一个宏,它将一列数据从csv文件复制到另一个excel电子表格(我将其标记为wkb1)。 csv文件中的数据用于日期和时间,如下所示" 09/12/2015 14:19" (例如)。 由于它只是一个在Excel(在我的宏中)中打开的csv文件,因此它没有任何预先指定的格式。
上述例子应该代表12月9日(9月12日)。我的Windows位置设置为日期格式为DDMMYYYY(即英语而非美国格式)。
当我从csv手动复制和粘贴(或粘贴特殊)到我的工作电子表格时,它会将数据(即文本)复制到工作电子表格中。它不会将数据转换为实际日期和时间。时间价值。
但如果我在宏中使用完全相同的步骤(我将在下面显示) 然后数据通过转换为日期:时间和它在月份和日期之间交换 - 因此它被粘贴为2015/09/12 02:19:00 PM或42259.60(取决于我是否使用了粘贴或粘贴 - 特别在宏)
由于月份和日期的这种惊人交换,我希望避免这种风险并将数据带入文本然后解构文本以重新创建正确的日期(使用DateSerial函数)
我在代码中复制文本的代码很简单,就像这样: (从csv文件激活开始,我在宏中打开)
Range(Cells(4, 1), Cells(4, 1).Offset(x, 4)).Copy
wkb1.Activate
Cells(4, "W").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
对强大解决方案的任何建议?将日期和月份订单从英语格式换成美国格式的任何风险对我来说都是一场灾难! 谢谢 达米安
答案 0 :(得分:0)
尝试在执行特殊粘贴之前格式化将粘贴为文本格式的范围。
Cells(4, "W").Select
Selection.NumberFormat = "@" 'Numbers will be stored as text
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False