首页 > 解决方案 > 为什么我的长公式给我一个语法错误?它与“,”有关

问题描述

因此,此宏在 C 和 D 中插入 2 列。然后将这个公式一直填充到 C 列。

Option Explicit

Sub Format_dates()

    Dim ws As worksheet
    Dim lst As Long
    Dim i As Long
    Dim r As Long

    Columns("C:D").Insert Shift:=xlToRight
    Range("C2").Value = "START DATE"
    Range("D2").Value = "END DATE"

    Range("A" & Cells.Rows.Count).End(xlUp).Offset(0, 3).Select

    With ActiveSheet ' ("MASTER Business Events Calendar")

        lst = ws.Cells(.Rows.Count, 2).End(xlUp).row

        For i = 3 To lst
            r = Cells.row
            ws.Cells(i, 3) = "=IF(ISNUMBER(B&r),B&r,DATEVALUE(TRIM(LEFT(B&r,FIND("-",SUBSTITUTE(B&r,CHAR(150),"-")&"-")-1))&", "&RIGHT(B&r,4)))"
        Next i
    End With

End Sub

我不能像使用 python 那样替换公式中的变量吗?

标签: excelvba

解决方案


您需要将变量与字符串分开:

B&r

应该

B" & r & "

一切都"应该是""

ws.Cells(i, 3).Formula = "=IF(ISNUMBER(B" & r & "),B" & r & ",DATEVALUE(TRIM(LEFT(B" & r & ",FIND(""-"",SUBSTITUTE(B" & r & ",CHAR(150),""-"")&""-"")-1))&"", ""&RIGHT(B" & r & ",4)))"

另一个注意事项,您引用ws但从未设置它。它应该设置为

Set ws = ActiveSheet

然后删除 With 块。


话虽如此,循环是不需要的。

ws.Range(ws.Cells(3, 3),ws.Cells(lst,3)).Formula = "=IF(ISNUMBER(B3),B3,DATEVALUE(TRIM(LEFT(B3,FIND(""-"",SUBSTITUTE(B3,CHAR(150),""-"")&""-"")-1))&"", ""&RIGHT(B3,4)))"

该行,因为它是相对的,将正确迭代

Option Explicit

Sub Format_dates()

    Dim ws As worksheet
    Set ws = ActiveSheet


    ws.Columns("C:D").Insert Shift:=xlToRight
    ws.Range("C2").Value = "START DATE"
    ws.Range("D2").Value = "END DATE"

    Dim lst As Long
    lst = ws.Cells(ws.Rows.Count, 2).End(xlUp).row

    ws.Range(ws.Cells(3, 3),ws.Cells(lst,3)).Formula = "=IF(ISNUMBER(B3),B3,DATEVALUE(TRIM(LEFT(B3,FIND(""-"",SUBSTITUTE(B3,CHAR(150),""-"")&""-"")-1))&"", ""&RIGHT(B3,4)))"


End Sub

推荐阅读