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
我把它放进去,并开始为其他公式工作,我正在更新循环,但我无法让它工作,并且出现语法错误。
【问题讨论】:
你的公式看起来很不对劲。你为什么使用MONTH
和DAY
和YEAR
?可能应该类似于=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 公式设置 - 语法问题的主要内容,如果未能解决你的问题,请参考以下文章