VBA - проверить, заполнен ли диапазон, затем сгенерировать PDF - PullRequest
0 голосов
/ 29 января 2019

Я хотел бы попросить вас о помощи.У меня есть код, который генерирует PDF и работает нормально, но я хотел бы добавить условие.Пользователь должен заполнить ячейки D15, D17, D19 и D21, если они не заполнены, то он должен уведомить об этом пользователя с помощью MsgBox.Если они заполнены, то он должен продолжать генерировать файл PDF.

Я пытался поставить условие, но выдает ошибку msg Неверное количество аргументов или неверное присвоение свойства on line Set rng = .Range("D15", "D17", "D19", "D21")

Полный код:

Private Sub CBSaveasPDF_Click()
    Dim sPath As String
    Dim sFile As Variant
    Dim ws As Worksheet
    Dim rng As Range

    With Worksheets("Dashboard")
    Set rng = .Range("D15", "D17", "D19", "D21")
    End With

    On Error GoTo ErrHandle

    If IsEmpty(rng) Then
                        MsgBox ("Please fill the yellow cells")
                    Exit Sub
    Else

    sPath = ThisWorkbook.Path & "\" & Me.Range("D9") & " -" & Me.Range("D8") & " -" & Me.Range("J8") & " " & Me.Range("B4")

    sFile = Application.GetSaveAsFilename _
                (InitialFileName:=sPath, _
            FileFilter:="PDF Files (*.pdf), *.pdf", _
            Title:="Select Folder and FileName to save")
        If sFile = "False" Then
            MsgBox ("Document not saved")
            Exit Sub
        End If

        Me.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=sFile, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    End If

        Exit Sub
ErrHandle:
    MsgBox ("Document Not Saved")
End Sub

Подскажите, пожалуйста, как мне лучше определить диапазон, пожалуйста?

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы можете создать еще одну подпрограмму, подобную этой.

Sub check_range_blanks()

If IsEmpty(Range("D15").Value) Or IsEmpty(Range("D17").Value) Or IsEmpty(Range("D19").Value) Or IsEmpty(Range("D21").Value) Then
MsgBox "Range Should not be Blank"
Exit Sub
Else
Call CBSaveasPDF_Click
End If
End Sub
0 голосов
/ 29 января 2019

Основываясь на совете @Rocoders, я исправил ранэ, отредактировал условие, и оно уже отлично работает.

Private Sub CBSaveasPDF_Click()
    Dim sPath As String
    Dim sFile As Variant
    Dim ws As Worksheet
    Dim rng1 As Range
    Dim rng2 As Range
    Dim rng3 As Range
    Dim rng4 As Range

    With Worksheets("Dashboard")
    Set rng1 = .Range("D15")
    Set rng2 = .Range("D17")
    Set rng3 = .Range("D19")
    Set rng4 = .Range("D21")

    End With

    On Error GoTo ErrHandle

    If IsEmpty(rng1) Or IsEmpty(rng2) Or IsEmpty(rng3) Or IsEmpty(rng4) Then
                        MsgBox ("Please fill the yellow cells")
                    Exit Sub
    Else

    sPath = ThisWorkbook.Path & "\" & Me.Range("D9") & " -" & Me.Range("D8") & " -" & Me.Range("J8") & " " & Me.Range("B4")

    sFile = Application.GetSaveAsFilename _
                (InitialFileName:=sPath, _
            FileFilter:="PDF Files (*.pdf), *.pdf", _
            Title:="Select Folder and FileName to save")
        If sFile = "False" Then
            MsgBox ("Document not saved")
            Exit Sub
        End If

        Me.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=sFile, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    End If

        Exit Sub
ErrHandle:
    MsgBox ("Document Not Saved")
End Sub
0 голосов
/ 29 января 2019

Вы не можете использовать Range таким образом.Это либо отдельная ячейка, либо диапазон, например: «D1: D5». Поэтому лучше проверить ячейки одну за другой и определить, пуста ли она.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...