Vui với lập trình VBA

Liên hệ QC
Status
Không mở trả lời sau này.

dinhanhency

Thành viên mới
Tham gia
10/1/09
Bài viết
25
Được thích
46
Đoạn code sau tạo cho chúng ta 1 dòng chữ mỗi lần chúng ta mở file excel mà ta viết lệnh lên đó.

Sau đây là ví dụ vui cho các bạn.

Các bạn mở 1 file Excel. Không thay đổi gì cả. Các bạn click phải chuột vào Sheet1 click vào ViewCode. Tiếp theo các bạn click đúp vào ThisworkBook.

Các bạn viết đoạn lệnh sau.
Mã:
   Private Sub Workbook_Open()
        On Error GoTo Err1:
        
        ActiveSheet.Shapes("WordArt 1").Select
        Selection.Delete
    
        ActiveSheet.Shapes.AddTextEffect(msoTextEffect16, "Welcome to Excel VBA on GiaiphapExcel.Com", "Arial Black", 36#, msoFalse, msoFalse, 10.5, 185.25).Select
        Application.CommandBars("WordArt").Visible = False
            
Err1:
        ActiveSheet.Shapes.AddTextEffect(msoTextEffect16, "Welcome to Excel VBA on GiaiphapExcel.Com", "Arial Black", 36#, msoFalse, msoFalse, 10.5, 185.25).Select
        Application.CommandBars("WordArt").Visible = False
End Sub

Giải thích lệnh:
Ở trong excel, nếu các bạn viết thủ tục trong mục thisworkbook với tên thủ tục là Workbook_Open thì thủ tục này tự động chạy khi bạn mở file excel đó.
các đoạn sau xóa đi 1 Drawning nếu nó đã có và tạo lại với kiểu chữ và màu chữ như các bạn thấy. Dòng chữ là Welcome to Excel VBA on GiaiphapExcel.Com.

Các bạn lưu file này thành tên tùy thích và chạy lại nó xem kết quả ra sao nhé. các bạn thử xóa dòng chữ mà các bạn nhìn thấy và lưu file đó, đóng file sau đó mở lại file xem kết quá thể nào. Thú vị phải không các bạn.
 
Đoạn code sau tạo cho chúng ta 1 dòng chữ mỗi lần chúng ta mở file excel mà ta viết lệnh lên đó.

Sau đây là ví dụ vui cho các bạn.

Các bạn mở 1 file Excel. Không thay đổi gì cả. Các bạn click phải chuột vào Sheet1 click vào ViewCode. Tiếp theo các bạn click đúp vào ThisworkBook.

Các bạn viết đoạn lệnh sau.
Mã:
   Private Sub Workbook_Open()
        On Error GoTo Err1:
        
        ActiveSheet.Shapes("WordArt 1").Select
        Selection.Delete
    
        ActiveSheet.Shapes.AddTextEffect(msoTextEffect16, "Welcome to Excel VBA on GiaiphapExcel.Com", "Arial Black", 36#, msoFalse, msoFalse, 10.5, 185.25).Select
        Application.CommandBars("WordArt").Visible = False
            
Err1:
        ActiveSheet.Shapes.AddTextEffect(msoTextEffect16, "Welcome to Excel VBA on GiaiphapExcel.Com", "Arial Black", 36#, msoFalse, msoFalse, 10.5, 185.25).Select
        Application.CommandBars("WordArt").Visible = False
End Sub

Giải thích lệnh:
Ở trong excel, nếu các bạn viết thủ tục trong mục thisworkbook với tên thủ tục là Workbook_Open thì thủ tục này tự động chạy khi bạn mở file excel đó.
các đoạn sau xóa đi 1 Drawning nếu nó đã có và tạo lại với kiểu chữ và màu chữ như các bạn thấy. Dòng chữ là Welcome to Excel VBA on GiaiphapExcel.Com.

Các bạn lưu file này thành tên tùy thích và chạy lại nó xem kết quả ra sao nhé. các bạn thử xóa dòng chữ mà các bạn nhìn thấy và lưu file đó, đóng file sau đó mở lại file xem kết quá thể nào. Thú vị phải không các bạn.
Code của bạn phải sửa lại vầy mới chuẩn:
PHP:
Private Sub Workbook_Open()
  Dim Text As String
  On Error Resume Next
  Text = "Welcome to Excel VBA on GiaiphapExcel.Com"
  With ActiveSheet
    .Shapes("GPE_WordArt").Delete
    .Shapes.AddTextEffect(15, Text, "Arial Black", 36, 0, 0, 10.5, 185.25).Name = "GPE_WordArt"
  End With
End Sub
Nếu không thì sau vài chục lần đóng, mở file sẽ có cả 1 đống WordArt nằm chồng lên nhau
Mà nếu chí có món Insert WordArt thôi thì có cái gì gọi là VUI đâu nhỉ?
 
Upvote 0
Hì, Code của bạn khá hay, Nhưng đoạn code tớ cũng có xóa nếu nó tồn tại mà.
 
Upvote 0
Hì, Code của bạn khá hay, Nhưng đoạn code tớ cũng có xóa nếu nó tồn tại mà.
Bạn thử vầy nhé:
- Copy code của bạn cho vào file mới
- Xong, đóng và lưu file
- Xong, mở lại file vừa đóng
Làm chừng vài lần đóng rồi mở file như vậy thì sẽ thấy có rất nhiều WordArt nằm chồng lên nhau.... Dùng chuột nắm kéo 1 WordArt trên cùng ra nơi khác sẽ nhìn thấy có mấy em WordArt bên dưới ngay
Chính vì lẽ đó, khi tạo WordArt, nhất định phải đặt tên cho nó. Sau đó cứ cái tên này mà xóa sẽ không bị sót
-----------------
Bạn hãy xem bài xử lý WordArt này:
http://www.giaiphapexcel.com/forum/...rt-chạy-trên-trang-excell&p=328179#post328179
Phải có chuyển động gì đó thì mới gọi là VUI chứ
 
Lần chỉnh sửa cuối:
Upvote 0
Hì, Code của bạn khá hay, Nhưng đoạn code tớ cũng có xóa nếu nó tồn tại mà.
Code của bạn xoá WordArt có tên "WordArt 1" nếu nó tồn tại.
Nhưng những lần sau tồn tại toàn là "WordArt 2", "WordArt 3", ... nên nó không xoá.

Ngoài ra, câu On Error GoTo Err1 của bạn sẽ dẫn đến Label Err1 với câu lệnh hoàn toàn giống câu lệnh chính. Vậy thì cần gì Err1 nữa? Thừa thì cứ thừa, nhưng thiếu cứ thiếu.
Chỉ cần On Error Resume Next là được.

Cho nên ndu mới sửa code của bạn lại, không thừa, không thiếu.

Ngoài ra, góp ý với bạn 1 điều:
Bạn nên xoá chữ ký mang nội dung quảng cáo đi, hoặc thay bằng chữ ký khác trong vòng 24 giờ kể từ bây giờ.
Nếu không, tức là phạm nội quy và sẽ bị xử lý.
 
Lần chỉnh sửa cuối:
Upvote 0
Code của bạn xoá WordArt có tên "WordArt 1" nếu nó tồn tại.
Nhưng những lần sau tồn tại toàn là "WordArt 2", "WordArt 3", ... nên nó không xoá.

Ngoài ra, câu On Error GoTo Err1 của bạn sẽ dẫn đến Label Err1 với câu lệnh hoàn toàn giống câu lệnh chính. Vậy thì cần gì Err1 nữa? Thừa thì cứ thừa, nhưng thiếu cứ thiếu.
Chỉ cần On Error Resume Next là được.

Cho nên ndu mới sửa code của bạn lại, không thừa, không thiếu.

Ngoài ra, góp ý với bạn 1 điều:
Bạn nên xoá chữ ký mang nội dung quảng cáo đi, hoặc thay bằng chữ ký khác trong vòng 24 giờ kể từ bây giờ.
Nếu không, tức là phạm nội quy và sẽ bị xử lý.

Hì, bạn chưa hiểu đúng ý tớ rồi.

Bạn thử vầy nhé:
- Copy code của bạn cho vào file mới
- Xong, đóng và lưu file
- Xong, mở lại file vừa đóng
Làm chừng vài lần đóng rồi mở file như vậy thì sẽ thấy có rất nhiều WordArt nằm chồng lên nhau.... Dùng chuột nắm kéo 1 WordArt trên cùng ra nơi khác sẽ nhìn thấy có mấy em WordArt bên dưới ngay
Chính vì lẽ đó, khi tạo WordArt, nhất định phải đặt tên cho nó. Sau đó cứ cái tên này mà xóa sẽ không bị sót
-----------------
Bạn hãy xem bài xử lý WordArt này:
http://www.giaiphapexcel.com/forum/showthread.php?51848-Chữ-wordart-chạy-trên-trang-excell&p=328179#post328179
Phải có chuyển động gì đó thì mới gọi là VUI chứ

Mình test code đó rồi. Ko biết MS Excel 2007 thì sao nhưng 2003 mình đang dùng thì ok
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Hì, bạn chưa hiểu đúng ý tớ rồi.
Tôi quá hiểu ý bạn, bạn viết nhiều và viết lung tung để quảng cáo. Ngay bây giờ tôi gộp 2 bài của bạn làm 1, và xoá chữ ký của bạn.

Mình test code đó rồi. Ko biết MS Excel 2007 thì sao nhưng 2003 mình đang dùng thì ok
Code sai, thì chạy ở đâu cũng sai. Tôi không test cũng biết sai, nhưng tôi cũng vẫn test trên cả 2003, và 2007.
 
Upvote 0
Tôi quá hiểu ý bạn, bạn viết nhiều và viết lung tung để quảng cáo. Ngay bây giờ tôi gộp 2 bài của bạn làm 1, và xoá chữ ký của bạn.


Code sai, thì chạy ở đâu cũng sai. Tôi không test cũng biết sai, nhưng tôi cũng vẫn test trên cả 2003, và 2007.

Bạn thế là chụp mũ tôi đấy, chưa test mà đi đi nói thế cũng được à. Bạn lập trình bao năm và lập trình được những ngôn ngữ gì mà cho mình cái quyền ko test cũng nói người khác thế.
Tớ nói luôn là code tớ đã test. Nhân đây tớ upload code lên cho mọi người kiểm tra.
http://www.mediafire.com/?3jnddk14g29h8v3

Bạn là Mode, bạn đã nghiêm túc xem code của tớ chưa? Tớ giải thích kỹ hơn nhé. Mặc định Object được tạo ra là lấy tên Object + số thứ tự nhỏ nhất. Nên chỉ cần xóa 1 tên là 1 thì lần sau giả sử có tên 2 rồi thì tối đa cũng chỉ có tên 1 và tên 2, Vì tên 1 luôn được tạo ra.

Còn tại sao lại tạo Object ở phần Error vì là do nếu lần đầu chưa có tên 1, thì sẽ lỗi. Và như thế tên 1 sẽ đượctạo ra ở phần Catch của mã lệnh.

Việc quản cáo chữ ký là 1 phần chứ không phải mục đích của tôi chỉ có vậy. Bạn chỉ nghĩ rằng tôi tham gia viết những bài bỏ công sức và với mục đích quản cáo thì tôi nghĩ bạn đánh giá mình quá cao đấy.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thế là chụp mũ tôi đấy, chưa test mà đi đi nói thế cũng được à. Bạn lập trình bao năm và lập trình được những ngôn ngữ gì mà cho mình cái quyền ko test cũng nói người khác thế.
Tớ nói luôn là code tớ đã test. Nhân đây tớ upload code lên cho mọi người kiểm tra.
http://www.mediafire.com/?3jnddk14g29h8v3

Bạn là Mode, bạn đã nghiêm túc xem code của tớ chưa? Tớ giải thích kỹ hơn nhé. Mặc định Object được tạo ra là lấy tên Object + số thứ tự nhỏ nhất. Nên chỉ cần xóa 1 tên là 1 thì lần sau giả sử có tên 2 rồi thì tối đa cũng chỉ có tên 1 và tên 2, Vì tên 1 luôn được tạo ra.

Còn tại sao lại tạo Object ở phần Error vì là do nếu lần đầu chưa có tên 1, thì sẽ lỗi. Và như thế tên 1 sẽ đượctạo ra ở phần Catch của mã lệnh.
1/ Vui thi kg thấy vui gì, nhưng tạo mấy chữ đó rất hay, cũng là 1 bài học về code.
2/ Tôi cũng mở file, save và mở lại n lần thì hình như dòng chữ đó sinh ra n-1 lần, chưa đếm hết, nó chồng lên nhau như NDU nói.
3/ Bác PTM đã xem code rồi Bác ấy mới phát biểu chớ, tự nhiên Bác ấy góp ý làm gì.
Bạn hơi nhạy cảm, nếu muốn trao đổi, truyền đạt về code hay cần hướng dẫn thì văn phong cũng nên nhẹ nhàng, chưa gì lại "đùng đùng". Còn nhiều bài về code trên GPE này chưa có trả lời thích đáng, ngôn ngữ gì cũng có. Bạn tìm và trả lời giúp thì hay hơn mà ...
 
Upvote 0
Nguyên văn bởi dinhanhency
Nhân đây tớ upload code lên cho mọi người kiểm tra.
http://www.mediafire.com/?3jnddk14g29h8v3
-Mình tải file bạn về, mở file và thấy trên sheet đã có sẵn 2 WordArt ( 4 và 5).
-Nếu tiếp tục chạy code, lệnh xóa WordArt 1 sẽ gây lỗi và code sẽ thực thi từ Err1 trở xuống, có nghĩa là lệnh xóa không bao giờ được thực hiện và nó lại tiếp tục tạo ra vô số WordArt mới theo số lần mở, đóng và lưu file.
 
Upvote 0
Việc quản cáo chữ ký là 1 phần chứ không phải mục đích của tôi chỉ có vậy. Bạn chỉ nghĩ rằng tôi tham gia viết những bài bỏ công sức và với mục đích quản cáo thì tôi nghĩ bạn đánh giá mình quá cao đấy.

Tôi không chủ định tranh cãi trong topic này, ban đầu tôi cũng chỉ muốn chỉ ra 1 chỗ sai sót như thàn hviên khác (ndu) đã chỉ ra.

Còn việc tôi gộp bài và xoá chữ ký mang nội dung quảng cáo thì không bàn cãi:
1. Chữ ký quảng cáo là phạm quy
2. Bạn thử tìm lại bài viết của mình, tôi đã xoá 4, 5 bài viết tào lao vô giá trị chỉ nhằm mục đích quảng cáo. Chỉ chừa lại 1 vài bài tạm gọi là có bỏ công sức.
3. Tôi có quyền đó.


Bạn thế là chụp mũ tôi đấy, chưa test mà đi đi nói thế cũng được à. Bạn lập trình bao năm và lập trình được những ngôn ngữ gì mà cho mình cái quyền ko test cũng nói người khác thế.
Tớ nói luôn là code tớ đã test. Nhân đây tớ upload code lên cho mọi người kiểm tra.

Tôi không chụp mũ. Cả ndu cũng đã test và kết luận như vậy. Tôi dù thấy sai nhưng vẫn test để kiểm chứng, và đã test cả trên 2003 và 2007 (bạn đọc lại bài của tôi sẽ thấy, và cả đoạn bạn trích của tôi). Bây giờ tôi test lại bằng chính file của bạn đây:

Khi mở file lên thì thấy như thế này:

AddWordArt01.jpg

Nhưng khi kéo nó ra chỗ khác thì thấy 2 cái thế này:


AddWordArt02.jpg


Nếu xem trên Namebox sẽ thấy 1 cái là "WordArt 4" và 1 cái là "WordArt 5", không có cái nào là "WordArt 1"

Nếu lưu và đóng file lại, khi mở lên sẽ có 3 cái. Mỗi lần mở lên sẽ có thêm 1 cái.


Còn tại sao lại tạo Object ở phần Error vì là do nếu lần đầu chưa có tên 1, thì sẽ lỗi. Và như thế tên 1 sẽ đượctạo ra ở phần Catch của mã lệnh.

Bạn thử thay On Error GoTo Err1 bằng On Error Resume Next, và xoá Err1 đi chưa? Chạy y như cũ, vẫn tạo ra 1 cái mới.

Tôi lập trình chưa được bao lâu, nhưng tôi biết rằng nếu gặp lỗi mà GoTo 1 Label, thì Label đó phải làm 1 cái gì khác hơn câu lệnh kế tiếp, chứ nếu giống y thì không cần Label, chỉ cần Resume Next.
 
Upvote 0
Tôi không chủ định tranh cãi trong topic này, ban đầu tôi cũng chỉ muốn chỉ ra 1 chỗ sai sót như thàn hviên khác (ndu) đã chỉ ra.

Còn việc tôi gộp bài và xoá chữ ký mang nội dung quảng cáo thì không bàn cãi:
1. Chữ ký quảng cáo là phạm quy
2. Bạn thử tìm lại bài viết của mình, tôi đã xoá 4, 5 bài viết tào lao vô giá trị chỉ nhằm mục đích quảng cáo. Chỉ chừa lại 1 vài bài tạm gọi là có bỏ công sức.
3. Tôi có quyền đó.




Tôi không chụp mũ. Cả ndu cũng đã test và kết luận như vậy. Tôi dù thấy sai nhưng vẫn test để kiểm chứng, và đã test cả trên 2003 và 2007 (bạn đọc lại bài của tôi sẽ thấy, và cả đoạn bạn trích của tôi). Bây giờ tôi test lại bằng chính file của bạn đây:

Khi mở file lên thì thấy như thế này:

View attachment 69062

Nhưng khi kéo nó ra chỗ khác thì thấy 2 cái thế này:


View attachment 69063


Nếu xem trên Namebox sẽ thấy 1 cái là "WordArt 4" và 1 cái là "WordArt 5", không có cái nào là "WordArt 1"

Nếu lưu và đóng file lại, khi mở lên sẽ có 3 cái. Mỗi lần mở lên sẽ có thêm 1 cái.




Bạn thử thay On Error GoTo Err1 bằng On Error Resume Next, và xoá Err1 đi chưa? Chạy y như cũ, vẫn tạo ra 1 cái mới.

Tôi lập trình chưa được bao lâu, nhưng tôi biết rằng nếu gặp lỗi mà GoTo 1 Label, thì Label đó phải làm 1 cái gì khác hơn câu lệnh kế tiếp, chứ nếu giống y thì không cần Label, chỉ cần Resume Next.

Nếu thế thì xoá hết đi. Với tôi lúc viết chẳng bao giờ nghĩ là để tào lao, chẳng lẽ diễn đàn này chỉ có để tào lao thôi sao.

Có lẽ mình good bye cái ao làng với những người quản lý như thế này.
 
Upvote 0
Tôi lập trình chưa được bao lâu, nhưng tôi biết rằng nếu gặp lỗi mà GoTo 1 Label, thì Label đó phải làm 1 cái gì khác hơn câu lệnh kế tiếp, chứ nếu giống y thì không cần Label, chỉ cần Resume Next.

Ý tưởng từng người khác nhau. Có những người viết lệnh khó hiểu. Label error bắt lỗi ở chỗ khác thì sao?
 
Upvote 0
Bạn thế là chụp mũ tôi đấy, chưa test mà đi đi nói thế cũng được à. Bạn lập trình bao năm và lập trình được những ngôn ngữ gì mà cho mình cái quyền ko test cũng nói người khác thế.
Tớ nói luôn là code tớ đã test. Nhân đây tớ upload code lên cho mọi người kiểm tra.
http://www.mediafire.com/?3jnddk14g29h8v3
.
Cái code đó cùng lắm là dùng record macro mà ra thôi... có lẽ thế nên bạn không thể hiểu được nó đang bị lỗi gì
Thôi thì tôi thu hình gữi cho bạn xem vậy:

[video=youtube;qx69fZmfm0E]http://www.youtube.com/watch?v=qx69fZmfm0E[/video]

Tức là cái WordArt ấy chẳng xóa gì cả, nó nằm đè lên nhau... và cứ mỗi lần đóng lưu file rồi mở lại thì code lại tạo thêm 1 WordArt! Xem video clip trên, bạn thấy sao? Đóng mở file nhiều lần, đến 1 ngày nào đó chắc khỏi mở được file luôn (vì quá nặng)
Nói thêm: Có những code không cần test cũng biết trước là lỗi gì rồi, nhất là đối với cao thủ như thầy ptm0412
 
Upvote 0
Cái code đó cùng lắm là dùng record macro mà ra thôi... có lẽ thế nên bạn không thể hiểu được nó đang bị lỗi gì
Thôi thì tôi thu hình gữi cho bạn xem vậy:

[video=youtube;qx69fZmfm0E]http://www.youtube.com/watch?v=qx69fZmfm0E[/video]

Tức là cái WordArt ấy chẳng xóa gì cả, nó nằm đè lên nhau... và cứ mỗi lần đóng lưu file rồi mở lại thì code lại tạo thêm 1 WordArt! Xem video clip trên, bạn thấy sao? Đóng mở file nhiều lần, đến 1 ngày nào đó chắc khỏi mở được file luôn (vì quá nặng)
Nói thêm: Có những code không cần test cũng biết trước là lỗi gì rồi, nhất là đối với cao thủ như thầy ptm0412

Code thì đang có đè chồng, nhưng đọc code mà không hiểu ý tưởng sao. Đây như chủ để của nó. Nên việc bạn nói code quá nặng thì chỉ là mang tính đả kích. Với ứng dụng lớn thì xem việc đó là bắt buộc nhưng với cái trò cho vui thì cái đó có cần như bạn nói ko?

Ở đây có nhiều người quá tự đại thì phải.
 
Upvote 0
Theo mình nghĩ, thì vấn đề này không nên tranh luận nữa. Ai đúng, ai sai mọi người nhìn vào sẽ hiểu. Một người bảo thủ thì cho dù gì đi chăng nữa họ cũng không nhận được sự góp ý của mọi người và mình tin rằng trong cuộc sống những người như vậy sẽ không thể nào tiến bộ được!!!
 
Upvote 0
đọc code mà không hiểu ý tưởng sao
Đúng là tôi không hiểu cái Ý TƯỞNG của bạn thật! ???
Vì với code ấy, tôi làm bằng tay còn hoành tráng hơn nữa đấy:

[video=youtube;ULap1F27uss]http://www.youtube.com/watch?v=ULap1F27uss[/video]

Nên việc bạn nói code quá nặng thì chỉ là mang tính đả kích. Với ứng dụng lớn thì xem việc đó là bắt buộc nhưng với cái trò cho vui thì cái đó có cần như bạn nói ko?
Ngược lại, bạn không hiểu người khác nói gì cả! Chẳng ai bảo CODE NẶNG NHẸ mà đang muốn nói đến DUNG LƯỢNG FILE! Chẳng ai chấp nhận dùng code mà càng ngày file lại càng tăng dung lượng lên như thế
----------------------------
Mà thôi, bạn đã không hiểu thì tùy bạn vậy! Hãy cứ VUI với CHƯƠNG TRÌNH của mình ----> Giải pháp Excel chắc chẳng ai cần đến
Ẹc... Ẹc...
 
Upvote 0
----------------------------
Mà thôi, bạn đã không hiểu thì tùy bạn vậy! Hãy cứ VUI với CHƯƠNG TRÌNH của mình ----> Giải pháp Excel chắc chẳng ai cần đến
Ẹc... Ẹc...
Đôi khi cũng cần để lấy ví dụ về lỗi, Ẹc... Ẹc...
...............
Tiêu đề Topic thì vui mà diễn biến thì đi ngược lại!!!
 
Upvote 0
Theo mình nghĩ, thì vấn đề này không nên tranh luận nữa. Ai đúng, ai sai mọi người nhìn vào sẽ hiểu. Một người bảo thủ thì cho dù gì đi chăng nữa họ cũng không nhận được sự góp ý của mọi người và mình tin rằng trong cuộc sống những người như vậy sẽ không thể nào tiến bộ được!!!

Ủng hộ ý kiến trên! Tôi nghĩ đóng topic này là vừa!
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom