Giúp tạo code VBA add danh sách KH (1 người xem)

Liên hệ QC

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

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
396
Được thích
91
Mọi người giúp em bài toán nhỏ này với!
Em có DSKH theo từng sheet, hiện em muốn khi click button sẽ tự động add các KH của các sheet hiện tại và sheet Tong
Mỗi sheet có thể có KH bị trùng, nên em cũng cần lọc lun (mã số KH là duy nhất)
Em gửi file mọi người xem giúp!
Thanks
 

File đính kèm

Mọi người giúp em bài toán nhỏ này với!
Em có DSKH theo từng sheet, hiện em muốn khi click button sẽ tự động add các KH của các sheet hiện tại và sheet Tong
Mỗi sheet có thể có KH bị trùng, nên em cũng cần lọc lun (mã số KH là duy nhất)
Em gửi file mọi người xem giúp!
Thanks

Bạn dùng code này
Mã:
Sub Run()
Dim sh As Worksheet
Dim i As Integer
Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Sheets
        If sh.Name <> "Tong" Then
            sh.Range("A2:B" & sh.Range("A" & Rows.Count).End(3).Row).Copy Sheets("Tong").Range("B" & Sheets("Tong").Range("B" & Rows.Count).End(3).Row + 1)
        End If
    Next
    Columns("B:C").Select
    ActiveSheet.Range("$B$1:$C$22").RemoveDuplicates Columns:=1, Header:=xlYes
For i = 2 To Sheets("Tong").Range("B" & Rows.Count).End(3).Row
    Cells(i, 1) = i - 1
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Mọi người giúp em bài toán nhỏ này với!
Em có DSKH theo từng sheet, hiện em muốn khi click button sẽ tự động add các KH của các sheet hiện tại và sheet Tong
Mỗi sheet có thể có KH bị trùng, nên em cũng cần lọc lun (mã số KH là duy nhất)
Em gửi file mọi người xem giúp!
Thanks

Xem file này.................................................
 

File đính kèm

Upvote 0
Code của QuanLuu thật hay. Mình mạnh dạn sửa lại cho hợp lý hơn:
Sub Run()
'QuanLuu1989
Dim sh As Worksheet
Dim i As Integer
Dim SoDong
Application.ScreenUpdating = False

For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Tong" Then
sh.Range("A2:B" & sh.Range("A" & Rows.Count).End(3).Row).Copy Sheets("Tong").Range("B" & Sheets("Tong").Range("B" & Rows.Count).End(3).Row + 1)​
End If​
Next
Columns("B:C").Select

SoDOng = Range("B1").End(xlDown).Row
ActiveSheet.Range("$B$1:$C$" & SoDOng).RemoveDuplicates Columns:=1, Header:=xlYes


'Danh so thu tu cot A theo cot B
For i = 2 To Sheets("Tong").Range("B" & Rows.Count).End(3).Row
Cells(i, 1) = i - 1​
Next
Application.ScreenUpdating = True​
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn mọi người, em làm theo file mẫu thì ok hết, nhưng ứng dụng vào file của em lại bị lỗi, Subcrip out of range
Mọi người xem có thể rơi vào trường hợp nào
 
Upvote 0
Cám ơn mọi người, em làm theo file mẫu thì ok hết, nhưng ứng dụng vào file của em lại bị lỗi, Subcrip out of range
Mọi người xem có thể rơi vào trường hợp nào
Bạn đã thử cả 2 code chưa? code nào báo lỗi? bạn phải gửi ảnh xem nó báo tràn bộ nhớ của biến nào (phần bôi vàng trong code)
 
Upvote 0
em gửi file mọi người sữa hộ em!
Ah, thực ra file của e còn 1 vài sheet ẩn và sheet linh tinh nữa, nhưng sheet data KH chỉ có những sheet ở trong file này!
Mọi người sửa code giúp em chỉ lấy data ở sheet này thôi nha (chỉ copy data, không copy format)
Thanks
 

File đính kèm

Upvote 0
em gửi file mọi người sữa hộ em!
Ah, thực ra file của e còn 1 vài sheet ẩn và sheet linh tinh nữa, nhưng sheet data KH chỉ có những sheet ở trong file này!
Mọi người sửa code giúp em chỉ lấy data ở sheet này thôi nha (chỉ copy data, không copy format)
Thanks

Hic, Bạn cũng làm tôi mất chút thời gian đó. Vấn đề là ở dấu cách (space bar)
Tên Sheet sai "dataKH", tên đúng là : "dataKH ". Bạn nên copy đúng tên sheet nhé, ko nên gõ lại thủ công.
mấy dòng này để làm gì vậy????

Set shNhathuong = Worksheets("NHA THUONG")
Set shChungcu = Worksheets("CHUNG CU")
Set shXe = Worksheets("XE")
Set shLonghau = Worksheets("LONG HAU")
Set shDuhoc = Worksheets("DU HOC")
 
Upvote 0
Ah e định dùng union sheet lại để xài for each sh in "cac sheet" tren ma mò chưa ra!mấy anh giúp e lun nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Ah e định dùng union sheet lại để xài for each sh in "cac sheet" tren ma mò chưa ra!mấy anh giúp e lun nhé!
Tức là bạn chỉ muốn lấy dữ liệu từ những sheet cụ thể (5 sheets trên)? thế thì tạo 1 biến string chứa tên các sheet rùi trong each sheet set xem sheet nào có tên trong string đó (dùng Instr(..))
 
Upvote 0
Hic, trình vba kém wa nên mò chưa ra, có phải như này:
dim loc as string
set loc = "a" or "b" or "c"
for each sheet in thisworkbook.worksheets
if sh.name = loc then....
chứ e đọc hàm instr ra result là số nên ko bit vận dụng sao!
Mong mấy a chỉ giáo!
ah,với lại mấy anh sửa giúp code chỉ copy value thôi dc ko.code này copy cả format
thanks
 
Upvote 0
(1) Ah, thực ra file của e còn 1 vài sheet ẩn và sheet linh tinh nữa, nhưng sheet data KH chỉ có những sheet ở trong file này!
Mọi người sửa code giúp em chỉ lấy data ở sheet này thôi nha (chỉ copy data, không copy format)

(2) Ah e định dùng union sheet lại để xài for each sh in "cac sheet" tren ma mò chưa ra!mấy anh giúp e luôn nhé!

(1) & (2) Vấn đề của bạn sẽ được giải quyết trơn tru trong VBA, nếu bạn gán tên cho nhóm các trang tính 1 cách khoa học;

Bạn thêm tiếp đầu ngữ để fân biết nhóm các trang tính
Mình ví dụ: Tất cả các trang tính có chứa DS khách hàng đều có cùng 1 tiếp đầu ngữ như K_
Như K_NhTh (hay ngắn hơn: K_NT) được đổi từ 'Nha Thuong'
Hoặc K_LgH thay cho 'Long Hau'
Chú í là tên trang tính cũng không nên quá dài, nhưng bảo đảm sự gợi nhớ nội dung của dữ liệu
như H_BgTra , H_DMuc để chỉ ra những trang tính ẩn chứa các bảng tra cứu hay danh mục (như danh mục khách theo quận huyện, thị thành,. . . )
Cần bỏ thời gian công sức chổ này trước sẽ là món đầu tư luôn có lợi về sau trong việc duy trì & bảo dưỡng CSDL của bạn khi có những fát sinh luôn có với 1 CSDL, dù là hoàn chỉnh đến đâu.

Thân ái!

 
Upvote 0
Hic, trình vba kém wa nên mò chưa ra, có phải như này:
dim loc as string
set loc = "a" or "b" or "c"
for each sheet in thisworkbook.worksheets
if sh.name = loc then....
chứ e đọc hàm instr ra result là số nên ko bit vận dụng sao!
Mong mấy a chỉ giáo!
ah,với lại mấy anh sửa giúp code chỉ copy value thôi dc ko.code này copy cả format
thanks

loc = "a,b,c..."
....
if Instr(sh.name, loc) > 0 then
.....

Bạn cũng nên tham khảo cách đặt tên sheet của bác ChanhTQ@
 
Upvote 0
em gửi file mọi người sữa hộ em!
Ah, thực ra file của e còn 1 vài sheet ẩn và sheet linh tinh nữa, nhưng sheet data KH chỉ có những sheet ở trong file này!
Mọi người sửa code giúp em chỉ lấy data ở sheet này thôi nha (chỉ copy data, không copy format)
Thanks
Cái vụ tránh lỗi này thì nên tạo 1 chuỗi danh sách sheet không cần duyệt qua. Sau đó mới chạy code cho các sheet còn Lại
 
Upvote 0
Cái vụ tránh lỗi này thì nên tạo 1 chuỗi danh sách sheet không cần duyệt qua. Sau đó mới chạy code cho các sheet còn Lại

Cái vụ này có thể tạo kẻ hở fáp luật:

Trong quá trình vận hành CSDL, fát sinh 1 trang không cần duyệt; nhưng lại quên đưa vô danh sách loại trừ; Lúc đó sẽ là tai họa!

Còn nếu tên trang tính có họ lẫn tên như N_ABC (ở đây N_ là họ của trang tính còn ABC là tên) thì kê cao gối & sẽ ngon giấc trong mọi trường hợp.
 
Upvote 0
Web KT

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

Back
Top Bottom