Nhờ giúp đỡ về vấn đề Msgbox? (1 người xem)

  • Thread starter Thread starter KUMI
  • Ngày gửi Ngày gửi
Liên hệ QC

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

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Xin chào Thầy Cô & các Anh Chị trong GPE!
lần trước em em đã sưu tầm được 1 đoạn code cho lĩnh vực Msgbox trong tiếng việt.
Em thấy rất hay đơn giản và hiệu quả.. Nhưng Em chưa biết cách kiểm soát để vận dụng nó:
Cụ thể như trong file kèm em đã viết thắc mắc của mình.
Thầy Cô và Anh chị xem file rồi giúp em với ạ!
Em xin cảm ơn!
 

File đính kèm

Xin chào Thầy Cô & các Anh Chị trong GPE!
lần trước em em đã sưu tầm được 1 đoạn code cho lĩnh vực Msgbox trong tiếng việt.
Em thấy rất hay đơn giản và hiệu quả.. Nhưng Em chưa biết cách kiểm soát để vận dụng nó:
Cụ thể như trong file kèm em đã viết thắc mắc của mình.
Thầy Cô và Anh chị xem file rồi giúp em với ạ!
Em xin cảm ơn!
Bạnng dùng code sau xem sao nhé
[GPECODE=vb]Sub TestMsg()
Dim Tb
Tb = MessageBox(Application.hwnd, StrPtr(Range("i3").Value), StrPtr(Range("i2").Value), 3)
If Tb = 6 Then
Sheet1.Range("I8").Value = "GPE"
ElseIf Tb = 7 Then
Sheet1.Range("I8").Value = "OK"
Else
Sheet1.Range("I8").Value = ""
End If
End Sub


[/GPECODE]
 
Upvote 0
Bạnng dùng code sau xem sao nhé
Mã:
Sub TestMsg()
Dim Tb
Tb = MessageBox(Application.hwnd, StrPtr(Range("i3").Value), StrPtr(Range("i2").Value), 3)
If Tb = 6 Then
    Sheet1.Range("I8").Value = "GPE"
ElseIf Tb = 7 Then
    Sheet1.Range("I8").Value = "OK"
[COLOR=#ff0000]Else
    Sheet1.Range("I8").Value = ""[/COLOR]
End If
End Sub

Chổ màu đỏ xem chừng không ổn! Vì người ta nói "Nếu bấm Cancel thì KHÔNG LÀM GÌ CẢ" sao lại gán nó =""
Vầy hợp lý hơn:
Mã:
Sub TestMsg()
  Dim Ans As Long
  Ans = MessageBox(Application.hwnd, StrPtr([I3]), StrPtr([I2]), vbYesNoCancel)
  If Ans = vbYes Then [I8] = "GPE"
  If Ans = vbNo Then [I8] = "OK"
End Sub
 
Upvote 0
Chổ màu đỏ xem chừng không ổn! Vì người ta nói "Nếu bấm Cancel thì KHÔNG LÀM GÌ CẢ" sao lại gán nó =""
Vầy hợp lý hơn:
Mã:
Sub TestMsg()
  Dim Ans As Long
  Ans = MessageBox(Application.hwnd, StrPtr([I3]), StrPtr([I2]), vbYesNoCancel)
  If Ans = vbYes Then [I8] = "GPE"
  If Ans = vbNo Then [I8] = "OK"
End Sub
Dạ, em biết chứ, Em nghĩ khi nhấn Yes rồi I8=GPE, làm lại lần nữa nhấn Cancel tác giả muốn I8 "không hiện gì" thì sao?
 
Upvote 0
Dạ, em biết chứ, Em nghĩ khi nhấn Yes rồi I8=GPE, làm lại lần nữa nhấn Cancel tác giả muốn I8 "không hiện gì" thì sao?

Đó lại là chuyện khác (Nếu người ta nói "Nếu bấm Cancel thì xóa I8" chẳng hạn)
Nguyên tắc của nút Cancel nghĩa là KHÔNG LÀM GÌ. Mà đã không làm gì nghĩa là thoát luôn (có tác động trên I8 nghĩa là có làm rồi)
 
Upvote 0
Bạnng dùng code sau xem sao nhé
[GPECODE=vb]Sub TestMsg()
Dim Tb
Tb = MessageBox(Application.hwnd, StrPtr(Range("i3").Value), StrPtr(Range("i2").Value), 3)
If Tb = 6 Then
Sheet1.Range("I8").Value = "GPE"
ElseIf Tb = 7 Then
Sheet1.Range("I8").Value = "OK"
Else
Sheet1.Range("I8").Value = ""
End If
End Sub


[/GPECODE]

Woa! Xin Cám GPE!
Thầy và Anh Chị cho Em hỏi thêm cái những số 6 và 7 kia có phải là giá trị của Yes và no không ạ?
Nếu vậy những giá trị khác như là Retry hay là gì gì đi nữa thì... nó là số nào ạ?
Có thể cho em xin danh sách các bảng số đó được không ạ.. hihi!Em không biết cứ hỏi liều thôi nhé,nếu có chỗ nào không hợp lý mong mọi người đừng cười ạ!... khà khà!
 
Upvote 0
Đó lại là chuyện khác (Nếu người ta nói "Nếu bấm Cancel thì xóa I8" chẳng hạn)
Nguyên tắc của nút Cancel nghĩa là KHÔNG LÀM GÌ. Mà đã không làm gì nghĩa là thoát luôn (có tác động trên I8 nghĩa là có làm rồi)
Đúng là ý em là như vậy! Cảm ơn Thầy!
 
Upvote 0
Chổ màu đỏ xem chừng không ổn! Vì người ta nói "Nếu bấm Cancel thì KHÔNG LÀM GÌ CẢ" sao lại gán nó =""
Vầy hợp lý hơn:
Mã:
Sub TestMsg()
  Dim Ans As Long
  Ans = MessageBox(Application.hwnd, StrPtr([I3]), StrPtr([I2]), vbYesNoCancel)
  If Ans = vbYes Then [I8] = "GPE"
  If Ans = vbNo Then [I8] = "OK"
End Sub

~^^~ ... Huhu! Thầy ơi sao con áp dụng cái code trên của Thầy viết lại kiểu dạng này mà không được vậy? ..hix...hix!
HTML:
Sub TestMsg4()
  Dim Ans As Long
  Ans = MessageBox(Application.hwnd, StrPtr([I3]), StrPtr([I2]), vbCancelTryAgainContinue)
  If Ans = vbTryAgain Then [I8] = "GPE"
  If Ans = vbContinue Then [I8] = "OK"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, em biết chứ, Em nghĩ khi nhấn Yes rồi I8=GPE, làm lại lần nữa nhấn Cancel tác giả muốn I8 "không hiện gì" thì sao?
Vâng! Đúng là với câu hỏi Em đưa ra trong bài sẽ hiểu như vậy ạ. Nhưng đúng là do em diễn đạt chưa chuẩn. Mà phải như bài #5 Thầy NDU đã phân tích mới đúng.
 
Upvote 0
~^^~ ... Huhu! Thầy ơi sao con áp dụng cái code trên của Thầy viết lại kiểu dạng này mà không được vậy? ..hix...hix!
Mã:
Sub TestMsg4()
  Dim Ans As Long
  Ans = MessageBox(Application.hwnd, StrPtr([I3]), StrPtr([I2]),[B][COLOR=#ff0000] vbCancelTryAgainContinue[/COLOR][/B])
  If Ans = vbTryAgain Then [I8] = "GPE"
  If Ans = vbContinue Then [I8] = "OK"
End Sub

Bạn tự bịa ra vbCancelTryAgainContinue?
Khi bạn dùng hàm API MessageBoxW thì làm gì có tình huống khi có 3 nút Cancel, TryAgain, Continue?
-----------
Nếu nói về các nút cần hiển thị thì bạn chỉ có thể nhập vào vbAbortRetryIgnore, vbOKOnly, vbOKCancel, vbRetryCancel, vbYesNo hoặc vbYesNoCancel. Bạn cứ nhập lần lượt thì biết "mặt mũi" hộp thoại thế nào.

Tùy theo chọn nút nào mà hàm trả về vbAbort, vbCancel, vbIgnore, vbNo, vbOK, vbRetry hoặc vbYes
 
Upvote 0
~^^~ ... Huhu! Thầy ơi sao con áp dụng cái code trên của Thầy viết lại kiểu dạng này mà không được vậy? ..hix...hix!
HTML:
Sub TestMsg4()
  Dim Ans As Long
  Ans = MessageBox(Application.hwnd, StrPtr([I3]), StrPtr([I2]), vbCancelTryAgainContinue)
  If Ans = vbTryAgain Then [I8] = "GPE"
  If Ans = vbContinue Then [I8] = "OK"
End Sub
Không phải bạn muốn viết gì cũng được, phải tuân thủ quy định của anh Bill
Đây là quy định của ảnh nè:

Untitled.jpg
 
Upvote 0
Không phải bạn muốn viết gì cũng được, phải tuân thủ quy định của anh Bill
Đây là quy định của ảnh nè:

View attachment 103650






































Đúng là vấn đề mà Con đang cần cho lĩnh vực này Thầy có dữ liệu mềm của hình ảnh này không Up con xin với ạ, Con viết code hay nhầm lắm nên toàn copy thôi ạ!
hihi!

Xin hỏi Thầy và các Anh Chị thêm 1 vấn đề nữa ạ!làm sao mà có thể hiển thị xuống dòng trong Msgbox theo từng ô được ạ?
Ví dụ msgbox sẽ kiểu này ạ:

Thay đổi giá trị ô I8 theo điều kiện chọn?
+Nếu chọn Yes thì ô I8 sẽ là : GPE
+Nếu chọn No thì ô I8 sẽ là :OK
+Nếu chọn cancel thì ô I8 sẽ không làm gì.
 
Upvote 0
Đúng là vấn đề mà Con đang cần cho lĩnh vực này Thầy có dữ liệu mềm của hình ảnh này không Up con xin với ạ, Con viết code hay nhầm lắm nên toàn copy thôi ạ!
hihi!
.
Trong cửa số VBA, bạn cứ gõ chữ vbOK rồi bôi đen nó, bấm F1 sẽ nhìn thấy cái bảng như trên

Xin hỏi Thầy và các Anh Chị thêm 1 vấn đề nữa ạ!làm sao mà có thể hiển thị xuống dòng trong Msgbox theo từng ô được ạ?
Ví dụ msgbox sẽ kiểu này ạ:

Thay đổi giá trị ô I8 theo điều kiện chọn?
+Nếu chọn Yes thì ô I8 sẽ là : GPE
+Nếu chọn No thì ô I8 sẽ là :OK
+Nếu chọn cancel thì ô I8 sẽ không làm gì.
Vầy nè:
Mã:
Sub TestMsg()
  Dim Ans As Long
  Dim sContent As String
  sContent = Range("I3").Value & [COLOR=#ff0000]vbLf[/COLOR] & _
             Range("I4").Value & [COLOR=#ff0000]vbLf[/COLOR] & _
             Range("I5").Value & [COLOR=#ff0000]vbLf[/COLOR] & _
             Range("I6").Value
  Ans = MessageBox(Application.hwnd, StrPtr(sContent), StrPtr([I2]), vbYesNoCancel)
  If Ans = vbYes Then [I8] = "GPE"
  If Ans = vbNo Then [I8] = "OK"
  If Ans = vbCancel Then [I8] = ""
End Sub
Ký tự vbLf (hoặc Chr(10) ) chính là ký tự xuống dòng
 
Upvote 0
Xin hỏi Thầy và các Anh Chị thêm 1 vấn đề nữa ạ!làm sao mà có thể hiển thị xuống dòng trong Msgbox theo từng ô được ạ?
Ví dụ msgbox sẽ kiểu này ạ:

Thay đổi giá trị ô I8 theo điều kiện chọn?
+Nếu chọn Yes thì ô I8 sẽ là : GPE
+Nếu chọn No thì ô I8 sẽ là :OK
+Nếu chọn cancel thì ô I8 sẽ không làm gì.
Thì bạn dồn các câu ấy vào 1 ô luôn (nhấn Alt+Enter để xuống dòng) để được như ý bạn
 
Upvote 0
Đúng là vấn đề mà Con đang cần cho lĩnh vực này Thầy có dữ liệu mềm của hình ảnh này không Up con xin với ạ, Con viết code hay nhầm lắm nên toàn copy thôi ạ!
hihi!

Xin hỏi Thầy và các Anh Chị thêm 1 vấn đề nữa ạ!làm sao mà có thể hiển thị xuống dòng trong Msgbox theo từng ô được ạ?
Ví dụ msgbox sẽ kiểu này ạ:

Thay đổi giá trị ô I8 theo điều kiện chọn?
+Nếu chọn Yes thì ô I8 sẽ là : GPE
+Nếu chọn No thì ô I8 sẽ là :OK
+Nếu chọn cancel thì ô I8 sẽ không làm gì.

Tôi nghĩ bạn cứ làm quen với MsgBox bình thường, cấu trúc của nó vận hành như thế nào cho quen trước đi rồi hãy tập tành với MsgBox tiếng Việt!

Có nhiều cách để xuống dòng. Nếu lấy giá trị tại 1 cell thì bạn cứ cho giá trị đó xuống hàng (Alt+Enter); còn nếu trực tiếp thì bạn dùng thủ tục nối chuỗi "X" & vbLf & "Y"
 
Upvote 0
khè,khè!Em Cám ơn Thầy Nghiã đã chia sẻ kiến thức và kinh nghiệm..
Nhưng thật sự với em bây giờ thì khó đi từ cơ bản đến nâng cao quá Thầy ạ! Vì em biết rằng em không thể nào có điều kiện đó được , hihi (2 con bé bỏng). Giờ em lên đây với mong muốn nhờ các Thầy giúp em những vấn đề nào mà em thấy cần thiết và hoàn hảo trong em đối với công việc của Em và bạn bè em thôi ạ! Hi vọng sẽ không làm Thầy và mọi người thất vọng ạ!
Hì, Em cảm ơn GPE!
 
Upvote 0
Bạn tự bịa ra vbCancelTryAgainContinue?
Khi bạn dùng hàm API MessageBoxW thì làm gì có tình huống khi có 3 nút Cancel, TryAgain, Continue?
-----------
Nếu nói về các nút cần hiển thị thì bạn chỉ có thể nhập vào vbAbortRetryIgnore, vbOKOnly, vbOKCancel, vbRetryCancel, vbYesNo hoặc vbYesNoCancel. Bạn cứ nhập lần lượt thì biết "mặt mũi" hộp thoại thế nào.

Tùy theo chọn nút nào mà hàm trả về vbAbort, vbCancel, vbIgnore, vbNo, vbOK, vbRetry hoặc vbYes

Thưa Thầy tình huống 3 nút này thì có đây ạ! Nhưng mà về thuật toán vba thì không có con cũng đành chịu thôi ạ! Con cứ tưởng theo cách viết đó của Thầy NDU là ngon... ai dzè , hihi... Con sửa cái code có cơ sơ sở mới dám viết chứ ạ,nên mới thắc mắc,chứ không dám nhắm mắt nhắm mũi để viết liều đâu Thầy ơi!+-+-+-++-+-+-++-+-+-+
1.JPG
 
Upvote 0
Thưa Thầy tình huống 3 nút này thì có đây ạ! Nhưng mà về thuật toán vba thì không có con cũng đành chịu thôi ạ! Con cứ tưởng theo cách viết đó của Thầy NDU là ngon... ai dzè , hihi... Con sửa cái code có cơ sơ sở mới dám viết chứ ạ,nên mới thắc mắc,chứ không dám nhắm mắt nhắm mũi để viết liều đâu Thầy ơi!+-+-+-++-+-+-++-+-+-+

Nếu bạn muốn MsgBox bằng tiếng Việt, sao không vào đây mà tham khảo luôn, cấu trúc chả cần phải nhớ, sau dấu phẩy là nó hiện lên các constants rồi thì tha hồ chọn vào?

Tặng Hàm MsgBox Việt hóa bằng Unicode tuyệt đẹp!
 
Upvote 0

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

Back
Top Bottom