• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

MsgBox YesNo

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,452
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Arkadaşlar, sayın hocalarım, bir dosyam var, hatta diğer dosyalarımda da böyle oluyor. InputBox ya da MsgBox neden klasörlerin arkasında açılıyor. Bunun bir yolu var mı?
Mesela koda bir satır eklemek gibi.
Şimdiden teşekkür ederim.
Saygılarımla.
 

Ekli dosyalar

  • Ekran görüntüsü 2026-03-14 045554.png
    Ekran görüntüsü 2026-03-14 045554.png
    74.3 KB · Görüntüleme: 7
Bu Excel VBA’da çok sık görülen bir durumdur. MsgBox veya InputBox, Explorer penceresinin arkasında kalır çünkü Excel aktif pencere değildir. Windows o anda Explorer’ı foreground window olarak görüyor.

MsgBox veya InputBox’tan önce Excel’i aktif yapın.
Kod:
AppActivate Application.Caption

Kod:
Sub Test()
    AppActivate Application.Caption    
    MsgBox "Devam edilsin mi?"

End Sub

veya
Kod:
MsgBox "Mesaj", vbSystemModal
 
Yeni bir Module açın ve bunu ekleyin:
Kod:
Public Sub FocusExcel()
    On Error Resume Next
    AppActivate Application.Caption
    DoEvents
End Sub

Artık tek satır eklemeniz yeterli
Her MsgBox veya InputBox'tan önce sadece bunu yazın:

FocusExcel

örnek
Kod:
Sub Test()

    FocusExcel
    MsgBox "Devam edilsin mi?"

End Sub

veya

Kod:
Sub Test()

    Dim cevap As String

    FocusExcel
    cevap = InputBox("Bir değer girin")

End Sub

veya genelde benim kullandığım
Kod:
Public Sub FocusExcel()
    On Error Resume Next
    Application.WindowState = xlNormal
    Application.Activate
    AppActivate Application.Caption
    DoEvents
End Sub
 
Yeni bir Module açın ve bunu ekleyin:
Kod:
Public Sub FocusExcel()
    On Error Resume Next
    AppActivate Application.Caption
    DoEvents
End Sub

Artık tek satır eklemeniz yeterli
Her MsgBox veya InputBox'tan önce sadece bunu yazın:

FocusExcel

örnek
Kod:
Sub Test()

    FocusExcel
    MsgBox "Devam edilsin mi?"

End Sub

veya

Kod:
Sub Test()

    Dim cevap As String

    FocusExcel
    cevap = InputBox("Bir değer girin")

End Sub

veya genelde benim kullandığım
Kod:
Public Sub FocusExcel()
    On Error Resume Next
    Application.WindowState = xlNormal
    Application.Activate
    AppActivate Application.Caption
    DoEvents
End Sub
Teşekkür ederim hocam, anladığım kadarıyla modüle

Public Sub FocusExcel()
On Error Resume Next
Application.WindowState = xlNormal
Application.Activate
AppActivate Application.Caption
DoEvents
End Sub

Ve MsgBox üstüne
FocusExcel
 
@muhasebeciyiz Hocam kod şöyle

Sub mesaj()
Dim iResponse As Integer
FocusExcel
iResponse = MsgBox(" haberi var mıydı?", vbYesNoCancel)
If iResponse = vbYes Then
Call mrt11
End If
If iResponse = vbNo Then
Call detay111
End If
If iResponse = vbCancel Then
Exit Sub
End If
End Sub

Boş modüle

Public Sub FocusExcel()
On Error Resume Next
Application.WindowState = xlNormal
Application.Activate
AppActivate Application.Caption
DoEvents
End Sub

Ama yine olmadı. Eksik ne yaptım acaba?
 

Ekli dosyalar

  • Ekran görüntüsü 2026-03-15 011049.png
    Ekran görüntüsü 2026-03-15 011049.png
    14.9 KB · Görüntüleme: 4
Kod:
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As LongPtr) As Long
#Else
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
#End If

Public Sub FocusExcel()

    On Error Resume Next
    
    Application.WindowState = xlNormal
    Application.Visible = True
    Application.Activate
    
    SetForegroundWindow Application.hwnd
    
    DoEvents

End Sub


Public Function AskMsg(Soru As String) As VbMsgBoxResult

    FocusExcel
    
    AskMsg = MsgBox(Soru, vbYesNoCancel + vbQuestion + vbSystemModal)

End Function


Public Function AskInput(Soru As String) As Variant

    FocusExcel
    
    AskInput = Application.InputBox(Soru, "Bilgi", Type:=2)

End Function

Kod:
Sub mesaj()

Dim iResponse As VbMsgBoxResult

iResponse = AskMsg("Haberi var mıydı?")

If iResponse = vbYes Then
    mrt11
ElseIf iResponse = vbNo Then
    detay111
Else
    Exit Sub
End If

End Sub

Kod:
Sub test()

Dim cevap As Variant

cevap = AskInput("Adınızı yazın")

If cevap = False Then Exit Sub

MsgBox "Girdiğiniz isim: " & cevap

End Sub

üçünüde modüle alt alta ekleyiniz
Yani tek modül içinde olacak. Ayrı ayrı modül açmayın.
 
Geri
Üst