Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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中从不同的区域格式复制日期?_Vba_Excel_Date - Fatal编程技术网

如何在Excel VBA中从不同的区域格式复制日期?

如何在Excel VBA中从不同的区域格式复制日期?,vba,excel,date,Vba,Excel,Date,我有一个工作簿,用于从另一个工作簿收集相关数据,我只有阅读权限。我使用Excel的内置功能“数据连接”将后者连接到我自己的。在我的情况下(是的,我对它进行了测试),复制这样一个工作表,然后从复制的工作表中复制相关数据比打开所述工作簿然后直接从源中复制相关数据要快(大约30%) 源文件中的默认日期格式为“dd/mm/yy”(尽管在打开时它显然适应本地日期格式设置)。复制的工作表保留该日期格式,但复制区域设置为“english US”的日期时,Excel假定源格式为“yy/mm/dd”,即使单元格格

我有一个工作簿,用于从另一个工作簿收集相关数据,我只有阅读权限。我使用Excel的内置功能“数据连接”将后者连接到我自己的。在我的情况下(是的,我对它进行了测试),复制这样一个工作表,然后从复制的工作表中复制相关数据比打开所述工作簿然后直接从源中复制相关数据要快(大约30%)

源文件中的默认日期格式为“dd/mm/yy”(尽管在打开时它显然适应本地日期格式设置)。复制的工作表保留该日期格式,但复制区域设置为“english US”的日期时,Excel假定源格式为“yy/mm/dd”,即使单元格格式为“dd/mm/yy”

问题就在这里: 并非我的工作簿的所有用户都可以使用本地日期格式“dd/mm/yy”,有些用户必须使用“mm/dd/yy”或“yy/mm/dd”

当本地格式并不总是不同时,如何让Excel从特定日期格式复制到本地日期格式


使用
Application.International(xlDateOrder)
检查本地格式,然后在格式不同时更改日期,这似乎是一个复杂的解决方法,我希望避免



使用
TargetSheet.Cells(TargetRow,TargetColumn)复制后,源格式为
dd/mm/yy
。Value=CDate(SourceSheet.Cells(SourceRow,SourceColumn)。Value)
格式为
dd/mm/yy
,日期为年,年份为天。

这可能取决于您复制数据的准确程度

在您的情况下,我并不完全清楚您的源数据是什么样的,但是对于使用
CDate
的类型转换日期不足以让Excel自己推断出正确的格式的情况,您应该能够使用以下方法强制进行正确的解释:

请注意,您可能会遇到需要调整此方法的数据集(例如,格式不同的数据或不适合Excel理解转换算法的特定格式的数据)

在某些情况下(可能是文本转换),您可能需要在之后应用格式。也就是说,将
Format
应用于
CDate
对象,而不是反过来。我还没有在很大程度上查阅过这篇文章,也不能提供具体的细节或例子,但我提到这篇文章是为了让大家注意一下


我也不确定这种方法在多大程度上适用于VBA中标准的“英语-美国”格式之外的源格式。

这些日期是真实日期(日期格式)还是文本字符串?对于日期,这应该不会有任何问题(因为格式只是表示形式,内部是数值)。然而,对于textstring,您可能会面临很多问题,这可能取决于您复制的确切方式。您在多大程度上使用VBA来实现这一点?如果您正在使用它,请包括相关代码。但是作为初学者,
CDate
typecasting似乎足够智能,可以捕获许多格式(并将其转换为本地格式),
format
可以解决此问题的某些变体,由于某种原因,
CDate
TargetWorksheet.Range(“A1”)。Value=CDate(format(sourcesheet.Range(“A1”),“dd/mm/yy”)
@FunThomas必须将它们作为文本字符串复制,即使函数状态格式也被复制,否则我无法解释这里发生了什么。@Vegard请将其作为答案写下来,这样我就可以接受了。
TargetSheet.Range("A1").Value = _ 
    CDate(Format(SourceSheet.Range("A1").Value, "dd/mm/yy"))