我从 VBA 代码开始,我想从 xls 文件生成一个 PDF。这个 xls 文件是一周的日程安排,每天填充 0 或 1,如下所示:
D1 | D2 | D3 | D4 | SUM | EXPECTED | VALIDATE |
---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 4 | 4 | OK |
然后,我计算总和并与预期总和进行比较。如果它相等,那么列验证是好的,否则它是 KO。
最后,我想从这个文件生成一个 PDF,当用户填写每一天(D1,..,D4)然后计算验证列并在 PDF 中导出文件,如果它是“OK”
我暂时试试这个:
Sub generate_PDF_()
'
' generate_PDF_ Macro
'
Dim saveLocation As String
saveLocation = "path/to/savefolder"
Range("AG2").Select
ActiveCell.FormulaR1C1 = "=SUM((RC[-31]:RC[-1]))"
Range("AI2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-2]=RC[-1],""OK"",""KO"")"
If Range("AI2").Select = 'OK' Then
.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=saveLocation & "/attendance_sheet" & .ActiveSheet.Name & ".pdf"
End If
End Sub
在此先感谢您的帮助
回答1
If Range("AI2").Select = 'OK' Then - 这不会像您想的那样工作,请使用“OK”而不是“OK”
使用 Worksheet_Change 事件来控制 value。 (您只能在工作表模块中使用它)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("AI2")) Is Nothing) Then
If Target.Value2="OK" Then
... ' add your code
End if
End if
End Sub
.Activesheet 没有“With Application ... end with”构造会给你一个错误。使用 Application.ActiveSheet
没有理由使用 Range.Select 方法。代替:
Range("AG2").Select
ActiveCell.FormulaR1C1 = "=SUM((RC[-31]:RC[-1]))"
利用:
Range("AG2").FormulaR1C1 = "=SUM((RC[-31]:RC[-1]))"