2012-05-14 60 views
1

我迷失了我的想法,但我看不到我在這裏做錯了什麼,但是每次運行此宏時,都會一直在列標題和實際數據之間獲得空行。正在返回的數據是正確的,但我不明白爲什麼我要在頂部增加一行!在標題和數據之間添加空白行

請給我一雙清新的眼睛!

感謝

Dim LSearchRow As Long 
Dim LCopyToRow As Long 
Dim wks As Worksheet 
On Error GoTo Err_Execute 

For Each wks In Worksheets 

LSearchRow = 4 
LCopyToRow = 4 

ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count) 
Set wksCopyTo = ActiveSheet 
wks.Rows(3).EntireRow.Copy wksCopyTo.Rows(3) 

While Len(wks.Range("A" & CStr(LSearchRow)).Value) > 0 

    If wks.Range("AB" & CStr(LSearchRow)).Value = "Yes" And wks.Range("AK" & CStr(LSearchRow)).Value = "Yes" And wks.Range("BB" & CStr(LSearchRow)).Value = "Y" Then 

     Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select 
     Selection.Copy 


     wksCopyTo.Select 
     wksCopyTo.Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select 
     wksCopyTo.Paste 

     'Move counter to next row 
     LCopyToRow = LCopyToRow + 1 
     'Go back to Sheet1 to continue searching 
     wks.Select 
    End If 
    LSearchRow = LSearchRow + 1 
Wend 

Application.CutCopyMode = False 
Range("A3").Select 
MsgBox "All matching data has been copied." 
Next wks 
    Exit Sub 
Err_Execute: 
    MsgBox "An error occurred." 
+0

沒有站出來給我,對不起。我會在那裏拋出一些'Debug.Print'調用,並通過它。 –

回答

2

我能有一個新的一雙眼睛,請!

也許是因爲你缺少Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select前worksheetname?

代碼後執行該線

ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)

當前片是新的片材,因此它會參考到新創建的片材。然後wks.Select將控制權返還給您的主表。

因此改變,要

wks.Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select 

而且你的整個子可以重新寫爲(UNTESTED

Option Explicit 

Sub Sample() 
    Dim LSearchRow As Long, LCopyToRow As Long 
    Dim wks As Worksheet, wksCopyTo As Worksheet 

    On Error GoTo Err_Execute 

    For Each wks In Worksheets 
     LSearchRow = 4: LCopyToRow = 4 

     With wks 
      ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count) 
      Set wksCopyTo = ActiveSheet 
      .Rows(3).EntireRow.Copy wksCopyTo.Rows(3) 

      While Len(Trim(.Range("A" & LSearchRow).Value)) > 0 
       If .Range("AB" & LSearchRow).Value = "Yes" And _ 
        .Range("AK" & LSearchRow).Value = "Yes" And _ 
        .Range("BB" & LSearchRow).Value = "Y" Then 

        .Rows(LSearchRow).Copy wksCopyTo.Rows(LCopyToRow) 

        LCopyToRow = LCopyToRow + 1 
       End If 
       LSearchRow = LSearchRow + 1 
      Wend 
     End With 

     MsgBox "All matching data has been copied." 
    Next wks 

    Exit Sub 

Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
+0

不,我不這麼認爲,否則它根本不會被複制。無論如何,更改選擇副本上的代碼會導致超出範圍的錯誤 – Andy5

+0

您正在關注哪些代碼?你提供的代碼與我提到的小改動或我給出的修改後的代碼? –

0

亞洲時報Siddharth時,他說:也許是因爲你缺少的是正確的worksheetname before ...

您的代碼設置爲wksCopyToActiveSheet,對wks上的數據進行測試,然後從ActiveSheet中進行選擇和複製。後來在while循環,它選擇wks - 這就是爲什麼只有第一行是空白

改變那些五行

wks.Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).copy wksCopyTo.Rows(CStr(LCopyToRow) & ":" & Str(LCopyToRow))