Выбор функции печати неправильный Тип изменения опция Excel VBA - PullRequest
0 голосов
/ 22 октября 2019

У меня есть код ниже для функции печати, созданной в VBA. Когда я выбираю «Вернуться из отпуска» в раскрывающемся меню «Тип изменения», мой макрос печати печатается как тип изменения «зарплата», а не «возврат из отпуска». Я не вижу, где я ошибся в коде или в чем причина проблемы ... Есть мысли? Заранее спасибо!

enter image description here

Sub pcf_print()

Dim ws As Worksheet
Dim datasheet As Worksheet
Dim fs As Object
Dim str As String
Dim bool As Boolean

If Len(ActiveSheet.Name) < 3 Then
    MsgBox "This worksheet is not a PCF"
    Exit Sub
End If

If Left(ActiveSheet.Name, 3) <> "PCF" Then
    MsgBox "This worksheet is not a PCF"
    Exit Sub
End If

'MsgBox Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 1 - InStr(ActiveSheet.Name, " v")) 'Right(ActiveSheet.Name, 4)
If InStr(ActiveSheet.Name, " vv") Then
    If (CDbl(Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 1 - InStr(ActiveSheet.Name, " vv") - 1)) >= 1.2 And (ActiveSheet.Range("F10") = "(select)" Or ActiveSheet.Range("F10") = "" Or ActiveSheet.Range("F10") = "(sélect.)")) Then
        MsgBox "This form has not been completed"
        Exit Sub
    End If
Else
    If (CDbl(Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 1 - InStr(ActiveSheet.Name, " v"))) < 1.2 And (ActiveSheet.Range("F9") = "(select)" Or ActiveSheet.Range("F9") = "")) Or (CDbl(Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 1 - InStr(ActiveSheet.Name, " v"))) >= 1.2 And (ActiveSheet.Range("F10") = "(select)" Or ActiveSheet.Range("F10") = "" Or ActiveSheet.Range("F10") = "(sélect.)")) Then
        MsgBox "This form has not been completed"
        Exit Sub
    End If
End If

Set datasheet = ActiveSheet

If ActiveWorkbook.Worksheets("Form Lists").Range("CorpOrStore") = "Corp" Then
    str = "Corporate"
Else
    str = "Stores"
End If

Set fs = CreateObject("Scripting.FileSystemObject")

bool = fs.FolderExists("H:\HR\Online PCF Archive\" & str & "\" & Trim(datasheet.Range("StoreDeptResult")) & "\")

If Not bool Then
    MkDir "H:\HR\Online PCF Archive\" & str & "\" & Trim(datasheet.Range("StoreDeptResult")) & "\"
End If

If InStr(ActiveSheet.Name, " vv") Then
    If CDbl(Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 1 - InStr(ActiveSheet.Name, " vv") - 1)) >= 1.2 Then
        ActiveWorkbook.SaveAs "H:\HR\Online PCF Archive\" & str & "\" & Trim(datasheet.Range("StoreDeptResult")) & "\" & Replace(datasheet.Range("F10"), "/", "_") & " for " & datasheet.Range("J17") & ", " & datasheet.Range("F17") & " effective " & Month(datasheet.Range("F12")) & "-" & Day(datasheet.Range("F12")) & "-" & Year(datasheet.Range("F12")) & ".xls"
    End If
Else
    If CDbl(Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 1 - InStr(ActiveSheet.Name, " v"))) >= 1.2 Then
        ActiveWorkbook.SaveAs "H:\HR\Online PCF Archive\" & str & "\" & Trim(datasheet.Range("StoreDeptResult")) & "\" & Replace(datasheet.Range("F10"), "/", "_") & " for " & datasheet.Range("J17") & ", " & datasheet.Range("F17") & " effective " & Month(datasheet.Range("F12")) & "-" & Day(datasheet.Range("F12")) & "-" & Year(datasheet.Range("F12")) & ".xls"
    Else
        ActiveWorkbook.SaveAs "H:\HR\Online PCF Archive\" & str & "\" & Trim(datasheet.Range("StoreDeptResult")) & "\" & datasheet.Range("F9") & " for " & datasheet.Range("J16") & ", " & datasheet.Range("F16") & " effective " & Month(datasheet.Range("F11")) & "-" & Day(datasheet.Range("F11")) & "-" & Year(datasheet.Range("F11")) & ".xls"
    End If
End If

Set ws = ActiveWorkbook.Worksheets("Payroll Forms")

If Right(ActiveSheet.Name, 5) = "v1.20" Then
    ActiveWorkbook.Worksheets("Form Lists").Unprotect "0nl1n3"
    ActiveWorkbook.Worksheets("Form Lists").Range("B8") = "A1:G76"
    ActiveWorkbook.Worksheets("Form Lists").Range("B9") = "A80:G157"
    ActiveWorkbook.Worksheets("Form Lists").Range("B10") = "A160:G225"
    ActiveWorkbook.Worksheets("Form Lists").Range("B11") = "A228:G259"
    ActiveWorkbook.Worksheets("Form Lists").Range("B12") = "A228:G259"
    ActiveWorkbook.Worksheets("Form Lists").Range("B13") = "A228:G259"
    ActiveWorkbook.Worksheets("Form Lists").Range("B14") = "A263:G338"
    ActiveWorkbook.Worksheets("Form Lists").Range("B15") = "A263:G338"
    ActiveWorkbook.Worksheets("Form Lists").Range("B16") = "A343:G367"
    ActiveWorkbook.Worksheets("Form Lists").Range("B17") = "A263:G338"
    ActiveWorkbook.Worksheets("Form Lists").Range("B18") = "A160:G225"
    ActiveWorkbook.Worksheets("Form Lists").Range("B19") = "A370:G420"
    ActiveWorkbook.Worksheets("Form Lists").Protect "0nl1n3"
End If

If Right(ActiveSheet.Name, 5) = "v1.20" Or Right(ActiveSheet.Name, 5) = "v1.21" Or str = "Corporate" Then
    ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("H2")
Else
    ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")
End If

ActiveWorkbook.Unprotect "0nl1n3"
ws.Visible = xlSheetVisible
ws.PrintOut
ws.Visible = xlSheetHidden
ActiveWorkbook.Protect "0nl1n3"

ActiveWorkbook.Close False

End Sub

1 Ответ

1 голос
/ 25 октября 2019

ОП говорит:

Когда я выбираю «Вернуться из отпуска» под выпадающим списком «Тип изменения», мой макрос печати печатается как тип изменения «зарплата», а не «возврат из отпуска»«

Предполагая, что

тип изменения« зарплата »

соответствует « печать по умолчанию » т.е.:

ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")

Кажется, что причина, по которой предоставленный код всегда печатает диапазон по умолчанию, заключается в том, что строки, определяющие вывод на печать, проверяют ActiveSheet.Name вместо значения в «Тип поля изменения и печать»

Предлагаемое решение:
Измените эти строки, чтобы отразить ячейку, где поле Тип изменения и выведите « расположен:

Замените ActiveSheet.Name на соответствующий cell.address т.е.: F10 и обновите при необходимости сравнения с« v1.20 »и« v1.21"

If Right(ActiveSheet.Name, 5) = "v1.20" _
    Or Right(ActiveSheet.Name, 5) = "v1.21" _
        Or str = "Corporate" Then
            ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("H2")

Else
    ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")

End If

Должно стать (сравнительные значения показаны в качестве справочных, они должны быть обновлены встрока с вариантами в раскрывающемся списке) :

If ActiveSheet.Range("F10").Value2 = "Return from leave" _
    Or str = "Corporate" Then
        ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("H2")

Else
    ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")

End If

Примечание :
1. Избегайте использования ActiveWorkbook и ActiveSheet, предложите заменитьвсе их экземпляры: ThisWorkbook и datasheet соответственно.
2. Кроме того, я бы предложил рассмотреть и включить использование С оператором и Выбор оператора Case на протяжении всей вашей процедуры.

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