2015-04-10 2 views
0

Что я хочу сделать, если в столбце A * есть «1», тогда я хочу, чтобы макрос копировал строки, из столбца B *: L * на новый рабочий лист, а затем распечатать рабочий лист, когда он прошел весь диапазон.Печать макроса - ошибка времени выполнения 1004. Метод «Диапазон» объекта «Рабочий стол» не выполнен

Если в столбце A нет «1», я просто хочу, чтобы он продолжал отслеживать следующую строку. Хотелось бы помочь?

Sub PrintFlaggedRows() 
    Const STARTSEARCHROW As Long = 1 
    Const STARTPRINTROW As Long = 2 
    Const ENDSEARCHROW As Long = 250 
    Const STARTCOLUMN As Integer = 1 ' Column A 
    Const ENDCOLUMN As Integer = 1 ' Column A 
    Dim oldAlerts As Boolean 
    Dim oldUpdates As Boolean 
    Dim destSheet As Worksheet 
    Dim srcSheet As Worksheet 
    Dim destRange As Range 
    Dim i As Long 


    oldUpdates = Application.ScreenUpdating 
    Application.ScreenUpdating = False 
    oldAlerts = Application.DisplayAlerts 
    Application.DisplayAlerts = False 

    Set srcSheet = Sheets("Estimating & Building Quote") 
    Set destSheet = Worksheets.Add 
    Set destRange = destSheet.Cells(STARTPRINTROW, 1) 

    For i = STARTSEARCHROW To ENDSEARCHROW 

     If (srcSheet.Cells(i, 1) = 1) _ 
       Or (srcSheet.Cells(i, 1) = "1") Then 

       srcSheet.Range(Cells(i, STARTCOLUMN), Cells(i, ENDCOLUMN)).Copy 
       dstRange.PasteSpecial xlPasteValues 
       dstRange.PasteSpecial xlPasteFormats 

       Set dstRange = dstRange.Offset(0, 1) 
     End If 
    Next i 

    destSheet.Columns.AutoFit 
    destSheet.PrintOut 

    destSheet.Delete 

    Application.DisplayAlerts = oldAlerts 
    Application.ScreenUpdating = oldUpdates 

End Sub

ответ

0
srcSheet.Range(Cells(i, STARTCOLUMN), Cells(i, ENDCOLUMN)).Copy 

Здесь безоговорочным Cells() всегда относится к ActiveSheet, который не может быть то, что вы хотите.

Try:

With srcSheet 
    .Range(.Cells(i, STARTCOLUMN), .Cells(i, ENDCOLUMN)).Copy 
End With 
+0

После того, что я получаю ошибку времени выполнения '424': Object требуется. Когда я отлаживаю строку 'dstRange.PasteSpecial xlPasteValues', выделяется. – IMAbe

+0

Если вы добавите 'Option Explicit' в начало своего модуля, вы увидите, что вы объявили и назначили переменную' destRange', но строка, вызывающая ошибку, пытается использовать 'dstRange'. Всегда используя 'Option Explicit' спасает вас от этих типов ошибок. –

+0

А, спасибо. Я изучаю. :) – IMAbe

Смежные вопросы