Değişkene Değer Atama

Katılım
24 Temmuz 2019
Mesajlar
181
Excel Vers. ve Dili
2010 ve 2016 Türkçe
Altın Üyelik Bitiş Tarihi
19-10-2023
Merhaba arkadaşlar,

Aşağıdaki VBA kodumda durum adında bir değişken oluşturdum Boolean türünde. Makroda Bu değişken True iken mesaj versin, True değilse alttaki kodları çalıştırsın istiyorum. Bunun için makro ilk çalıştığında durum değişkenini True olarak dönüştürsün istiyorum. Bundan sonra makroyu çalıştırmaya çalıştığım zaman durum True olduğu için direk uyarı mesajı vermesi gerekir. Ve 5 saniye zamangeldi makrosu aktifleşip durum değişkenini False a çevirecek ve private makrom tekrar çalışabilecek. Fakat ne yaptıysam Hayır butonuna bastığım an durum değişkenini True ya çeviremiyorum.

Kod:
Private Sub Worksheet_Calculate()
    With Sheets("Sayfa1")
    Dim durum As Boolean
    If durum = True Then
    MsgBox "Zaman dolmadı"
    Else
        If .Range("AA3") <> .Range("AB3") Then
            Dim Komut As Integer
            Dim Mesaj As String
            Dim Baslik As String
            Dim X As Byte, Satir As Byte
            
            Mesaj = "VERİLER HATALI DÜZELTME UYGULANSIN MI?"
            Baslik = "Başlık Burada Gözüküyor"
            Komut = MsgBox(Mesaj, vbYesNo, Baslik)
            
            If Komut = 6 Then
                MsgBox "DÜZELTME UYGULANMIŞTIR."
                For X = 1 To .Cells(.Rows.Count, 1).End(3).Row
                    If .Cells(X, 1).Interior.ColorIndex = xlNone Then
                        Satir = X
                        Exit For
                    End If
                Next
                .Range("A" & Satir & ":V" & Satir).AutoFill Destination:=.Range("A" & Satir & ":V51"), Type:=xlFillDefault
            Else
                If Komut = 7 Then
                    MsgBox "Hayır Butonuna Tıkladınız."
                    durum = True
                    Application.OnTime Now + TimeValue("00:00:05"), "zamangeldi"
                End If
            End If
        End If
        End If
    End With
End Sub



Sub zamangeldi()
 MsgBox "Vermek istediğimiz mesaj", 0
 durum = Sheets("akıl fikir mektebi").Range("AE6").Value
'...sizin kodlarınız
'.......
End Sub
 
Katılım
24 Temmuz 2019
Mesajlar
181
Excel Vers. ve Dili
2010 ve 2016 Türkçe
Altın Üyelik Bitiş Tarihi
19-10-2023
Desteğinizi rica ederim arkadaşlar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
"durum" tanımlamasını kodların "General Declaration" bölümüne alırsanız istediğiniz olur.

Kod:
Option Explicit
Dim durum As Boolean

Private Sub Worksheet_Calculate()
    With Sheets("Sayfa1")
    If durum = True Then
    MsgBox "Zaman dolmadı"
    Else
        If .Range("AA3") <> .Range("AB3") Then
            Dim Komut As Integer
            Dim Mesaj As String
            Dim Baslik As String
            Dim X As Byte, Satir As Byte
            
            Mesaj = "VERİLER HATALI DÜZELTME UYGULANSIN MI?"
            Baslik = "Başlık Burada Gözüküyor"
            Komut = MsgBox(Mesaj, vbYesNo, Baslik)
            
            If Komut = 6 Then
                MsgBox "DÜZELTME UYGULANMIŞTIR."
                For X = 1 To .Cells(.Rows.Count, 1).End(3).Row
                    If .Cells(X, 1).Interior.ColorIndex = xlNone Then
                        Satir = X
                        Exit For
                    End If
                Next
                .Range("A" & Satir & ":V" & Satir).AutoFill Destination:=.Range("A" & Satir & ":V51"), Type:=xlFillDefault
            Else
                If Komut = 7 Then
                    MsgBox "Hayır Butonuna Tıkladınız."
                    durum = True
                    Application.OnTime Now + TimeValue("00:00:05"), "zamangeldi"
                End If
            End If
        End If
        End If
    End With
    durum = True
End Sub

Sub zamangeldi()
    durum = False
End Sub
 
Katılım
24 Temmuz 2019
Mesajlar
181
Excel Vers. ve Dili
2010 ve 2016 Türkçe
Altın Üyelik Bitiş Tarihi
19-10-2023
"durum" tanımlamasını kodların "General Declaration" bölümüne alırsanız istediğiniz olur.

Kod:
Option Explicit
Dim durum As Boolean

Private Sub Worksheet_Calculate()
    With Sheets("Sayfa1")
    If durum = True Then
    MsgBox "Zaman dolmadı"
    Else
        If .Range("AA3") <> .Range("AB3") Then
            Dim Komut As Integer
            Dim Mesaj As String
            Dim Baslik As String
            Dim X As Byte, Satir As Byte
          
            Mesaj = "VERİLER HATALI DÜZELTME UYGULANSIN MI?"
            Baslik = "Başlık Burada Gözüküyor"
            Komut = MsgBox(Mesaj, vbYesNo, Baslik)
          
            If Komut = 6 Then
                MsgBox "DÜZELTME UYGULANMIŞTIR."
                For X = 1 To .Cells(.Rows.Count, 1).End(3).Row
                    If .Cells(X, 1).Interior.ColorIndex = xlNone Then
                        Satir = X
                        Exit For
                    End If
                Next
                .Range("A" & Satir & ":V" & Satir).AutoFill Destination:=.Range("A" & Satir & ":V51"), Type:=xlFillDefault
            Else
                If Komut = 7 Then
                    MsgBox "Hayır Butonuna Tıkladınız."
                    durum = True
                    Application.OnTime Now + TimeValue("00:00:05"), "zamangeldi"
                End If
            End If
        End If
        End If
    End With
    durum = True
End Sub

Sub zamangeldi()
    durum = False
End Sub
Allah razı olsun hocam. Private sub da evet hayır dedikten sonra durumu True ya çeviriyor. Fakat 5 saniye sonra "zamangeldi" adlı sub(modül yada makro) devreye girdikten sonra durumu false a çevirmedi.

Kod:
Sub zamangeldi()
MsgBox "Vermek istediğimiz mesaj", 0
durum = False
'...sizin kodlarınız
'.......
End Sub
 
Katılım
24 Temmuz 2019
Mesajlar
181
Excel Vers. ve Dili
2010 ve 2016 Türkçe
Altın Üyelik Bitiş Tarihi
19-10-2023
Hocam şöyle bir çözüm buldum. zamangeldi modülünü private sub daki makronun olduğu sayfaya aktardım.

Application.OnTime Now + TimeValue("00:00:05"), "zamangeldi"

yerine

Application.OnTime Now + TimeValue("00:00:05"), "Sayfa4.zamangeldi"

yapınca mevcut sayfadaki zaman geldi makrosunu çalıştırdı. Teşekkürler tekrardan.
 
Üst