Nhờ giải thích vì sao code này không chạy liên tục (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

langtu00189

Thành viên mới
Tham gia
29/11/08
Bài viết
25
Được thích
0
Chào mọi người, mình mới chỉ chập chững tập viết code. Mình tạo một code copy dữ liệu từ sheet này sang sheet khác nhưng lúc bấm nút Run thì không chạy được.
Mong các bạn giải thích và sửa lại giúp mình
 

File đính kèm

Chào mọi người, mình mới chỉ chập chững tập viết code. Mình tạo một code copy dữ liệu từ sheet này sang sheet khác nhưng lúc bấm nút Run thì không chạy được.
Mong các bạn giải thích và sửa lại giúp mình

Mục đích của bạn là copy cái gì vậy? Có phải từ sheet1 A6:C13 qua sheet2 với vị trí tương ứng?

Nếu x = 5 thì không xảy ra vòng lặp đâu nha, phải bằng 6 trở lên chứ?
 
Lần chỉnh sửa cuối:
Upvote 0
Chào mọi người, mình mới chỉ chập chững tập viết code. Mình tạo một code copy dữ liệu từ sheet này sang sheet khác nhưng lúc bấm nút Run thì không chạy được.
Mong các bạn giải thích và sửa lại giúp mình

Code của bạn:
Mã:
Sub tonghop()
  [COLOR=#ff0000]x = 5[/COLOR]
  Do [COLOR=#ff0000][/COLOR]While[COLOR=#ff0000] Cells(x, 1) [/COLOR]<> ""
    If [COLOR=#ff0000]Cells(x, 1) [/COLOR]= "abc" Then
      Worksheets("sheet1").Rows(x).Copy
      Worksheets("sheet2").Activate
      erow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
      ActiveSheet.Paste Destination:=Worksheets("sheet2").Rows(erow)
    End If
    Worksheets("sheet1").Activate
    x = x + 1
  Loop
End Sub
Sai mấy chổ
- x = 6 mới đúng
- Tham chiếu chung chung, thiếu tên sheet nên chẳng biết Cells(x, 1) là thuộc sheet nào
- Ngoài ra: Tại sao bạn không khai báo biến cho tường minh?
Sửa lại:
Mã:
Sub tonghop()
  Dim x As Long, erow as Long
  x = 6
  Do While Worksheets("sheet1").Cells(x, 1) <> ""
    If Worksheets("sheet1").Cells(x, 1) = "abc" Then
      Worksheets("sheet1").Rows(x).Copy
      Worksheets("sheet2").Activate
      erow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
      ActiveSheet.Paste Destination:=Worksheets("sheet2").Rows(erow)
    End If
    Worksheets("sheet1").Activate
    x = x + 1
  Loop
Tuy nhiên, nếu là tôi làm thì sẽ hơi khác chút:
Mã:
Sub tonghop()
  Dim x As Long
  Dim wks1 As Worksheet, wks2 As Worksheet
  Set wks1 = Worksheets("Sheet1")
  Set wks2 = Worksheets("Sheet2")
  x = 6
  Do While wks1.Cells(x, 1) <> ""
    If wks1.Cells(x, 1) = "abc" Then
      Worksheets("sheet1").Rows(x).Copy wks2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
    End If
    x = x + 1
  Loop
End Sub
Bạn sẽ thấy code chạy "êm ái" hơn
 
Upvote 0
Với bài của bạn, tôi sẽ dùng AutoFilter cho khỏe, vừa nhanh lại chẳng cần dùng vòng lặp!

Mã:
Sub TongHop()
With Range(Sheet1.Range("A6"), Sheet1.Range("A65536").End(xlUp))
        .AutoFilter Field:=1, Criteria1:="abc"
        .EntireRow.Copy Sheet2.Range("A65536").End(xlUp).Offset(1)
        .AutoFilter
    End With
End Sub
 
Upvote 0
cảm ơn hai bạn, mình hiện nay đang cần thiết lập một hệ thống dữ liệu file excel bằng VBA, nhưng hiểu biết của mình về vấn đề này rất ít, nếu các bạn có hứng thú với việc này hãy liên lạc với mình
 
Upvote 0

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

Back
Top Bottom