lỗi copy một vùng động

Liên hệ QC

phamvandunghp84

Thành viên thường trực
Tham gia
5/3/20
Bài viết
241
Được thích
12
Khi mình muốn copy một vùng cố định sang dòng cuối của một sheet khác mình code như này thì đúng.
[A1:U4].Copy Destination:=Sheets("data").[A65000].End(xlUp).Offset(1, 0)

Bây giờ mình cần copy một vùng động mình viết code như này nhưng không chạy được. Xin hỏi phải viết như nào mới đúng?

[(Cells(3,i)): (Cells(lastRow,i+6))].Copy Destination:=Sheets("data").[A65000].End(xlUp).Offset(1, 0)

đây là code mình đang có, nhờ các bạn sửa giúp. Cảm ơn các bạn !
Sub chuyen_sang_cot()
Dim i As Integer
Dim j As Integer
Dim lastRow As Integer
Dim lastColumn As Integer
Dim ws As Worksheet

Sheets("sheet1").Activate
Set ws = ActiveSheet

'find last column of row
lastColumn = ws.Range("A2:ZZ2").End(xlToRight).Column

For i = 1 To lastColumn Step 7
lastRow = ws.Cells(ws.Rows.Count, "i").End(xlUp).Row

[(Cells(3,i)): (Cells(lastRow,i+6))].Copy Destination:=Sheets("cot").[A65000].End(xlUp).Offset(1, 0)
Next i
End Sub
 
Khi mình muốn copy một vùng sang dòng cuối của một sheet khác.
Bây giờ mình cần copy một vùng động, nhờ các bạn sửa giúp. Cảm ơn các bạn !

Thử code sau, tuy nó ngắn gọn nhưng bạn muốn thêm hoặc bớt bao nhiêu cột, bao nhiêu dòng là tùy ý.
Mã:
Sub Copy_Sangsheetkhac()
    Sheet1.Range("A3").CurrentRegion.Offset(1).Copy _
    Sheet2.Range("A50000").End(xlUp).Offset(1)
End Sub
 

File đính kèm

  • Cop sang sheet khac.xlsm
    17.2 KB · Đọc: 2
Lần chỉnh sửa cuối:
Khi mình muốn copy một vùng cố định sang dòng cuối của một sheet khác mình code như này thì đúng.
[A1:U4].Copy Destination:=Sheets("data").[A65000].End(xlUp).Offset(1, 0)

Bây giờ mình cần copy một vùng động mình viết code như này nhưng không chạy được. Xin hỏi phải viết như nào mới đúng?

[(Cells(3,i)): (Cells(lastRow,i+6))].Copy Destination:=Sheets("data").[A65000].End(xlUp).Offset(1, 0)

đây là code mình đang có, nhờ các bạn sửa giúp. Cảm ơn các bạn !
Sub chuyen_sang_cot()
Dim i As Integer
Dim j As Integer
Dim lastRow As Integer
Dim lastColumn As Integer
Dim ws As Worksheet

Sheets("sheet1").Activate
Set ws = ActiveSheet

'find last column of row
lastColumn = ws.Range("A2:ZZ2").End(xlToRight).Column

For i = 1 To lastColumn Step 7
lastRow = ws.Cells(ws.Rows.Count, "i").End(xlUp).Row

[(Cells(3,i)): (Cells(lastRow,i+6))].Copy Destination:=Sheets("cot").[A65000].End(xlUp).Offset(1, 0)
Next i
End Sub
Sửa dòng trên thành dòng dưới rồi chạy thử
Mã:
'[(Cells(3,i)): (Cells(lastRow,i+6))].Copy Destination:=Sheets("cot").[A65000].End(xlUp).Offset(1, 0)
Range(Cells(3, i), Cells(lastRow, i + 6)).Copy Destination:=Sheets("cot").[A65000].End(xlUp).Offset(1, 0)
 
Khi mình muốn copy một vùng cố định sang dòng cuối của một sheet khác mình code như này thì đúng.
[A1:U4].Copy Destination:=Sheets("data").[A65000].End(xlUp).Offset(1, 0)
...
Code như thế thì hoạt động được nhưng bảo là "đung" thì chưa chắc.

Cặp dấu [ ] có nghĩa là Evaluate. Chỉ sử dụng được với hằng tại chỗ (literals). Không thể dùng với biến.
[A1:A10] có nghĩa là tính cái range A1:A10. Đó là lối viết lười của Range("A1:A10")
Range động KHÔNG THỂ dùng với [ ]

Tôi cũng chả hiểu tại sao nhiều ngừoi trên GPE chú troingj "tốc độ" của code nhưng lại khoái dùng kiểu viết lười này.
Trình dịch coi [ ] như một lệnh Evaluate. Gọi hàm này chậm hơn gọi thẳng đối tượng Range một chút.
 
Sửa dòng trên thành dòng dưới rồi chạy thử
Mã:
'[(Cells(3,i)): (Cells(lastRow,i+6))].Copy Destination:=Sheets("cot").[A65000].End(xlUp).Offset(1, 0)
Range(Cells(3, i), Cells(lastRow, i + 6)).Copy Destination:=Sheets("cot").[A65000].End(xlUp).Offset(1, 0)
Cảm ơn bạn, mình thử cái này đã chạy rất tốt
 
Cảm ơn bạn, mình thử cái này đã chạy rất tốt
Lưu ý cho thớt:
Lỗi có ba loại lỗi: lỗi ngữ pháp, lỗi code nhầm, và lỗi giải thuật.
1. lỗi ngữ pháp là gõ sai cach hạn định của trình dich. Ví dụ điển hình là [ cell(i, j) ]; cell(i, j) là một biến dối tượng, không đặt trong [ ] được
2. lỗi code nhầm là do gõ sai tên, sai số, (thay vì gõ i thì gõ thành j, thay vì 2 thì gõ thành 3, ...)
3. lỗi giải thuật là giải thuật cho ra kết quả sai.

Lỗi thứ nhất trình dịch sẽ đẩy ra ngay trước khi chạy, hoặc đang chạy thì ngừng với lời báo error ...
Lỗi thứ hai có khi bị error... nhưng cũng có khi chạy êm thắm nhưng cho ra kết qủa sai
Lỗi thứ ba thì chạy êm thắm nhưng kết quả sai

Trường hợp của bạn thì nên đặt tiêu đề là "Code báo lỗi khi copy một vùng động" và nên cho biết cái lỗi nó báo ra sao.
Khi đọc cái tiêu đề "lỗi copy một vùng động", tôi cứ ngỡ là cái lỗi thứ ba: kết quả sai.
 
Web KT

Bài viết mới nhất

Back
Top Bottom