Hỏi : Tạo một Workbook mới bằng VBA (1 người xem)

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

cokhimocaybt

Thành viên mới
Tham gia
8/11/06
Bài viết
26
Được thích
2
Xin hỏi có cách nào để thực hiện bằng lệnh VBA mà tạo một WorkBook mới hay không ( giống như trong trình đơn chọn File -> New)
làm ơn cho ví dụ cụ thể.
Cám ơn nhiều !!!
 
cokhimocaybt đã viết:
Xin hỏi có cách nào để thực hiện bằng lệnh VBA mà tạo một WorkBook mới hay không ( giống như trong trình đơn chọn File -> New)
làm ơn cho ví dụ cụ thể.
Bạn có thể tự làm ví dụ cho mình bằng cách vào:
1/ Tools/Macro/Record New Macro khi đó bộ Record đã bật thì...
2/ File -> New rồi nhấn "Stop Record" đi, sau đó Alt+F11 để xem bạn được gì nào.
Cách học ban đầu của tớ là thế, sau đó thêm sự yêu thích, đam mê là có đủ thứ để bạn tìm tòi.
 
Trời mấy cái này dùng VBA làm gì vậy. cứ dùng phím tắt cho nó nhanh, lại đỡ nặng máy
 
Muốn dùng VBA thì bạn cứ Record Macro lại rồi vào VBA xem code và từ đó chỉnh sửa lại đôi chút cho như ý. (Mình vẫn thường làm vậy để học VBA)

TDN
 
Hi... hi... đúng rồi, trừ những trường hợp bất khả kháng thì ta mới tự tay viết macro, chứ cái này đơn giản, sau khi record xong thì sẽ thấy code nó như thế này đây:
Sub Macro1()
Workbooks.Add
End Sub

ANH TUẤN
 
trandangkhoi đã viết:
Trời mấy cái này dùng VBA làm gì vậy. cứ dùng phím tắt cho nó nhanh, lại đỡ nặng máy
Thật ra, dù biết rằng có vài trường hợp không nhất thiết không cần thiết dùng VBA, nhưng khi mới bắt đầu khám phá nó thì đụng đến bất kỳ thứ gì bạn sẽ dùng đến nó, vì bạn đang tò mò mà.
Nhưng theo em đó cũng là cách tốt để tiếp cận VBA và sẽ là điểm xuất phát cho một ý tưởng(úi, bị nhiễm câu nói của Bác OkeBab roài:-= ). Tại sao không nhỉ.
Và em thì cũng không ngọai lệ.--=0
Đây là thiển ý của cá nhân em.--=0
 
Lần chỉnh sửa cuối:
Với macro trên lý ra người mới học sẽ đặt ra ngay 1 câu hỏi: Add worksheet thì sẽ thay đỗi code thế nào?
Tôi sẽ theo phương pháp suy luận mà đổi Workbooks.Add thành Worksheets.Add ... thử lại thì chính xác...
Tiếp theo sẽ thêm câu hỏi nửa: Giờ làm sao add worksheet và đặt tên cho nó luôn... Tôi tưởng tượng ra nó sẽ như thế này:
Worksheets.ADD
ActiveSheet.Name = "Tuan"
Đây đặt tên là "Tuan"
Thêm câu hỏi phức tạp hơn: Tôi bấm vào nút lệnh thì nó Add 1 sheet tên TUAN01, bấm tiếp thì Add sheet TUAN02.. vân vân... và cứ theo trình tự đó...
Vậy các cao thử nghĩ xem sẽ làm thế nào?
Mến
ANH TUẤN
 
Ban đầu em nghĩ nên làm theo đoạn code này
Mã:
Sub themsheet()
Dim Duoc As Boolean
Worksheets.ADD
On error goto datten
datten:
i = i + 1
ActiveSheet.Name = "Tuan" & right("00" & i,2)
End Sub
Nhưng thấy không được nên sửa lại như sau:
Mã:
Sub themsheet()
Dim Duoc As Boolean
    Worksheets.Add
    Do
        j = j + 1
        Duoc = True
        For i = 1 To Sheets.Count
            If Sheets(i).Name = "Tuan" & Right("00" & j, 2) Then Duoc = False
            Exit For
        Next i
    Loop Until Duoc
    ActiveSheet.Name = "Tuan" & Right("00" & j, 2)
End Sub

Có bác nào tư vấn hộ em làm sao để đoạn code 1 chạy được không ạh. Em thấy đoạn đó hay.
 
Có lý... tôi cũng nghĩ sẽ làm bằng 1 vòng lập nào đó, có điều là ko nghĩ ra... Cám ơn Bình... Cái này cho các bạn mới học tự phát triển là hay nhất...
Mến
ANH TUẤN
 
Ko ỗn Bình ơi! Code báo lỗi... Bình sửa thế nào đây?
 
Code 2 thì chắc chắn được, còn code 1 thì như em nói, em nhờ các cao thủ tư vấn hộ làm thế nào để chạy được.

Nếu bác bị lỗi code 2 bác có thể cho biết dòng nào không ? và lỗi gì??
 
Báo lổi ngay dòng:
ActiveSheet.Name = "Tuan" & Right("00" & J, 2)
Và lỗi này chĩ xuất hiện khi chèn thêm sheet thứ 3 (sheet TUAN01 và TUAN02 ko có vấn đề)
ANH TUẤN
 
Các bạn xem đoạn code này có được không?
Sub themsheet()
Worksheets.Add
Do Until j = Sheets.Count
j = j + 1
For i = 1 To Sheets.Count
If Sheets(i).Name = "Tuan" & Right("00" & j, 2) Then k = k + 1
Next i
Loop
ActiveSheet.Name = "Tuan" & Right("00" & k + 1, 2)
End Sub
 
Tốt đấy! Tôi thêm 1 code nữa là:
Sheet1.select (hay là sheet nào đó bắt đầu)... Vì nếu tạo 1 nút lệnh từ đây thì mỗi khi bấm vào nó add thêm sheet thì mình lại mất công chuyển qua sheet đầu tiên!
Cám ơn Voda! Có cảm giác như bạn chưa từng thất thủ thì phải! Rất tuyệt! Biết bao giờ tôi mới dc như thế nhỉ? Hic...
ANH TUẤN
 
Đây cũng là 1 trường hợp cụ thể cần phải xem xét... Chúng ta phát triển từ những ý tưởng đơn giản nhất, với ý đồ cho những bạn mới học tiện việc hiểu dc từng bước 1... Cái vụ kiểm tra SHEET CÓ TỒN TẠI HAY KO hình như có nói rồi thì phải... Chỉ việc thêm code vào là xong... vậy thử nghĩ xem còn vấn đề nào khác nữa có thễ gây lỗi ko?
Ah.. tôi vừa kiểm tra rất kỹ, hình như code của bạn Voda ko hề gây ra lỗi nào cả, kể cả trường hợp Sheet mang tên Tuan01 đã tồn tại trước đó.. Hay nhỉ?
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
Mình nghĩ vấn đề ở đây là làm sao cho code 1 của bạn OverAC chạy được. Có nghĩa là không dùng vòng lặp. Còn nếu dùng thì ta sang code 2 mất rồi. Đoạn code của mình mới động đậy thôi. Nhờ các bạn bổ sung thêm.
 
anhtuan1066 đã viết:
Đây cũng là 1 trường hợp cụ thể cần phải xem xét... Chúng ta phát triển từ những ý tưởng đơn giản nhất, với ý đồ cho những bạn mới học tiện việc hiểu dc từng bước 1... Cái vụ kiểm tra SHEET CÓ TỒN TẠI HAY KO hình như có nói rồi thì phải... Chỉ việc thêm code vào là xong... vậy thử nghĩ xem còn vấn đề nào khác nữa có thễ gây lỗi ko?
Ah.. tôi vừa kiểm tra rất kỹ, hình như code của bạn Voda ko hề gây ra lỗi nào cả, kể cả trường hợp Sheet mang tên Tuan01 đã tồn tại trước đó.. Hay nhỉ?
Mến
ANH TUẤN

Em lại thấy vẫn có lỗi mà.
Do tham số i được khai báo theo Static - Mỗi lần code chạy thì sẽ tăng thêm 1 đơn vị (so với lần trước đó), nếu gặp sheet trùng thì sẽ báo lỗi ngay

Bác xem nhé :

Thân!
 

File đính kèm

cần gì mà làm như thế các bạn dùng phím nóng thì có thể làm ra một sheet mới rồi "Shitf+f11" nhanh như chóp
 
Ông này chẳng hiểu gì cả... Ông thêm thử 100 sheet và đổi tên thành TUAN001, TUAN002... cho đến TUAN100 xem thử nó "nhanh như chớp" đến mức nào?
ANH TUẤN
 
à! như thế hã mình hỏi rồi
 
Các bạn thử đoạn code này xem sao:
Sub themsheet()
Static i As Integer
On Error GoTo Loi
Worksheets.Add
i = i + 1
ActiveSheet.Name = "Tuan" & Right("00" & i, 2)
Exit Sub
Loi:
Application.DisplayAlerts = False
ActiveSheet.Delete
End Sub
 
Dear Mr Hiếu.
Code của Anh chạy ổn khi file đang mở, chỉ cần chạy macro 1 lần rùi nhấn F4 là sẽ tạo được nhiều sheet, nhưng khi đóng file lại và mở lại để hcạy code thì bị báo lỗi ở đây nè: ActiveSheet.Name = "Tuan" & Right("00" & i, 2).
Bác xem lại nhen.

Dear Voda. Nếu muốn hiện bảng cho chọn số sheet cần thêm thì chỉnh code sao nhỉ????. Tất nhiên vẩn phải tuân thủ sheet thêm được đặt tên tăng dần như code của bạn.

TC.
 
Thien đã viết:
Dear Mr Hiếu.
Code của Anh chạy ổn khi file đang mở, chỉ cần chạy macro 1 lần rùi nhấn F4 là sẽ tạo được nhiều sheet, nhưng khi đóng file lại và mở lại để hcạy code thì bị báo lỗi ở đây nè: ActiveSheet.Name = "Tuan" & Right("00" & i, 2).
Bác xem lại nhen.

Dear Voda. Nếu muốn hiện bảng cho chọn số sheet cần thêm thì chỉnh code sao nhỉ????. Tất nhiên vẩn phải tuân thủ sheet thêm được đặt tên tăng dần như code của bạn.

TC.

Oái !!!!
File này không phải đưa lên làm VD tạo sheet mới, mà đưa lên VD nhằm cho thấy rằng nếu chỉ có code như thế thì File sẽ bị lỗi.
Nhu vậy là đúng ý mình rồi đấy.

Thân!
 
Nguyên văn bởi Thien
Dear Voda. Nếu muốn hiện bảng cho chọn số sheet cần thêm thì chỉnh code sao nhỉ????. Tất nhiên vẩn phải tuân thủ sheet thêm được đặt tên tăng dần như code của bạn.
Theo mình, chỉnh code như sau:
Sub themsheet()
Dim i, j, k, t As Integer
Do Until j = Sheets.Count
j = j + 1
For i = 1 To Sheets.Count
If Sheets(i).Name = "Tuan" & Right("00" & j, 2) Then k = k + 1
Next i
Loop
sosheet = InputBox("Ban muon tao bao nhieu Sheet?", "THONG BAO")
For t = 1 To sosheet
Worksheets.Add
ActiveSheet.Move after:=Sheets(Sheets.Count)
ActiveSheet.Name = "Tuan" & Right("00" & k + 1, 2)
k = k + 1
Next
End Sub
 
Vẫn chưa ỗn... giả sử tôi đang có sẳn 4 sheet: Sheet1, Tuan01, Tuan02 và Tuan04... Chạy Macro và gõ vào số 2, sẽ báo lỗi ngay...
Làm sao tránh dc đây?
ANH TUẤN
 
Nguyên văn bởi anhtuan1066
Vẫn chưa ỗn...
Bạn test dùm mình xem thử ổn chưa?
Mã:
Sub themsheet()
Dim i, j, k, t As Integer
Do Until j = Sheets.Count
j = j + 1
For i = 1 To Sheets.Count
If Sheets(i).Name = "Tuan" & Right("00" & j, 2) Then k = k + 1
Next i
Loop
sosheet = InputBox("Ban muon them bao nhieu sheet?", "THONG BAO")
Application.ScreenUpdating = False
TryAgain:
On Error GoTo loi
For t = 1 To sosheet
Worksheets.Add
ActiveSheet.Move after:=Sheets(Sheets.Count)
ActiveSheet.Name = "Tuan" & Right("00" & k + 1, 2)
k = k + 1
Next
Exit Sub
loi:
Application.DisplayAlerts = False
ActiveSheet.Delete
k = k + 1
Resume TryAgain
Application.ScreenUpdating = True
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
voda đã viết:
Bạn test dùm mình xem thử ổn chưa?

Có thể rút gọn được hơn không bác, em cảm thấy có thể đấy (tuy nhiên chưa thử), vì mấy cái code trên đã có như vậy rồi.
Bác giúp nhé.

Thân!
 
Gần như là ổn cả... Tôi nghĩ chỉ cần bẩy thêm 2 lỗi nữa, đó là: Lở như thằng điên nào cắc cớ ko nhập number vào mà nhập Text thì sao? Vả còn nữa, lở như thằng đó nó nhập số 1.000.000 hoặc 1 số nào đó lớn hơn mức cho phép thì... hi... hi...
Tôi nhập thử 1000 thì... treo máy.. nhập text vào thì báo lỗi...
Vậy đấy... có 1 tí thôi nhưng phải tốn rất nhiều công sức... Bạn nghiên cứu tiếp xem
Mến
ANH TUẤN
 
-Với Mr Okebab: Mình chưa nghĩ ra cách gì để rút gọn đoạn code trên. Bạn có thể gợi ý cho mình được không?
-Với anhtuan1066: Cám ơn những phát hiện của bạn. Đúng là không dễ viết code. Đi sâu vào những điều đơn giản, lại gặp những điều không đơn giản chút nào.
-Với trường hợp trên có thể thêm:
If IsNumeric(sosheet) = False Or sosheet > 60 Then
MsgBox "So nhap khong hop le - Chuong trinh tam dung"
Exit Sub
End If
 
OK... tạm thời là ỗn... tôi chưa tìm ra dc lỗi nào khác... Nếu có thì từ từ mình sửa tiếp... cám ơn bạn đã nhiệt tình
ANH TUẤN
 
anhtuan1066 đã viết:
Gần như là ổn cả... Tôi nghĩ chỉ cần bẩy thêm 2 lỗi nữa, đó là: Lở như thằng điên nào cắc cớ ko nhập number vào mà nhập Text thì sao? Vả còn nữa, lở như thằng đó nó nhập số 1.000.000 hoặc 1 số nào đó lớn hơn mức cho phép thì... hi... hi...
Tôi nhập thử 1000 thì... treo máy.. nhập text vào thì báo lỗi...
Vậy đấy... có 1 tí thôi nhưng phải tốn rất nhiều công sức... Bạn nghiên cứu tiếp xem
Mến
ANH TUẤN

Bác hơi nhiều chuyện đó nhen. thằng điên mới thêm 1.000.000 sheet để làm gì hả???. Cũng nhờ Bác mà Bác Voda hay "võ đá" gì đó mới cải tiến code chạy trơn tru.
He He đừng giận nhen. Nếu có thì cùng cụng vài chai là xong mà.

TC.


P/S: Cảm ơn Voda đã nhiệt tình giải đáp.
 
Là bác Vợ đá... nghĩa là bị vợ đá, ko có nhà nên lúc nào cũng rảnh rổi lên mạng dạy anh em học hỏi... Cám ơn bà vợ này! hi.. hi...
 
Các bác chỉ đoán mò thôi. Muốn biết, các bác cứ về nhà, nhờ bà xã đá giùm mấy cái, xem thử còn hơi sức mà lên đây không?!
 
Tôi đang mong dc.." đá" mà hổng có dc đây nè... Bác dc thế là phước như tiên rồi... còn than vản nỗi gì chứ... hi... hi...
Đễ tôi cố gắng nắm bắt dc suy nghĩ của mấy "thằng khùng" rồi "dịch" lại cho bác biết đễ bác có việc làm thêm với mấy cái code này nhé!
 

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

Back
Top Bottom