Tạo sheet mới tự động bằng VBA

Liên hệ QC

baihocdt

Thành viên hoạt động
Tham gia
1/2/11
Bài viết
106
Được thích
11
Chào các bạn,
Do công việc yêu cầu mỗi tuần mình phải tạo 1 sheet kế hoạch công việc để giao cho các bạn nhân viên như trong file đính kèm.
Mỗi bạn 1 file riêng nên mình làm bằng tay rất vất vả.

Mình mô tả sơ qua công việc mình đang làm hiện tại:
- Tạo 1 sheet mới, và đổi tên sheet thành tên tuần kế tiếp. Ví dụ tuần hiện tại là W4, thì tuần kế tiếp là W5.
- Copy toàn bộ nội dung ở sheet Template dán vào sheet vừa tạo.
- Đổi lại thời gian thực hiện: Ngày bắt đầu của tuần sau = ngày kết thúc của tuần trước + 1. (Các ô ngày tháng khác thì sẽ tự động chạy theo ngày bắt đầu).

Nhờ các bạn hỗ trợ viết giúp mình 1 đoạn code VBA để có thể tự động thực hiện các thao tác trên.
Mình có tạo sẳn 1 cái nút nhấn "Add new week" trên sheet Templale.
Mình muốn là khi nhấn vào nút này thì sẽ tự động tạo ra 1 sheet mới và thực hiện các thao tác như bên trên.

Mong các bạn hỗ trợ giúp.
Cảm ơn các bạn.
 

File đính kèm

  • 1- Nguyen Van A.xlsx
    28.8 KB · Đọc: 32
Chào các bạn,
Do công việc yêu cầu mỗi tuần mình phải tạo 1 sheet kế hoạch công việc để giao cho các bạn nhân viên như trong file đính kèm.
Mỗi bạn 1 file riêng nên mình làm bằng tay rất vất vả.

Mình mô tả sơ qua công việc mình đang làm hiện tại:
- Tạo 1 sheet mới, và đổi tên sheet thành tên tuần kế tiếp. Ví dụ tuần hiện tại là W4, thì tuần kế tiếp là W5.
- Copy toàn bộ nội dung ở sheet Template dán vào sheet vừa tạo.
- Đổi lại thời gian thực hiện: Ngày bắt đầu của tuần sau = ngày kết thúc của tuần trước + 1. (Các ô ngày tháng khác thì sẽ tự động chạy theo ngày bắt đầu).

Nhờ các bạn hỗ trợ viết giúp mình 1 đoạn code VBA để có thể tự động thực hiện các thao tác trên.
Mình có tạo sẳn 1 cái nút nhấn "Add new week" trên sheet Templale.
Mình muốn là khi nhấn vào nút này thì sẽ tự động tạo ra 1 sheet mới và thực hiện các thao tác như bên trên.

Mong các bạn hỗ trợ giúp.
Cảm ơn các bạn.
bạn thử dùng chức năng record marco xem có được không ?
 
Upvote 0
Mình thử rồi nhưng nó không tự tính được số tuần mới và ngày bắt đầu của tuần mới bạn.
 
Upvote 0
Chào các bạn,
Do công việc yêu cầu mỗi tuần mình phải tạo 1 sheet kế hoạch công việc để giao cho các bạn nhân viên như trong file đính kèm.
Mỗi bạn 1 file riêng nên mình làm bằng tay rất vất vả.

Mình mô tả sơ qua công việc mình đang làm hiện tại:
- Tạo 1 sheet mới, và đổi tên sheet thành tên tuần kế tiếp. Ví dụ tuần hiện tại là W4, thì tuần kế tiếp là W5.
- Copy toàn bộ nội dung ở sheet Template dán vào sheet vừa tạo.
- Đổi lại thời gian thực hiện: Ngày bắt đầu của tuần sau = ngày kết thúc của tuần trước + 1. (Các ô ngày tháng khác thì sẽ tự động chạy theo ngày bắt đầu).

Nhờ các bạn hỗ trợ viết giúp mình 1 đoạn code VBA để có thể tự động thực hiện các thao tác trên.
Mình có tạo sẳn 1 cái nút nhấn "Add new week" trên sheet Templale.
Mình muốn là khi nhấn vào nút này thì sẽ tự động tạo ra 1 sheet mới và thực hiện các thao tác như bên trên.

Mong các bạn hỗ trợ giúp.
Cảm ơn các bạn.
Thử sử dụng File:
1/ Muốn lưu File ở đâu thì copy đường dẫn Paste vào K2.
2/ Gõ số tuần hiện tại vào J2 (khi nhấn bất kỳ nút thì nó tăng tuần tiếp theo.
3/ Tên File hay tên sheet tại H2 (nó tự thay đổi theo J2).
 

File đính kèm

  • Add_Sheet_Save_File.xlsm
    23.7 KB · Đọc: 51
Upvote 0
Chào các bạn,
Do công việc yêu cầu mỗi tuần mình phải tạo 1 sheet kế hoạch công việc để giao cho các bạn nhân viên như trong file đính kèm.
Mỗi bạn 1 file riêng nên mình làm bằng tay rất vất vả.

Mình mô tả sơ qua công việc mình đang làm hiện tại:
- Tạo 1 sheet mới, và đổi tên sheet thành tên tuần kế tiếp. Ví dụ tuần hiện tại là W4, thì tuần kế tiếp là W5.
- Copy toàn bộ nội dung ở sheet Template dán vào sheet vừa tạo.
- Đổi lại thời gian thực hiện: Ngày bắt đầu của tuần sau = ngày kết thúc của tuần trước + 1. (Các ô ngày tháng khác thì sẽ tự động chạy theo ngày bắt đầu).

Nhờ các bạn hỗ trợ viết giúp mình 1 đoạn code VBA để có thể tự động thực hiện các thao tác trên.
Mình có tạo sẳn 1 cái nút nhấn "Add new week" trên sheet Templale.
Mình muốn là khi nhấn vào nút này thì sẽ tự động tạo ra 1 sheet mới và thực hiện các thao tác như bên trên.

Mong các bạn hỗ trợ giúp.
Cảm ơn các bạn.
Bạn tham khảo cái này và cải tiến thêm chút nữa. Cái này sưu tầm trên GPE và sửa lại thôi.
 

File đính kèm

  • 1- Nguyen Van A.xlsm
    31.2 KB · Đọc: 49
Lần chỉnh sửa cuối:
Upvote 0
Bạn tham khảo cái này.
Chắc là không phải tách sheet rồi. Bài 1 nêu vầy:
1/Tạo 1 sheet kế hoạch công việc để giao cho các bạn nhân viên: Có thể hiểu là sheet Template là kế hoạch của tuần kế tiếp và gửi kế hoạch này cho từng nhân viên (có nghĩa là gửi File). Vì vậy phải xuất sheet này ra thành 1 File để gửi kế hoạch cho từng nhân viên theo dõi và thực hiện. Kết quả thực hiện sẽ được bổ sung vào File này để tổng hợp và lên kế hoạch tuần tiếp theo.
2/ Tạo 1 sheet mới, và đổi tên sheet thành tên tuần vừa thực hiện: Có thể hiểu là sheet Template (kế hoạch) làm xong thì add sheet với tên sheet là kế hoạch tuần hiện tại, tiếp theo dùng sheet Template làm kế hoạch cho tuần kế tiếp.
3/ Còn đổi lại thời gian thực hiện: Ngày bắt đầu của tuần sau = ngày kết thúc của tuần trước + 1. Thì tôi quên chưa làm.

Cái này phải chờ chủ Topic giải thích thêm cho rỏ.
 
Lần chỉnh sửa cuối:
Upvote 0
Các bác cho em hỏi ké chút.
Em muốn thay đổi copy paste dưới thành copy paste value thì sửa code thế nào ạ.

Private Sub Workbook_Open()
Application.DisplayAlerts = False
Workbooks.Open ThisWorkbook.Path & "\Data.xls"
ActiveWorkbook.ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.[A1]
ActiveWorkbook.Close False
Application.DisplayAlerts = True
End Sub
 
Upvote 0
Các bác cho em hỏi ké chút.
Em muốn thay đổi copy paste dưới thành copy paste value thì sửa code thế nào ạ.

Private Sub Workbook_Open()
Application.DisplayAlerts = False
Workbooks.Open ThisWorkbook.Path & "\Data.xls"
ActiveWorkbook.ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.[A1]
ActiveWorkbook.Close False
Application.DisplayAlerts = True
End Sub
Bạn thêm mấy dòng dưới :

With ThisWorkbook.ActiveSheet
.Cells.Copy
.Cells.PasteSpecial Paste:=xlPasteValues
End With



Cụ thể:
PHP:
Private Sub Workbook_Open()
    Application.DisplayAlerts = False
     Workbooks.Open ThisWorkbook.Path & "\Data.xls"
    ActiveWorkbook.ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.[A1]
    With ThisWorkbook.ActiveSheet
        .Cells.Copy
        .Cells.PasteSpecial Paste:=xlPasteValues
    End With
    Application.CutCopyMode = False
    ActiveWorkbook.Close False
    Application.DisplayAlerts = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thêm mấy dòng dưới :

With ThisWorkbook.ActiveSheet
.Cells.Copy
.Cells.PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False


Cụ thể:
PHP:
Private Sub Workbook_Open()
    Application.DisplayAlerts = False
     Workbooks.Open ThisWorkbook.Path & "\Data.xls"
    ActiveWorkbook.ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.[A1]
    With ThisWorkbook.ActiveSheet
        .Cells.Copy
        .Cells.PasteSpecial Paste:=xlPasteValues
    End With
    Application.CutCopyMode = False
    ActiveWorkbook.Close False
    Application.DisplayAlerts = True
End Sub

Cảm ơn bạn rất nhiều.
mình chưa hiểu cách nó chọn sheet của file nguồn và file đích như thế nào.
Ví dụ mình muốn copy mảng A5:Z10 của sheet "ds" của file "Data" sang ô A5:Z10 của sheet "th" của file hiện hành thì làm thế nào.
 
Upvote 0
Cảm ơn bạn rất nhiều.
mình chưa hiểu cách nó chọn sheet của file nguồn và file đích như thế nào.
Ví dụ mình muốn copy mảng A5:Z10 của sheet "ds" của file "Data" sang ô A5:Z10 của sheet "th" của file hiện hành thì làm thế nào.
Bạn thử:
PHP:
Sub CopyDL()
    Dim wb As String
    wb = Application.GetOpenFilename("Excel Files (*.xls*), *.xls")
    With Workbooks.Open(wb)
        Sheets("ds").Range("A5:Z10").Copy ThisWorkbook.Sheets("th").Range("A5:Z10")
        .Close False
    End With
End Sub
 
Upvote 0
Bạn thử:
PHP:
Sub CopyDL()
    Dim wb As String
    wb = Application.GetOpenFilename("Excel Files (*.xls*), *.xls")
    With Workbooks.Open(wb)
        Sheets("ds").Range("A5:Z10").Copy ThisWorkbook.Sheets("th").Range("A5:Z10")
        .Close False
    End With
End Sub
Copy dữ liệu phải mở file lên copy và đóng file lại
PHP:
Sub CopyDL()
    Dim wb As String
    wb = Application.GetOpenFilename("Excel Files (*.xls*), *.xls")
    With Workbooks.Open(wb)
        Sheets("ds").Range("A5:Z10").Copy ThisWorkbook.Sheets("th").Range("A5:Z10")
        .Close False
    End With
End Sub
 
Upvote 0
Copy dữ liệu phải mở file lên copy và đóng file lại
PHP:
Sub CopyDL()
    Dim wb As String
    wb = Application.GetOpenFilename("Excel Files (*.xls*), *.xls")
    With Workbooks.Open(wb)
        Sheets("ds").Range("A5:Z10").Copy ThisWorkbook.Sheets("th").Range("A5:Z10")
        .Close False
    End With
End Sub
Mình test rồi nhưng nó báo lỗi.
Đó là lỗi gì vậy bạn?Error.JPG
 
Upvote 0
Dear các anh chị em file muốn là double click vào ô N5 thì sẽ cho ra sheet "Listwr" và hiện Form" Listphanvungsp".em đã viết code như thế này mà ko chạy được nhờ mọi người giúp đỡ xem sai ở đâu.
code em đã viết :
Private Sub Worksheet_Activate()
Dim W_NO As Variant
W_NO = Val(Trim(Worksheets("Listwr").Cells(2, 1).Value))
Worksheets("Listwr").Activate
If W_NO = L1 Then
With Listphanvungsp
.StartUpPosition = 2
.Show
End With
End If

End Sub




1680683530163.png
 

File đính kèm

  • answer.xlsm
    40.4 KB · Đọc: 7
Upvote 0
Web KT

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

Back
Top Bottom