VBA Pesan Box (MsgBox) - Pesan The Can Do Better




Kotak Pesan VBA (MsgBox) membantu menyampaikan pesan yang telah ditentukan kepada pengguna. Pengembang sering menggunakan kotak pesan untuk hal-hal mulai dari debugging VBA (MsgBox "Aku di sini" jenis) untuk mendorong pengguna untuk tindakan (MsgBox ("Maaf, apa yang Anda minta tidak dapat dilakukan", vbAbortRetryIgnore)). Sementara itu tetap salah satu perintah yang paling berguna dan sering digunakan dalam VBA, juga umum untuk menemukan pengembang terjebak dengan bentuk paling primitif dari kotak pesan dan kehilangan keluar pada kesempatan untuk menyesuaikannya. Pada artikel ini kita akan melihat bagaimana Anda dapat meningkatkan kotak pesan VBA dan membuatnya lebih efektif.

Bentuk dasar dari Pesan Box (MsgBox) di VBA

1
2
3
Sub basic_messagebox ()
MsgBox "Hai"
End Sub

simple-msgbox Waktu dihormati dan diuji, ini adalah bentuk dasar dari kotak pesan. Formulir ini adalah sesuatu yang siapa saja yang telah menulis lebih dari 5 baris kode VBA akrab dengan. Kotak pesan ini hanya menampilkan pesan sederhana kepada pengguna. Yang harus Anda lakukan membuat pekerjaan ini adalah untuk menentukan pesan pada akhir perintah MsgBox dalam kode VBA Anda. Namun, ada banyak cara di mana kotak pesan sederhana ini dapat disesuaikan.

Menyesuaikan VBA Pesan Box

Mari kita menjelajahi beberapa cara di mana kita dapat menyesuaikan kotak pesan. Sebelum kita melangkah lebih jauh, mari kita periksa sintaks lengkap dari kotak pesan:

Mengembalikan nilai = MsgBox (Prompt, Button dan Icon jenis, Judul, Berkas Bantuan, Bantuan Berkas Konteks)

Dimana:
Kembali Nilai - Menunjukkan tindakan pengguna mengambil saat kotak pesan ditunjukkan kepadanya / nya.
Prompt - Ini adalah pesan yang terkandung dalam tubuh utama dari kotak pesan.
Button dan Icon Jenis - ini menentukan set tombol & Ikon dan penempatan mereka karena mereka akan muncul kepada pengguna.
Bantuan File - Ini adalah jalan ke file bantuan yang pengguna dapat merujuk pada topik ini.
Bantuan Berkas Konteks - ini adalah pointer ke bagian file bantuan yang specificially berhubungan dengan pesan ini.

Mari kita mengambil contoh yang akan memberikan kejelasan yang lebih besar.

1
2
3
Sub basic_messagebox ()
i = MsgBox ("Apakah kamu ingin diakhiri?", vbAbortRetryIgnore, "Salam Earthlings", "test.hlp", 100)
End Sub

Output dari bagian atas dari kode akan menjadi seperti ini:
cutomize-message-box-msgbox-vba

Mari kita masing-masing bagian dari kotak pesan dan melihat bagaimana kita dapat menyesuaikannya.

Bagaimana untuk menyesuaikan tombol di kotak pesan VBA

Daripada menunjukkan pengguna yang vanila polos tombol "Ok", Anda dapat melengkapi kotak pesan Anda dengan tombol yang membuat pengguna merasa bahwa ia / dia membuat pilihan cerdas.

vba-msgbox-yesno-okonly

Contoh di atas melebih-lebihkan tapi hanya sedikit sehingga. Itu semua umum untuk menemukan pengembang meninggalkan OK hanya pilihan bagi pengguna yang tidak curiga untuk mengklik. Sejak VBA memberikan kemampuan untuk menangkap nilai kembali (pilihan yang dibuat oleh pengguna), tidak ada alasan mengapa setiap pengembang yang wajar tidak ingin menangkap masukan itu dan menyediakan pengguna dengan kontrol lebih besar atas bagaimana program merespon.

Berikut adalah daftar berbagai tombol dan ikon yang dapat Anda gunakan di kotak pesan VBA.

vba-message-box-msgbox-list

Anda bahkan dapat menggabungkan dua atau lebih tombol (dan ikon) dengan hanya menggunakan simbol +. Dalam contoh yang diberikan di bawah ini, kami menggabungkan tombol ok dengan ikon kritis dan menunjukkan kombinasi untuk pengguna. (Selain itu, Anda juga dapat menentukan tombol yang harus memiliki fokus default dengan menggunakan opsi vbDefaultButton dari grafik di atas)

1
2
3
Sub basic_messagebox ()
i = MsgBox ("Hai", vbOKOnly + vbCritical)
End Sub

Menangkap tindakan pengguna dari kotak pesan VBA

Seperti yang ditekankan dalam bagian di atas, kotak pesan menyediakan kemampuan untuk menangkap tindakan pengguna dan mengambil tindakan lebih lanjut berdasarkan masukan itu. Anda dapat menyimpan output dari kotak pesan VBA dalam variabel dan kemudian mengambil tindakan yang tepat berdasarkan pilihan pengguna. Berikut adalah daftar nilai kembali terkait dengan pengguna mengklik berbagai tombol di kotak pesan.

vba-message-box-msgbox-return-type-values

Memasukkan beberapa baris dalam kotak pesan VBA

Misalkan Anda memiliki pesan yang panjang bahwa Anda ingin menunjukkan dalam beberapa baris. Karena pesan diapit dalam tanda kutip biasanya string, Anda dapat menggunakan VBA line karakter (vbCrLf) untuk memisahkan berbagai bagian pesan panjang menjadi beberapa baris. Berikut adalah kode:

1
2
3
Sub basic_messagebox ()
the second line" MsgBox "Ini adalah baris pertama" & vbCrLf & "Ini adalah baris kedua"
End Sub

Dan ini adalah bagaimana itu akan muncul kepada pengguna:
vba-msgbox-in-multiple-lines

Memasukkan karakter khusus dalam kotak pesan VBA

Sering kali, saat bekerja dengan bahasa lain, Anda mungkin ingin memasukkan karakter luar 26 karakter bahasa Inggris. Dalam kasus tersebut, Anda dapat menggunakan fungsi arang VBA (chr) untuk memasukkan karakter khusus.

1
2
3
Sub basic_messagebox ()
MsgBox Chr (200) & "spani" & Chr (244) & "l"
End Sub

Dalam contoh di atas, kita telah menggunakan dua karakter khusus untuk membuat sebuah string yang memiliki huruf non-Inggris.
special-character-in-vba-msgbox


Excel Formula, Excel Chart, Excel Macro, Excel VBA, Pivot Table Excel, Excel Dashboard

Apa yang Anda Pikirkan?


XHTML: Anda dapat menggunakan tag ini: href <abbr title = ""> <title = singkatan ""> <b> <blockquote cite = ""> <cite> <code> < del datetime = ""> <em> <i> <q mengutip = ""> <strike> <strong>


Komentar dan Trackbacks

  1. JP wrote:

    Aku dikemas fungsi MsgBox, aku menyukainya lebih baik daripada memiliki MsgBox panggilan mengotori kode saya. Aku diposting contoh di blog saya baru-baru ini.

  2. Jon Peltier menulis:

    Anda harus menunjukkan bagaimana untuk mendapatkan respon pengguna:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    VbMsgBoxResult Respon Dim As VbMsgBoxResult
    Response = MsgBox ("Apakah kamu ingin diakhiri?", VbYesNo + vbQuestion)

    Pilih Kasus Response
    VbYes Kasus
    'Mengakhiri
    Kasus vbNo
    'Tidak menghentikan
    End Select
  3. Ajay wrote:

    Jon,
    Terima kasih untuk menyediakan implementasi.

    JP,
    Mengambil isyarat dari apa yang dikatakan Jon, jika dalam kode di bawah ini disebutkan, fungsi panggilan untuk "MessageBox" itu harus diganti dengan standar VBA MsgBox, harus memberikan hasil yang sama.

    [

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testme1 ()
    Hasil Dim As Integer
    Hasil = MessageBox ("hello", vbInformation + VbYesNo, "Judul saya")
    Pilih hasil Case
    Kasus 1, 4, 5, 6
    MessageBox ("Anda ingin melanjutkan!")
    Kasus 2, 3, 7
    MessageBox ("Anda ingin berhenti")
    End Select
    End Sub

    ... Bekerja cukup banyak yang sama seperti ...

    [

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testme2 ()
    Hasil Dim As Integer
    Hasil = MsgBox ("hello", vbInformation + VbYesNo, "Judul saya")
    Pilih hasil Case
    Kasus 1, 4, 5, 6
    MsgBox ("Anda ingin melanjutkan!")
    Kasus 2, 3, 7
    MsgBox ("Anda ingin berhenti")
    End Select
    End Sub

    Maafkan saya yang naif, aku merindukan sesuatu sepanjang jalan?

  4. Chris menulis:

    Pembelian saya membuat yang eirntely berdasarkan artikel tersebut.

  5. Sharon menulis:

    Informasi yang sangat membantu. Dapatkah Anda mengubah warna kotak pesan?

  6. Ricco DeCicco menulis:

    "Saya menemukan di bawah kode yang memungkinkan tombol kustom teks menjadi
    'Ditampilkan ke kotak pesan standar.
    'Tempelkan ini ke modul baru di VBA
    '--------
    Option Explicit

    Swasta Const MB_YESNOCANCEL = & H3 &
    Swasta Const MB_YESNO = & H4 &
    Swasta Const MB_RETRYCANCEL = & H5 &
    Swasta Const MB_OKCANCEL = & H1 &
    Swasta Const MB_OK = & H0 &
    Swasta Const MB_ABORTRETRYIGNORE = & H2 &
    Swasta Const MB_ICONEXCLAMATION = & H30 &
    Swasta Const MB_ICONQUESTION = & H20 &
    Swasta Const MB_ICONASTERISK = & H40 &
    Swasta Const MB_ICONINFORMATION = MB_ICONASTERISK
    Swasta Const IDOK = 1
    Swasta Const IDCANCEL = 2
    Swasta Const IDABORT = 3
    Swasta Const IDRETRY = 4
    Swasta Const IDIGNORE = 5
    Swasta Const IDYES = 6
    Swasta Const IDNO = 7
    Swasta Const IDPROMPT = & HFFFF &
    Swasta Const WH_CBT = 5
    Swasta Const GWL_HINSTANCE = (-6)
    Swasta Const HCBT_ACTIVATE = 5
    Jenis MSGBOX_HOOK_PARAMS Swasta
    hwndOwner As Long
    hHook As Long
    Akhir Jenis
    MSGHOOK Swasta Sebagai MSGBOX_HOOK_PARAMS
    Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
    Declare Function Public GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetWindowLong Lib "user32" Alias ​​_
    "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function MessageBox Lib "user32" Alias ​​_
    "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, _
    ByVal lpCaption As String, ByVal wType As Long) As Long
    Private Declare Function SetDlgItemText Lib "user32" Alias ​​_
    "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, _
    ByVal lpString As String) As Long
    Private Declare Function SetWindowsHookEx Lib "user32" Alias ​​_
    "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
    ByVal hMod As Long, ByVal dwThreadId As Long) As Long
    Private Declare Function SetWindowText Lib "user32" Alias ​​_
    "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
    Private Declare Function UnhookWindowsHookEx Lib "user32" _
    (ByVal hHook As Long) As Long
    MbFlags Dim As VbMsgBoxStyle
    Dim mbFlags2 Sebagai VbMsgBoxStyle
    Dim mTitle As String
    Dim mPrompt As String
    Dim But1 As String
    Dim But2 As String
    Dim But3 As String
    Public Function MessageBoxH (hwndThreadOwner As Long, _
    hwndOwner As Long, mbFlags Sebagai VbMsgBoxStyle) As Long
    'Fungsi ini panggilan hook
    Dim hInstance As Long
    Dim hThreadId As Long
    hInstance = GetWindowLong (hwndThreadOwner, GWL_HINSTANCE)
    hThreadId = GetCurrentThreadId ()
    Dengan MSGHOOK
    .hwndOwner = hwndOwner
    .hHook = SetWindowsHookEx (WH_CBT, AddressOf MsgBoxHookProc, _
    hInstance, hThreadId)
    End With
    MessageBoxH = MessageBox (hwndOwner, Ruang $ (120), Ruang $ (120), mbFlags)
    End Function
    Public Function MsgBoxHookProc (ByVal uMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    'Fungsi ini menangkap messagebox sebelum membuka
    'Dan mengubah teks tombol - kemudian menghapus hook
    Jika uMsg = HCBT_ACTIVATE Lalu
    SetWindowText wParam, mTitle
    SetDlgItemText wParam, IDPROMPT, mPrompt
    Pilih mbFlags Kasus
    Kasus vbAbortRetryIgnore
    SetDlgItemText wParam, IDABORT, But1
    SetDlgItemText wParam, IDRETRY, But2
    SetDlgItemText wParam, IDIGNORE, But3
    Kasus vbYesNoCancel
    SetDlgItemText wParam, IDYES, But1
    SetDlgItemText wParam, IDNO, But2
    SetDlgItemText wParam, IDCANCEL, But3
    Kasus vbOKOnly
    SetDlgItemText wParam, IDOK, But1
    Kasus vbRetryCancel
    SetDlgItemText wParam, IDRETRY, But1
    SetDlgItemText wParam, IDCANCEL, But2
    Kasus VbYesNo
    SetDlgItemText wParam, IDYES, But1
    SetDlgItemText wParam, IDNO, But2
    Kasus vbOkCancel
    SetDlgItemText wParam, IDOK, But1
    SetDlgItemText wParam, IDCANCEL, But2
    End Select
    UnhookWindowsHookEx MSGHOOK.hHook
    End If
    MsgBoxHookProc = False
    End Function

    Fungsi BBmsgbox Umum (mhwnd As Long, _
    mMsgbox Sebagai VbMsgBoxStyle, Judul As String, _
    Prompt As String, mMsgIcon Opsional Sebagai VbMsgBoxStyle, _
    Opsional Buta As String, Optional ButB As String, _
    Opsional ButC As String) As String
    'Fungsi ini menetapkan parameter kustom Anda dan kembali
    'Tombol yang ditekan sebagai string
    Dim mReturn As Long
    mbFlags = mMsgbox
    mbFlags2 = mMsgIcon
    mTitle = Judul
    mPrompt = Prompt
    But1 = Buta
    But2 = ButB
    But3 = ButC
    mReturn = MessageBoxH (mhwnd, GetDesktopWindow (), _
    mbFlags Atau mbFlags2)
    Pilih Kasus mReturn
    Kasus IDABORT
    BBmsgbox = But1
    Kasus IDRETRY
    BBmsgbox = But2
    Kasus IDIGNORE
    BBmsgbox = But3
    Kasus IDYES
    BBmsgbox = But1
    Kasus IDNO
    BBmsgbox = But2
    Kasus IDCANCEL
    BBmsgbox = But3
    Kasus IDOK
    BBmsgbox = But1
    End Select
    End Function

    Sub Test ()
    Dim mReturn As String
    mReturn = BBmsgbox (1, vbYesNoCancel, "Hi There", "Keren?",, "Go for it", "Tidak mungkin", "Biarkan aku berpikir")
    MsgBox "Anda menekan" + mReturn
    End Sub

  7. Robert wrote:

    Bagus sekali, ini adalah yang paling ringkas dan mudah dimengerti artikel yang saya temukan tentang cara menggunakan kotak pesan.

  1. Dapatkah Anda menyingkirkan tombol batal dari kotak pesan wrote:

    [...] "Hello", vbOkCancel LINK ini akan memberikan info lebih lanjut tentang messge Box. Salam [...]

  2. VBA kode pesan kotak dilema ...... menulis:

    [...] Dan menambahkan struktur sedikit lebih, Anda dapat menampilkan sekitar 1024 karakter di kotak pesan. Link ini mungkin memberikan beberapa ide. Berikut adalah contoh bagaimana menggunakan vbcrlf untuk menambahkan carriage return-line [...]

Berlangganan

Bersaing dengan berita terbaru - Disampaikan langsung ke kotak masuk Anda
feedburner

Terjemahkan

English flagChinese (Simplified) flagPortuguese flagGerman flagFrench flagSpanish flagJapanese flagArabic flagDutch flagHindi flagPolish flagSwedish flagFilipino flagHebrew flagIndonesian flagUkrainian flagThai flagTurkish flag
software treeemap untuk excel