返回列表 上一主題 發帖

[發問] 請高人幫忙除錯,謝謝~

回復 32# GBKEE

Option Explicit

Sub copy()

   Dim Rng(1 To 2) As Range

   'With Workbooks.Open("C:\Users\patrick.HKG\Desktop\COPY.XLSM").Sheets("2012")

   With Workbooks("payment.XLSM").Sheets("2012")                     


       .Range("A1").CurrentRegion.Offset(1) = ""               




        Set Rng(1) = .[A2]                                    
        With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jenny.XLSX").Sheets("SHEET1")                 
             Set Rng(2) = .[A2:AL2]                        
       Set Rng(2) = .Range(Rng(2), .[A2].End(xlDown))

  

            Rng(2).copy Rng(1)

           .Parent.Close False                                 

        End With

        
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)               
        With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jane.XLSX").Sheets("SHEET1")     
           Set Rng(2) = .[A2:AL2]

           Set Rng(2) = .Range(Rng(2), .[AL2].End(xlDown))

           Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

            Rng(2).copy Rng(1)

           .Parent.Close False                                 
        End With

      
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)            
        With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Lily.XLSX").Sheets("sheet1")               
            Set Rng(2) = .[A2:AL2]

           Set Rng(2) = .Range(Rng(2), .[AL2].End(xlDown))

           Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
            
             Rng(2).copy Rng(1)

           .Parent.Close False                                 
        End With
      
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)              

        With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Connie.XLSX").Sheets("sheet1")   
            
             Set Rng(2) = .[A2:AL2]

           Set Rng(2) = .Range(Rng(2), .[AL2].End(xlDown))

           Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
            
             Rng(2).copy Rng(1)

           .Parent.Close False                                 

        End With
      
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)              
        With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Patrick.XLSX").Sheets("sheet1")   
            
        
           Set Rng(2) = .[A2:AL2]

           Set Rng(2) = .Range(Rng(2), .[AL2].End(xlDown))

           Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
            
             Rng(2).copy Rng(1)

           .Parent.Close False                                 

        End With
      

    End With

End Sub

Set Rng(1) = Rng(1).End(xlDown).Offset(1)      出現ERROR :RUN-TIME ERROR '1004'; APPLICATION-DEFINED OR OBJECT-DEFINED ERROR

TOP

回復 32# GBKEE


    Set Rng(1) = Rng(1).End(xlDown).Offset(1)      出現ERROR :RUN-TIME ERROR '1004'; APPLICATION-DEFINED OR OBJECT-DEFINED ERROR
請問是哪�埵陸暋D?

TOP

回復 35# GBKEE


    這麼快到底部嗎?我的資料才幾十列?

TOP

回復 35# GBKEE


    Set Rng(1) = .[A2]
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jenny.XLSX").Sheets("SHEET1")
              Set Rng(2) = .[A2:AL2]
       Set Rng(2) = .Range(Rng(2), .[e2].End(xlDown))

   

             Rng(2).copy Rng(1)

            .Parent.Close False

        End With

         
         Set Rng(1) = Rng(1).End(xlDown).Offset(1)
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jane.XLSX").Sheets("SHEET1")
            Set Rng(2) = .[A2:AL2]

            Set Rng(2) = .Range(Rng(2), .[AL2].End(xlDown))

            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

            Rng(2).copy Rng(1)

            .Parent.Close False
        End With
會不會因為之前是用A欄來計算最後一筆,但現在我改成用E欄檢查最後一筆,而 Set Rng(1) = Rng(1).End(xlDown).Offset(1)這句話是用A欄來設定?
Set Rng(1) = .[A2]
Set Rng(1) = Rng(1).End(xlDown).Offset(1)

TOP

回復 35# GBKEE


Option Explicit
Sub copy()
   Dim Rng(1 To 2) As Range
    'With Workbooks.Open("C:\Users\patrick.HKG\Desktop\COPY.XLSM").Sheets("2012")
    With Workbooks("payment.XLSM").Sheets("2012")                     
        .Range("A1").CurrentRegion.Offset(1) = ""               
        Set Rng(1) = .[a2]                                      
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jenny.XLSX").Sheets("SHEET1")   
             Set Rng(2) = .[A2:L2]
             Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))     
             Rng(2).copy Rng(1)
            .Parent.Close False                                 
         End With
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)               
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jane.XLSX").Sheets("SHEET1")     
            Set Rng(2) = .[A2:L2]
            Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))   
            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
            Rng(2).copy Rng(1)
            .Parent.Close False                                   
        End With
         Set Rng(1) = Rng(1).End(xlDown).Offset(1)              
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Lily.XLSX").Sheets("sheet1")   
             Set Rng(2) = .[A2:L2]                          
       Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))   
            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
             Rng(2).copy Rng(1)
            .Parent.Close False                                 
         End With
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)              
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Connie.XLSX").Sheets("sheet1")                 Set Rng(2) = .[A2:L2]                          
       Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))   
            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
             Rng(2).copy Rng(1)
            .Parent.Close False                  
         End With
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)              
         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Patrick.XLSX").Sheets("sheet1")   
             Set Rng(2) = .[A2:L2]                          
       Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))   
            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
             Rng(2).copy Rng(1)
            .Parent.Close False                                 
         End With
    End With
End Sub
  我用了上面的程式,但出來的result卻無法全部出來。請問哪裡需要改?

TOP

回復 39# GBKEE


    Option Explicit

Sub Ex() '程序名稱不要用 copy 這是vba方法的關鍵字


   Dim Rng(1 To 2) As Range

     With Workbooks("payment.XLSM").Sheets("2012")

         .Range("A1").CurrentRegion.Offset(1) = ""

        Set Rng(1) = .[E2]  'E欄資料有連續

       'MsgBox Rng(1).Cells(1, -3).Address '回到A欄

         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Connie.XLSX").Sheets("SHEET1")

             Set Rng(2) = .[A2:L2]

             Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

             Rng(2).copy Rng(1).Cells(1, -3)   'A欄

            .Parent.Close False

         End With

        Set Rng(1) = Rng(1).End(xlDown).Offset(1)

         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Lily.XLSX").Sheets("SHEET1")

            Set Rng(2) = .[A2:L2]

           ' **** Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))  ***** 這行不要用

            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

            Rng(2).copy Rng(1).Cells(1, -3)

            .Parent.Close False

        End With
        
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)

         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jane.XLSX").Sheets("SHEET1")

            Set Rng(2) = .[A2:L2]

           ' **** Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))  ***** 這行不要用

            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

            Rng(2).copy Rng(1).Cells(1, -3)

            .Parent.Close False

        End With
        
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)

         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jenny.XLSX").Sheets("SHEET1")

            Set Rng(2) = .[A2:L2]

           ' **** Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))  ***** 這行不要用

            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

            Rng(2).copy Rng(1).Cells(1, -3)

            .Parent.Close False

        End With
        
        Set Rng(1) = Rng(1).End(xlDown).Offset(1)     '程式run 到這裡出現問題 application-defined or object-defined error

         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Patrick.XLSX").Sheets("SHEET1")

            Set Rng(2) = .[A2:L2]

           ' **** Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))  ***** 這行不要用

            Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)

            Rng(2).copy Rng(1).Cells(1, -3)

            .Parent.Close False

        End With
End With

End Sub
最後一個出現問題
   Set Rng(1) = Rng(1).End(xlDown).Offset(1)     '程式run 到這裡出現問題 application-defined or object-defined error
另外中間有一列空格,之後的資料就無法出來。但第一次的程式,在copy 第一個excel 就算中間有一列空格,它也可以往下copy?

TOP



請問哪裡出錯了?Rng(2).copy Rng(1)

TOP

回復 42# GBKEE


    01.Option Explicit

02.Sub Ex()

03.    Dim Rng(1 To 2) As Range

04.    With Workbooks("payment.XLSM").Sheets("2012")

05.        Set Rng(1) = .[E1000].End(xlUp).Offset(, -4) '這 Rng(1)的位置

06.        With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Patrick.XLSX").Sheets("SHEET1")

07.            Set Rng(2) = .[A2:L2]

08.            Set Rng(2) = .Range(Rng(2), .[A2].End(xlDown))

09.            MsgBox .Rows.Count - Rng(2).Rows.Count < .Rows.Count - Rng(1).Row 'True: Rng(2)範圍大於 Rng(1) 就有錯誤

10.            Rng(2).Copy Rng(1)

11.            .Parent.Close False

12.        End With

13.    End With

14.End Sub
是Rng(2)範圍大於 Rng(1),但是Set Rng(1) = .[E1000].End(xlUp).Offset(, -4) '這 Rng(1)的位置 (這句的意思是不是等於由E1000開始往上檢查最後一列,OFFSET( , -4)將E欄改成A欄
Set Rng(2) = .Range(Rng(2), .[A2].End(xlDown))是否意思從A欄第二列開始往下到最後一筆?

TOP

回復 44# GBKEE


    Set Rng(1) = .[E1000].End(xlUp):  E1000開始往上檢查最後一列=> 如是 E999
那麼請問我應該如何寫這句,將它寫成set rng(1) = 當前worksheet(2012)E 欄的最後一列加1?
其實我A欄大部分都沒有資料

TOP

回復 44# GBKEE


    Set Rng(2) = .Range(Rng(2), .[A2].End(xlDown))
A欄第二列開始往下到最後一筆範圍的列數 ?? 如大於 65536-999 +1
********** 複製的資料範圍>貼上位置的範圍 ?? 那多出的資料要擺哪裡 ??****
或者
這句可否改成A欄第二列開始往下到最後一筆範圍的列數,但基於有時會隔開一列,可否加多句找到最後一筆的那列後加兩列,如果也沒有資料,才確認是最後一筆,否則繼續往下開始

TOP

        靜思自在 : 不要隨心所欲,要隨心教育自己。
返回列表 上一主題