Nhờ mọi người giúp em CODE VBA Tạo nhiều sheet mới từ sheet mẫu (1 người xem)

  • Thread starter Thread starter jaycer
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

jaycer

Thành viên mới
Tham gia
27/3/23
Bài viết
20
Được thích
0
Hiện tại vấn đề cũ đã được giải quyết, nhưng em gặp phải 1 lỗi sau:
Bình thường ví dụ sheet B đang link dữ liệu từ sheet A, nếu em copy thủ công sheet A và B ra sheet A1 và B1 thì dữ liệu bên B1 sẽ link từ sheet mới A1, nhưng dùng code đoạn code trên thì toàn bộ sheet copy mới B2 B3 B4 đều link về sheet A ban đầu.
Mọi người có cách nào giúp em với ạ, file mẫu em để phía dưới
Khi copy thủ công thì dữ liệu từ sheet CVXD(2) sẽ link từ PYC(2). Nhưng khi dùng code thì Sheet CVXD2 lại link về PYC
 

File đính kèm

Lần chỉnh sửa cuối:
Em chào mọi người, em đang gặp một trường hợp như sau:
Em có 5 sheet mẫu với tên A, B, C, D, E.
Bây giờ em muốn copy n sheet trên về phía cuối danh sách sheet theo thứ tự:
A1, B1, C1, D1, E1, A2, B2, C2, D2, E2.... An, Bn, Cn, Dn, En
Hiện tại em có đoạn code như trên nhưng chỉ copy được 1 sheet và đưa lên đầu file và em còn gà mờ chưa biết sửa như thế nào, nhờ mọi người giúp đỡ ạ.
Mã:
Private Sub CommandButton1_Click()

   Dim i As Long
    Dim b As Long
    Dim sh As Worksheet
    Set sh = Sheets("NAMEFILE")
    'Dong cuoi
    b = sh.Range("A" & sh.Columns(1).Rows.Count).End(xlUp).Row
    If Sheets.Count < b + 1 Then
        For i = 1 To b
        Sheets("BB.KTXMTBNL").Copy sh
        ActiveSheet.Name = sh.Cells(i, 1).Value
        Next i
    End If
End Sub
Dạ lỗi em, em vừa gửi file mẫu lên rồi.
 
Upvote 0
...
Em có 5 sheet mẫu với tên A, B, C, D, E.
Bây giờ em muốn copy n sheet trên về phía cuối danh sách sheet theo thứ tự:
A1, B1, C1, D1, E1, A2, B2, C2, D2, E2.... An, Bn, Cn, Dn, En
...
n lấy ở đâu ra?
Giả sử có sẵn n

Set svActive = ActiveSheet
Set grpSheets = Sheets(Split("A,B,C,D,E", ",")) ' nhom sheets can ban
Set lstSheet = grpSheets(UBound(grpSheets)) ' sheet cuoi cung
For i = 1 To n ' copy n lan
For Each sh In grpSheets
sh.copy After:=lstSheet
ActiveSheet.Name = sh.Name & i
Set lstSheet = ActiveSheet
Next sh
Next i
svActive.Activate
Set svActive = Nothing
Set grpSheets = Nothing
Set lstSheet = Nothing
 
Lần chỉnh sửa cuối:
Upvote 0
em thử trên file khác, thì hình như code này đếm namerange trong sheet để copy, mà 1 sheet thì có rất nhiều namerange,
Chẳng liên quan gì đến "namerange" cả.
thành ra bị copy rất nhiều lần
Bấm chạy một lần là đủ rồi, bấm nhiều lần làm gì.
Phai khác mà không cùng cấu trúc phai cũ là tèo ngay.
 
Upvote 0
n lấy ở đâu ra?
Giả sử có sẵn n

Set svActive = ActiveSheet
Set grpSheets = Sheets(Split("A,B,C,D,E", ",")) ' nhom sheets can ban
Set lstSheet = grpSheets(UBound(grpSheets)) ' sheet cuoi cung
For i = 1 To n ' copy n lan
For Each sh In grpSheets
sh.copy After:=lstSheet
ActiveSheet.Name = sh.Name & i
Set lstSheet = ActiveSheet
Next sh
Next i
Set ActiveSheet = svActive
Em cảm ơn, em còn một vấn đề nữa vừa update anh xem giúp em với được không?
 
Upvote 0
Vụ này thành rắn mất đầu rồi, ai đó vào xem file đã làm thì chẳng hiểu vì sao lại như vậy vì các điều kiện ban đầu ở bài #1 đã bị xóa hết.
Giản dị, tôi không làm nữa:
- Tôi không hiểu cách người Việt nói tiếng Anh, update là gì? là cập nhật (mới sinh sôi nảy nở), hay thay đổi (đổi ý, muốn kết quả khác), hay chỉnh sửa (chi tiết vấn đề sai, chỉnh lại)?
- Vả lại, tôi cũng không khuyến khích chuyện làm việc này đẻ thêm chuyện khác. Code tôi viết chỉ dùng để minh họa giải thuật, việc thớt có biết dùng hay không tôi không quan tâm.
 
Upvote 0
Web KT

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

Back
Top Bottom