Add thêm sheet trong excel bằng vb

Add thêm sheet trong excel bằng vb
Để khắc phục những điều phiền toái bạn đang gặp, xin hướng dẫn các bạn một cách rất đơn giản mà rất hiệu quả, tự động cập nhật khi Sheet mới được tạo hoặc xóa sheet, chúng ta sẽ tạo ra một Form VBA đơn giản như sau nhé
Đầu tiên giả sử bạn có một Workbook khoảng 30 sheet hoặc nhiều hơn hoặc ít hơn, không quan tâm nhé

1 Mở cửa sổ soạn thảo Code (VBE)

Mở cửa sổ VBE bằng cách ALT+F11 hoặc Deverloper->VisulBasic hoặc ViewCode, bạn có thể tham khảo In Phiếu Lương Hàng Loạt hoặc VBA Căn Bản Bài 01

2 Tạo UserForm mới có tên quản lý sheet

Tại cửa sổ VBA Project, nhấp chuột phải và chọn Insert UserForm, sau đó các bạn làm tiếp theo như sau:
       

Add thêm sheet trong excel bằng vb

Sau khi vẽ xong, tiến hành đặt tên tại mục "Name" và mục "Caption" nếu có trên cửa sổ Properties như sau.
tại mục Name chính là tên của Sub, còn Caption chính là tên hiển thị của Form


Lable: Name=MENU SHEET
Textbox: Name=txtTenHH 
Listbox: Name=lstSheets
Button: Name=SHOW ALL SHEET, Caption=cmdShowSheet
UserForm: Name=FrmShowSheet, Caption=SHEET IN WORKBOOK

3 Viết code cho TextBox, ListBox, CommandButton

Private Sub txtTenHH_Change()
    If txtTenHH <> "" Then
        cmdShowSheet_Click
        For k = ListBox1.ListCount - 1 To 0 Step -1
            If Not UCase(ListBox1.List(k)) Like "*" & UCase(txtTenHH) & "*" Then
                ListBox1.RemoveItem (k)
            End If
        Next
    ElseIf txtTenHH = "" Then
        cmdShowSheet_Click
    End If
End Sub

'---Code cho ListBox(lstSheets)
Private Sub lstSheets_Click()
    Sheets(frmShowSheet.lstSheets.Value).Select
    frmShowSheet.txtTenHH.SetFocus
End Sub

'---Code cho CommandButton(cmdShowSheet)
Private Sub cmdShowSheet_Click()
    Dim Sh As Worksheet
    For Each Sh In Sheets
        frmShowSheet.lstSheets.AddItem Sh.Name
    Next
    Dim i As Long, j As Long
    With lstSheets
        For i = 0 To .ListCount - 1
            For j = .ListCount - 1 To (i + 1) Step -1
                If .List(j) = .List(i) Then
                    .RemoveItem j
                    frmShowSheet.txtTenHH.SetFocus
                End If
            Next j
        Next i
    End With
End Sub

4 Tạo một Moule mới và tạo một Sub mới có tên MenuSheet

Sub MenuSheet()
    Call frmShowSheet.Show(0)
End Sub

5 Tạo nút bấm để hiển thị Form

Ra sheet bất kỳ, vẽ một nút Shapes, nhấp chuột phải vào Shapes, chọn AsignMacro, chọn Macro có tên MenuSheet, sau đó nhấn OK

Add thêm sheet trong excel bằng vb

6 Sử dụng

Nhấp chuột vào nút SHOW ALL SHEET để hiển thị tất cả các sheet, bây giờ bạn thử tạo một sheet mới hoặc xóa sheet nào đó, và bấm lại nút SHOW ALL SHEET để xem nó cập nhật không, bạn chọn sheet bất kỳ trong ô ListBox, hoặc gõ từ khóa bất kỳ lên ô TextBox để cảm nhận

Add thêm sheet trong excel bằng vb
    
Add thêm sheet trong excel bằng vb
 

Các bạn quan tâm môn Lập Trình VBA có thể tham khảo thêm tại bài này  "Lập Trình VBA Từ Căn Bản Đến Nâng Cao", bài tiếp theo tôi sẽ hướng dẫn các bạn tùy biến MenuRibbon

Add thêm sheet trong excel bằng vb

Add thêm sheet trong excel bằng vb

  • #2

Bạn thử 2 dòng này xem

PHP:

    Sheets.Add
    ActiveSheet.Name = "Thang" & Month(Now()) & "-" & Year(Now())

TDN

Add thêm sheet trong excel bằng vb

  • #3

chào mọi người.
tôi muốn tạo 01 sheet mới bằng macro đưa vào 01 command để tạo ra sheet theo tháng _vd tạo sheet mới, đặt tên là thang3/2010.rồi qua tháng 4 lại tạo sheet và đặt là thang4/2010
tôi có thử qua thu macro để chỉnh sửa, nhưng trình độ còn yếu làm không được.
Mong mọi người không chê và giúp đỡ.Cảm ơn nhiều.

Tên sheet không thể có dấu / được đâu nha ---> Có thể thay dấu / thành dấu -
Tôi để xuất 1 code gần giống với code của thầy Phước

PHP:

With Sheets.Add
  .Name = Format(Now(), """Thang ""mm-yyyy")
End With

Add thêm sheet trong excel bằng vb

  • #4

Em dùng code sau để kiểm tra sheet có tồn tại hay chưa, nếu chưa thì thêm, ngược lại thì xóa bỏ.

Mã:

Sub AddSheet()
On Error GoTo loi
   With Sheets.Add
     .Name = Format(Now(), """Thang ""mm-yyyy")
   End With
loi:
   If Err.Number = 1004 Then
       MsgBox "Sheet " & Format(Now(), """Thang ""mm-yyyy") & " da ton tai"
       Application.DisplayAlerts = False
          ActiveSheet.Delete
       Application.DisplayAlerts = True
     Exit Sub
   End If
End Sub

Add thêm sheet trong excel bằng vb

  • #5

Em dùng code sau để kiểm tra sheet có tồn tại hay chưa, nếu chưa thì thêm, ngược lại thì xóa bỏ.

Mã:

Sub AddSheet()
On Error GoTo loi
   With Sheets.Add
     .Name = Format(Now(), """Thang ""mm-yyyy")
   End With
loi:
   If Err.Number = 1004 Then
       MsgBox "Sheet " & Format(Now(), """Thang ""mm-yyyy") & " da ton tai"
       Application.DisplayAlerts = False
          ActiveSheet.Delete
       Application.DisplayAlerts = True
     Exit Sub
   End If
End Sub

Như vậy là Doom Add sheet trước, xong mới kiểm tra sự tồn tại của sheet này ---> hơi tốn công!
Sao không kiểm tra trước, nếu tồn tại rồi thì ta... làm thinh luôn
Hàm kiểm tra sheet có tồn tại hay không

PHP:

Function SheetExist(WorkSheetName As String) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(WorkSheetName) Is Nothing
End Function

Cuối cùng là code thêm sheet:

PHP:

Sub AddSheet()
  Dim ShN As String
  ShN = Format(Now(), """Thang ""mm-yyyy")
  If Not SheetExist(ShN) Then Sheets.Add.Name = ShN
End Sub

Tôi nghĩ là gọn hơn!

Lần chỉnh sửa cuối: 16/3/10

Add thêm sheet trong excel bằng vb

  • #6

Em nghĩ việc bẫy lỗi là cần thiết nhưng thường thì đưa ra giải pháp để giải quyết vấn đề. Còn vấn đề bẫy lỗi thì tuỳ theo trường hợp và nhu cầu của tác giả; từ đó sẽ bổ sung thêm. Nhiều khi "ôm đồm" quá sẽ làm rối thêm, hi hi. Vì giải quyết cặn kẽ 1 vấn đề (dù nhỏ) đôi khi bàn hoài vẫn không hết

  • #7

Cho em đào mộ tí,
Em có 1 danh sách nhân viên, một cột là mã số nhân viên, NV001 đến NV099, các cột bên cạnh là họ tên và một vài thông tin khác
Các bác có thể viết hộ em đoạn Macro sao cho em click vào mã số nhân viên nào thì Excel sẽ mở ra 1 sheet có tên đó được không?, ví dụ click vào mã số nhân viên NV001 thì excel sẽ mở ra sheet NV001
Và khi em thêm một nhân viên với vào, ví dụ NV100, thì Excel sẽ tự động tạo thêm một sheet mới có tên là NV100 và mở luôn sheet đó ra để làm việc
Nếu chức năng tạo thêm sheet mới mà thêm theo kiểu copy từ một Sheet template thì tốt quá ạ
Em cảm ơn

Add thêm sheet trong excel bằng vb

  • #8

Cho em đào mộ tí,
Em có 1 danh sách nhân viên, một cột là mã số nhân viên, NV001 đến NV099, các cột bên cạnh là họ tên và một vài thông tin khác
Các bác có thể viết hộ em đoạn Macro sao cho em click vào mã số nhân viên nào thì Excel sẽ mở ra 1 sheet có tên đó được không?, ví dụ click vào mã số nhân viên NV001 thì excel sẽ mở ra sheet NV001
Và khi em thêm một nhân viên với vào, ví dụ NV100, thì Excel sẽ tự động tạo thêm một sheet mới có tên là NV100 và mở luôn sheet đó ra để làm việc
Nếu chức năng tạo thêm sheet mới mà thêm theo kiểu copy từ một Sheet template thì tốt quá ạ
Em cảm ơn

Mọi thứ đều có thể nếu bạn gởi file cụ thể

  • #9

Cho em đào mộ tí,
Em có 1 danh sách nhân viên, một cột là mã số nhân viên, NV001 đến NV099, các cột bên cạnh là họ tên và một vài thông tin khác
Các bác có thể viết hộ em đoạn Macro sao cho em click vào mã số nhân viên nào thì Excel sẽ mở ra 1 sheet có tên đó được không?, ví dụ click vào mã số nhân viên NV001 thì excel sẽ mở ra sheet NV001
Và khi em thêm một nhân viên với vào, ví dụ NV100, thì Excel sẽ tự động tạo thêm một sheet mới có tên là NV100 và mở luôn sheet đó ra để làm việc
Nếu chức năng tạo thêm sheet mới mà thêm theo kiểu copy từ một Sheet template thì tốt quá ạ
Em cảm ơn

Bạn không nên chen ngang bài của người khác, nên tìm chủ đề về Hyperlink (trên diễn đàn đã có nhiều bài viết rồi), hoặc tham khảo File trong bài viết của Link sau:

http://www.giaiphapexcel.com/dienda...g-1-file-excel-không-bị-mất-đường-dẫn.111134/

Nếu File trong Link trên chưa đáp ứng yêu cầu thì bạn nên mở Topic mới, với tiêu đề là tạo Hyper Link đết các sheet rồi nêu cụ thể nội dung bạn muốn làm cái gì?

  • #10

Bạn không nên chen ngang bài của người khác, nên tìm chủ đề về Hyperlink (trên diễn đàn đã có nhiều bài viết rồi), hoặc tham khảo File trong bài viết của Link sau:

http://www.giaiphapexcel.com/diendan/threads/cách-giữ-hyperlink-các-sheet-trong-cùng-1-file-excel-không-bị-mất-đường-dẫn.111134/

Nếu File trong Link trên chưa đáp ứng yêu cầu thì bạn nên mở Topic mới, với tiêu đề là tạo Hyper Link đết các sheet rồi nêu cụ thể nội dung bạn muốn làm cái gì?

8 năm rồi, họ không còn trao đổi nữa thì có gọi là chen ngang không?
Với cả ý em không phải là chỉ hyperlink đơn thuần, ý em là macro vừa tạo hyperlink sang sheet hiện có, nếu chưa có thì tạo mới sheet, cũng liên quan đến chủ đề này đấy chứ

Add thêm sheet trong excel bằng vb

  • #11

8 năm rồi, họ không còn trao đổi nữa thì có gọi là chen ngang không?
Với cả ý em không phải là chỉ hyperlink đơn thuần, ý em là macro vừa tạo hyperlink sang sheet hiện có, nếu chưa có thì tạo mới sheet, cũng liên quan đến chủ đề này đấy chứ

Có liên quan đến tạo sheet mới là được rồi
Xem file

  • CreateSheets.xlsb

    17.2 KB · Đọc: 67

  • #12

Có liên quan đến tạo sheet mới là được rồi
Xem file

Cảm ơn bác!
Bác cho em hỏi 1 chút:
1. Tại sao các ô 'Bước x" thì lại tạo được sheet mới, còn ô "a[n" thì lại không ạ?
2. Có thể tạo sheet mới bằng cách copy 1 sheet template có sẵn rồi đổi tên không bác?

Add thêm sheet trong excel bằng vb

  • #13

Cảm ơn bác!
Bác cho em hỏi 1 chút:
1. Tại sao các ô 'Bước x" thì lại tạo được sheet mới, còn ô "a[n" thì lại không ạ?
2. Có thể tạo sheet mới bằng cách copy 1 sheet template có sẵn rồi đổi tên không bác?

Trả lời câu 1: Bạn thử đổi tên sheet nào đó thành a[n xem Excel có cự nự gì không? ---> Suy ra điều cần biết
Trả lời câu 2: Có thể, với điều kiện bạn cho file lên đây rồi tính (file không cần có dữ liệu thật nhưng cấu trúc dữ liệu phải giống như thật)

  • #14

Trả lời câu 1: Bạn thử đổi tên sheet nào đó thành a[n xem Excel có cự nự gì không? ---> Suy ra điều cần biết
Trả lời câu 2: Có thể, với điều kiện bạn cho file lên đây rồi tính (file không cần có dữ liệu thật nhưng cấu trúc dữ liệu phải giống như thật)

Ah, là có kí tự đặc biệt đúng không bác?
Sáng mai em mới lên cty mới có thể gửi file đc ạ.
Nhưng bác cho em hỏi cấu trúc dữ liệu là như thế nào ạ? Chỉ là form mẫu sẵn để đỡ phải copy sau này thôi mà bác!
Cảm ơn bác nhiều ạ!

  • #15

Trả lời câu 1: Bạn thử đổi tên sheet nào đó thành a[n xem Excel có cự nự gì không? ---> Suy ra điều cần biết
Trả lời câu 2: Có thể, với điều kiện bạn cho file lên đây rồi tính (file không cần có dữ liệu thật nhưng cấu trúc dữ liệu phải giống như thật)

File đây ạ,
bác có thể sửa cho em khi tạo mới sheet thì nó copy từ Sheet NV000 rồi rename thành tên mà mình vừa click ô vào đấy ạ!
Cảm ơn bác!

  • Nhanvien.xlsb

    22.7 KB · Đọc: 30

  • #16

File đây ạ,
bác có thể sửa cho em khi tạo mới sheet thì nó copy từ Sheet NV000 rồi rename thành tên mà mình vừa click ô vào đấy ạ!
Cảm ơn bác!

Góp ý cho bạn:
1/ Nói về quản lý nhân sự thì không ai theo dõi mỗi người 1 sheet như kiểu bạn làm.
2/ Theo dõi tất tần tật các thứ trong sheet Main là đủ.
3/ Dùng 1 sheet tạm gọi là nhân viên, có thể dùng hàm để truy vấn dữ liệu từng nhân viên bên sheet Main, ngon hơn nữa thì truy vấn dữ liệu của nhân viên nào thì nó hiện cái hình vào cho hoành tráng.
4/ Ngon hơn nữa thì Scan bằng cấp, lý lịch lưu vào 1 Folder nào đó khi cần thì nó lấy danh sách vào và tạo Link, để muốn xem cái gì của người đó thì click vào Link để xem.

  • #17

Góp ý cho bạn:
1/ Nói về quản lý nhân sự thì không ai theo dõi mỗi người 1 sheet như kiểu bạn làm.
2/ Theo dõi tất tần tật các thứ trong sheet Main là đủ.
3/ Dùng 1 sheet tạm gọi là nhân viên, có thể dùng hàm để truy vấn dữ liệu từng nhân viên bên sheet Main, ngon hơn nữa thì truy vấn dữ liệu của nhân viên nào thì nó hiện cái hình vào cho hoành tráng.
4/ Ngon hơn nữa thì Scan bằng cấp, lý lịch lưu vào 1 Folder nào đó khi cần thì nó lấy danh sách vào và tạo Link, để muốn xem cái gì của người đó thì click vào Link để xem.

Vâng, cảm ơn bác!
Cái này em không phải là để quản lý nhân sự, mà làm một vài việc liên quan đến nhân sự thôi ạ!
Chứ còn hồ sơ thì vẫn phải lưu file cứng và scan file mềm chứ ạ

  • #18

Vâng, cảm ơn bác!
Cái này em không phải là để quản lý nhân sự, mà làm một vài việc liên quan đến nhân sự thôi ạ!
Chứ còn hồ sơ thì vẫn phải lưu file cứng và scan file mềm chứ ạ

Nếu vậy thì chỉ cần 2 sheet là đủ:

1/ Theo dõi tất tần tật các thứ trong sheet Main.
2/ Sử dụng 1 sheet tạm gọi là nhân viên để truy vấn.

  • #19

Em dùng code sau để kiểm tra sheet có tồn tại hay chưa, nếu chưa thì thêm, ngược lại thì xóa bỏ.

Mã:

Sub AddSheet()
On Error GoTo loi
   With Sheets.Add
     .Name = Format(Now(), """Thang ""mm-yyyy")
   End With
loi:
   If Err.Number = 1004 Then
       MsgBox "Sheet " & Format(Now(), """Thang ""mm-yyyy") & " da ton tai"
       Application.DisplayAlerts = False
          ActiveSheet.Delete
       Application.DisplayAlerts = True
     Exit Sub
   End If
End Sub

cho em hỏi đặt tên 5 sheet liên tục theo ngày thì viết sao anh?
em cảm ơn!

Add thêm sheet trong excel bằng vb

  • #20

cho em hỏi đặt tên 5 sheet liên tục theo ngày thì viết sao anh?
em cảm ơn!

tên sheets không đặt được giống nhau nhé bạn.nếu bạn muốn đặt 5 sheets thì có thể dùng vòng lặp for nhé