Печать макроса либо выдает ошибку 1004, либо вылетает Excel - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время я пытаюсь создать макрос печати по нажатию кнопки, чтобы напечатать все листы, кроме двух (в настоящее время 5 листов).Кроме того, у меня есть третий лист, который я хочу, чтобы пользователь определял, сколько страниц на нем нужно распечатать.Когда я пытаюсь сделать так, чтобы он был основан на ячейке, я получаю ошибку 1004. Чтобы увидеть, работает ли остальная часть кода, и я заставляю модуль иметь определенное число, происходит сбой Excel, после того как он выполняет печать первого листа.

Sub Button1_Click()

Dim Wks As Worksheet, xcell As Integer
'The next line is where I get 1004 but when I change it to a fixed number it crashes excel'
xcell = Sheets("Print Page").Range("B12").Value
If xcell < 1 Then
    MsgBox ("Please Enter the number of pages needed")
    Exit Sub
Else
    For Each Wks In ActiveWorkbook.Worksheets
        If Wks.Visible = xlSheetVisible Then
            If Wks.Name = "Print Page" Then
            Else
                If Wks.Name = "Specs" Then
                Else
                    If Wks.Name = "Data" Then
                    Wks.PrintOut From:=1, To:=xcell
                    Else
                    Wks.PrintOut
                    End If
                End If
            End If
        End If
    Next Wks
End If
End Sub

Вероятно, есть более чистый способ написать это, о котором я не знаю.

1 Ответ

0 голосов
/ 21 февраля 2019

Не уверен, что они будут работать на Mac.Ниже будет отображаться значение> 0, если значение B12 меньше 1. Упрощенные условия вашего рабочего листа и ссылки на все объекты в рабочей книге, в которой находится макрос.

Sub Button1_Click()
    Dim Wks As Worksheet, xcell As Long, sInput As String
    With ThisWorkbook
        With .Worksheets("Print Page").Range("B12")
            xcell = CLng(.Value)
            If xcell < 1 Then
                Do
                    sInput = InputBox("Please Enter the number of pages needed:", "Pages to print", 1)
                    If Len(sInput) = 0 Then Exit Sub ' Abort if clicked Cancel/left empty and clicked OK
                    If IsNumeric(sInput) Then xcell = CLng(sInput)
                Loop Until xcell > 0
                .Value = xcell
            End If
        End With
        For Each Wks In .Worksheets
            If Wks.Visible = xlSheetVisible Then
                Select Case Wks.Name
                    Case "Print Page", "Specs" ' Skip!
                    Case "Data"
                        Wks.PrintOut From:=1, To:=xcell
                    Case Else
                        Wks.PrintOut
                End Select
            End If
        Next Wks
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...