在VBA中,如何调用由参考公式填充的单元格的值
每天,我都会得到一个文件列表,我必须根据不同的参数向不同的人发送电子邮件(例如,如果一个文件在X天内没有移动,他们将收到一封电子邮件,如果一个文件在某个里程碑他们会得到不同的电子邮件等)
这就是我所接触到的,这可能不是最好的方法,但是我想避免在VBA中做所有的sorting逻辑,因为我不熟悉它。
首先,将列表和参数粘贴到工作表中,然后为每个自定义电子邮件分别创build一个工作表,使用一些嵌套的IF语句在正确的工作表上显示每个文件,如下所示:
=IF(AND(Broker!$Q3="N",PasteExpiringLocks!$D3<>"",PasteExpiringLocks!$B3=TODAY(),VALUE(PasteExpiringLocks!$J3)>29),PasteExpiringLocks!B3,"")
所有这些都是我想要的,每个文件都按照我的意愿分组。
接下来,我想使用VBA为每个工作表上的每个文件发送电子邮件,单个工作表上的每个文件将获得相同的一般电子邮件,除了特定参数(如名称和文件编号)的单元格引用。
Worksheets("DisclosuresCancel").Select For Each cell In Columns("N").Cells.SpecialCells(xlCellTypeConstants) If cell.Value Like "?*@?*.?*" And _ LCase(Cells(cell.Row, "P").Value) = "y" Then Set OutMail = OutApp.CreateItem(0) On Error Resume Next With OutMail .To = Cells(cell.Row, "N").Value .Cc = Cells(cell.Row, "O").Value .Subject = Cells(cell.Row, "D").Value & ", " & Cells(cell.Row, "C").Value & ", Expiring Locks - " & Date .Body = "Sample Email" .Send End With On Error GoTo 0 Set OutMail = Nothing End If Next cell
这个代码在我运行的testing文件中也能正常工作,但是,下一步给我带来了麻烦,因为在testing文件中,我使用实际值来testing电子邮件VBA代码,但实际的文件使用公式。 所以,例如,当它正在寻找.To = Cells(cell.Row, "N").Value
它只会看到引用不同表单上的电子邮件地址的公式,而不是该公式的结果。
我有一个“简单”的解决scheme,这是运行一个macros,在运行电子邮件脚本之前,在每个工作表上做一个复制>特殊粘贴…但清除所有的公式,我必须保留一个备份文件以防万一它被保存或什么的,这似乎是不知道如何正确编码的解决方法。
有一个简单的方法,当引用像Cells(cell.Row, "P").Value
的单元格值Cells(cell.Row, "P").Value
它将只评估单元格中的公式并使用结果? 我尝试使用VBA中的评估函数,但似乎并没有正确的工作,做多行。
有任何想法吗?
更新:
我做了一些改变,可能工作,但我目前正在得到一个错误91,当我尝试设置我引用变体的单元格。 以下是我在开始时如何获得VBA设置:
Option Explicit
子邮件()
Dim OutApp As Object Dim OutMail As Object Dim cell As Range Dim ato As Variant, acc As Variant, LoanNum As Variant, ExpDate As Variant, _ Milestone As Variant, BorrName As Variant, YNmail As Variant, Lofficer As Variant, LOA As Variant ato = Cells(cell.Row, "N").Value acc = Cells(cell.Row, "O").Value LoanNum = Cells(cell.Row, "D").Value ExpDate = Cells(cell.Row, "B").Value Milestone = Cells(cell.Row, "G").Value BorrName = Cells(cell.Row, "C").Value YNmail = Cells(cell.Row, "P").Value Lofficer = Cells(cell.Row, "E").Value LOA = Cells(cell.Row, "F").Value Application.ScreenUpdating = False Set OutApp = CreateObject("Outlook.Application") On Error GoTo cleanup`
之后,它会进入电子邮件代码(请参阅上文),但用它们的新variablesreplace单元格引用,例如: .Subject = LoanNum & ", " & BorrName & ", Expiring Locks - " & Date
,但是当我debugging代码停止在ato = Cells(cell.Row, "N").Value
line并给出错误91.想法?
尝试将单元格值分配给variables,然后在With OutMmail
使用它们。
Dim ato as Variant, acc as Variant, Subja as Variant, Subjb as Variant ato = Cells(cell.Row, "N").Value acc = Cells(cell.Row, "O").Value Subja = Cells(cell.Row, "D").Value Subjb = Cells(cell.Row, "C").Value
那么稍后再使用它们如下:
With OutMail .To = ato .Cc = acc .Subject = Subja & ", " & Subjb & ", Expiring Locks - " & Date .Body = "Sample Email" .Send End With