Để 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 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: 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, CommandButtonPrivate 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
Sub MenuSheet() Call frmShowSheet.Show(0) End Sub
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 6 Sử dụngNhấ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 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
Bạn thử 2 dòng này xem PHP: Sheets.Add
ActiveSheet.Name = "Thang" & Month(Now()) & "-" & Year(Now())
TDN
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
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
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
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
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
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ể
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ì?
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ứ
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
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?
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)
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 ạ!
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
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.
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ứ ạ
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.
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!
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é |