- Remove From My Forums
-
Вопрос
-
Issue:
I turn off printercommunication at begining of macro:
Application.PrintCommunication = False
Then I turn on after macro executes:
Application.PrintCommunication = True
Problem:
I keep getting a Run-time error 1004: Method ‘PrintCommuinication’ of object’_Application failed when the macro tries to turn the printcommunication back on (Application.PrintCommunication = True)
Any help on this would be appreciated. I just can’t seem to find the problem.
Thank you.
Bob Sutor
Ответы
-
It appears that you are using a UDF to set the print parameters. I tested using actual parameters and it works fine for me.
My printers are connected via USB cables. How are yours connected?
What occurs if you record the code to set print parameters? Are the 2 PrintCommunication lines included because they are when I record the code.
The PrintCommunication lines do not appear to be required when running the code so test without them and if it works then simply delete them. In the Remarks section of the reference I gave you it quotes «Set the
PrintCommunication property to False to speed up the execution of code that sets PageSetup properties». This might be true in theory but in practice I doubt that you will be able to tell the difference.
Regards, OssieMac
-
Помечено в качестве ответа
31 августа 2012 г. 6:38
-
Помечено в качестве ответа
Я пытаюсь распечатать счет-фактуру после создания PDF-файла, но получаю сообщение об ошибке:
Ошибка метода PrintOut класса рабочего листа
Процедура печати работает отлично, пока я не вызываю процедуру генерации pdf.
Пробовал скрывать листы, активировать, снова выбирать… но ничего не получается. Я новичок в VBA, поэтому, если кто-нибудь может объяснить мне, почему я получаю эту ошибку, было бы здорово.
Sub Print()
Dim ImprCour As String
Dim Impr2 As String
ImprCour = Application.ActivePrinter
Impr2 = "WorkCenter 6515"
Application.ActivePrinter = Impr2
Worksheets("Facture").Visible = True
Worksheets("Retour").Visible = True
Sheets(Array("Facture", "Retour")).Select
MsgBox ActiveSheet.Name
Worksheets(Array("Facture", "Retour")).PrintOut
Worksheets("Facture").Visible = xlVeryHidden
Worksheets("Retour").Visible = xlVeryHidden
Worksheets("Facture").Visible = True
Worksheets("Retour").Visible = True
Application.ActivePrinter = ImprCour
End Sub
Sub Pdf_And_Print()
Sheets(Array("Facture", "Retour")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:="/Users/stefland/Desktop/Projets/Pro/...-v.03/.../.../.../.../..." & "_" & Range("H21").Value & ".pdf", _
OpenAfterPublish:=True, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
Quality:=xlQualityStandard, _
From:=1, To:=2
Print
End Sub
I’m creating a sub for the page setup of a sheet. An error message pops up for .PrintTitleRows = Match
. The sub functions perfectly if I take out that line. I looked into this error on Microsoft support, it says «This problem occurs when there are no printer drivers installed on your computer. Excel cannot set or get page setup properties if no printer drivers are installed.»
Interestingly, the page lists other properties in the .PageSetup
class, including .CenterHeader
, .PrintQuality
, .Orientation
, and a host of other properties that are in my code. It would make more sense if this error came up for every property corresponding to the error type, but only .PrintTitleRows
does it.
Here is my code:
Sub PageSetup_General2()
Dim WS As Worksheet
Dim Match As Range
Set WS = ActiveWorkbook.ActiveSheet
Application.PrintCommunication = True
Set Match = WS.Cells.Find(What:="Source #", LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'Find Range for .PrintTitleRows
With WS.PageSetup
.CenterHeader = "&F"
.LeftFooter = "Prepared by " & Application.UserName
'Sets username, to check what your username is, go to File>Options>General
.CenterFooter = "&D"
.RightFooter = "Page &P"
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
'Sets arrow margins
.PrintQuality = 600
.Orientation = xlLandscape
'Sets Landscape
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.PrintTitleRows = Match
'Yields error: "Run-time error '1004': "Unable to set the PrintTitleRows property of the PageSetup class"
End With
End Sub
I’m messing with Application.PrintCommunication
and double checking that my printer drivers are installed, but to no avail…Any thoughts on what’s going on with this sub?
Хотя это разрешено в комментариях, ответ лучше всего так;
В PrintTitleRows
свойство, согласно документации MS:
Возвращает или задает строки, содержащие ячейки, которые должны повторяться вверху каждой страницы, в виде строки в нотации стиля A1 на языке макроса. Чтение / запись строки.
Таким образом, чтобы получить обозначение в стиле A1, используйте Range.Address
недвижимость — в вашем случае, Match.Address
. Допустим, ваш диапазон представляет собой ячейкиA5
к D5
, который вернет Match.Address
в качестве $A$5:$D$5
Вы можете ссылаться на документацию по свойству.Address здесь.
Если вы хотите вернуть адрес без $
абсолютная ссылка, установите для параметров rowAbsolute и columnAbsolute значениеFalse
, т.е. .Address False, False
который вернется A5:D5
Некоторые люди жаловались на Excel ошибка времени выполнения 1004. С самого начала эта ошибка может показаться серьезной проблемой, но по правде говоря, это больше отвлекает, чем что-либо еще. Ошибка времени выполнения 1004 может возникнуть, если Excel не получает доступ к Microsoft Visual Basic для приложений (VBA) или макросам.
Мы говорим это потому, что ошибку времени выполнения 1004 легко исправить, поэтому люди не должны терять из-за нее голову. Да, мы понимаем, что это замедляет ваш рабочий процесс, но как только вы поймете, как вращать вещи, все будет в порядке. Теперь необходимо указать, что любой, кто столкнется с этой ошибкой, не сможет использовать определенные библиотеки ресурсов. Кроме того, могут возникать проблемы с производительностью и постоянные сбои, что еще больше затрудняет использование Excel.
Что такое ошибка времени выполнения 1004 в Excel
По нашему опыту, ошибка появляется в основном, когда пользователь пытается запустить макрос MS Visual Basic для приложений. Все это является процедурой безопасности для блокировки MS VBA из Excel, но если пользователь решит предоставить ему доступ, то ошибка времени выполнения 1004, скорее всего, никогда не появится. Сообщение об ошибке может иметь несколько вариантов, а именно:
- Ошибка выполнения 1004: ошибка, определяемая приложением или объектом
- Ошибка выполнения 1004: сбой метода копирования класса листа
- Ошибка 1004: программный доступ к проекту Visual Basic не является доверенным.
Первое, что вам здесь потребуется, это открыть Параметры Excel, что очень просто. Просто откройте Microsoft Excel, затем нажмите «Файл» и выберите «Параметры».
Сразу должен появиться раздел Параметры доверия. Оттуда выберите Настройки макроса.
Наконец, нажмите на Доверять доступ к объектной модели проекта VBA, затем нажмите Ok кнопку и все тут.
Сканирование на наличие вредоносных программ
В качестве меры предосторожности вы можете также выполнить сканирование на наличие вредоносных программ, поэтому обязательно запустите свой сканер защиты от вредоносных программ и выполняйте регулярное сканирование, чтобы увидеть, не всплывает ли что-нибудь. Если ничего не происходит, мы предлагаем выполнить полную проверку на вирусы, чтобы убедиться, что все в порядке.
Microsoft Defender — отличный инструмент для этой работы, но если вам этого недостаточно, мы предлагаем использовать бесплатный автономный сканер вредоносных программ.