for 循环中的 VBA 公式设置 - 语法问题

Posted

技术标签:

【中文标题】for 循环中的 VBA 公式设置 - 语法问题【英文标题】:VBA Formula Setting in a for Loop - Syntax Issue 【发布时间】:2022-01-20 14:47:31 【问题描述】:

您好 正在寻求帮助以了解为什么这在我设置的宏中不起作用。调试器导致问题的区域位于 2nd Selection.Formula 区域。

Sub PrintAllonges()
'
' PrintAllonges Macro
'
' Keyboard Shortcut: Ctrl+Shift+Y
'

Dim pdfName As String, FullName As String, Path As String, lRow As Long


Set oFSO = CreateObject("Scripting.FileSystemObject")

Path = CreateObject("WScript.Shell").specialfolders("Desktop")

' Create Desktop Folder if not exists

If oFSO.FolderExists(Path & "\Allonges") Then
Else
    MkDir Path & "\Allonges"
End If
    
'Turn off Screen Update

Sheets("MissingAllonges").Select
lRow = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox (lRow)
Sheets("AllongeTemplate").Select

Application.ScreenUpdating = False


For i = 2 To lRow

    Range("G6").Select
    Selection.Formula = "=MissingAllonges!I" & i
    Range("E11").Select
    Selection.Formula = _
        "=TEXT(MONTH(MissingAllonges!D" & i & "),""mmmm"")&"" ""&DAY(MissingAllonges!D" & i & ")&"", ""&YEAR(MissingAllonges!D" & i & ")"""
         

pdfName = Sheets("AllongeTemplate").Range("H7").Value & " - " & Sheets("AllongeTemplate").Range("G6").Value & " Allonge"
FullName = Path & "\Allonges\" & pdfName & ".pdf"


ActiveWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FullName, OpenAfterPublish:=False

Next i


Application.ScreenUpdating = True


End Sub



我把它放进去,并开始为其他公式工作,我正在更新循环,但我无法让它工作,并且出现语法错误。

【问题讨论】:

你的公式看起来很不对劲。你为什么使用MONTHDAYYEAR?可能应该类似于=TEXT(MissingAllonges!D1, "mmm d yyyy") 并且您不需要循环来编写此公式。 这个循环是因为我继续改变一个单元格的内容,对循环中的每个 i 都有不同的引用。 您是否尝试过使用更简单的公式?旁注,TEXT(MONTH(...),"mmm") 可能会得到意想不到的结果。例如=TEXT(MONTH("12/12/21"),"mmm") 每当我看到 Range.Select: Selection.Stuff 时,我都会忍不住评论说,您可以将其简化为 Range.Stuff,这不仅更易于阅读,而且速度提高了近 10 倍,减少了紧张感执行过程中的画面,提高了代码的可靠性。 @BigBen - 感谢您的帮助,刚刚开始尝试在 VBA 中做更多事情,现在感谢您的帮助 【参考方案1】:

公式末尾有多余的引号。

修正后的公式为:

.Formula = "=TEXT(MONTH(MissingAllonges!D" & i & "),""mmmm"")&"" ""&DAY(MissingAllonges!D" & i & ")&"", ""&YEAR(MissingAllonges!D" & i & ")"

但我同意@BigBen 的公式可以简化,即:

.Formula = "=TEXT(MissingAllonges!D" & i & ", ""mmmm d, yyyy"")"

【讨论】:

以上是关于for 循环中的 VBA 公式设置 - 语法问题的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中使用循环复制和粘贴时如何跳过非数字值?

Excel VBA Countifs 与循环

Excel VBA中for循环语句的用法

Excel VBA:宏无法识别循环中的 For

Excel VBA中for循环语句的用法

VBA - 如何有条件地跳过for循环迭代