VBA完整公式到单元格

VBA完整公式到单元格,vba,excel,Vba,Excel,我写了这行代码,把这个公式放到T2单元: Sheets("Output").Range("T2").Formula = _ "=CONCATENATE(TEXT(C2;""MM/DD/JJJJ"");""-"";TEXT(S2;""MM/DD/JJJJ""))" 但我得到了以下错误: 运行时错误“1004”: 应用程序定义或对象定义错误 如果我复制粘贴公式,则该公式有效,因此我猜这是一个语法错误。正确的代码: Sheets("Output").Range("T2").Formula

我写了这行代码,把这个公式放到T2单元:

Sheets("Output").Range("T2").Formula = _ 
     "=CONCATENATE(TEXT(C2;""MM/DD/JJJJ"");""-"";TEXT(S2;""MM/DD/JJJJ""))"
但我得到了以下错误:

运行时错误“1004”: 应用程序定义或对象定义错误

如果我复制粘贴公式,则该公式有效,因此我猜这是一个语法错误。

正确的代码:

Sheets("Output").Range("T2").Formula = _ 
     "=CONCATENATE(TEXT(C2,""MM/DD/JJJJ""),""-"",TEXT(S2,""MM/DD/JJJJ""))"
正确代码:

Sheets("Output").Range("T2").Formula = _ 
     "=CONCATENATE(TEXT(C2,""MM/DD/JJJJ""),""-"",TEXT(S2,""MM/DD/JJJJ""))"
Excel使用列表分隔符来分隔函数的参数

将分号或逗号硬编码到公式中会使代码容易受到区域设置更改的影响,因为硬编码列表分隔符字符会在修改Windows设置后立即停止工作,或者如果代码在具有不同设置的计算机上运行

通过在标准模块中添加此代码,可以使用某些Win32 API从区域设置中获取正确的字符。可以将Win32命名为:

改编自

正确的代码是:

Dim separator As String
separator = Win32.GetListSeparator

Sheets("Output").Range("T2").Formula = _ 
    "=CONCATENATE(TEXT(C2" + separator + """MM/DD/JJJJ"")" + separator + """-""" + separator + "TEXT(S2" + separator + """MM/DD/JJJJ""))"
…这真让人讨厌。VBA需要适当的StringFormat方法,以便您可以执行以下操作:

Dim separator As String
separator = Win32.GetListSeparator

Dim formatString As String
formatString = "=CONCATENATE(TEXT(C2{0}\qMM/DD/JJJJ\q){0}\q-\q{0}TEXT(S2{0}\qMM/DD/JJJJ\q))"

Sheets("Output").Range("T2").Formula = StringFormat(formatString, separator)
Excel使用列表分隔符来分隔函数的参数

将分号或逗号硬编码到公式中会使代码容易受到区域设置更改的影响,因为硬编码列表分隔符字符会在修改Windows设置后立即停止工作,或者如果代码在具有不同设置的计算机上运行

通过在标准模块中添加此代码,可以使用某些Win32 API从区域设置中获取正确的字符。可以将Win32命名为:

改编自

正确的代码是:

Dim separator As String
separator = Win32.GetListSeparator

Sheets("Output").Range("T2").Formula = _ 
    "=CONCATENATE(TEXT(C2" + separator + """MM/DD/JJJJ"")" + separator + """-""" + separator + "TEXT(S2" + separator + """MM/DD/JJJJ""))"
…这真让人讨厌。VBA需要适当的StringFormat方法,以便您可以执行以下操作:

Dim separator As String
separator = Win32.GetListSeparator

Dim formatString As String
formatString = "=CONCATENATE(TEXT(C2{0}\qMM/DD/JJJJ\q){0}\q-\q{0}TEXT(S2{0}\qMM/DD/JJJJ\q))"

Sheets("Output").Range("T2").Formula = StringFormat(formatString, separator)

如果你换了新的;对我来说,它是有效的。谢谢你的快速回复。我在帖子中添加了答案。请记住将答案标记为正确,这样问题就被标记为已回答。如果你替换了答案怎么办;对我来说,它是有效的。感谢您的快速回复。我已将答案添加到帖子中。请记住将答案标记为正确,以便将问题标记为已回答。转到区域设置,将列表分隔符更改为|管道,断开所有VBA宏。转到区域设置,将列表分隔符更改为|管道,断开所有VBA宏。