Otomatik e-posta gönderilirken hata oluştu


1

Veri doğrulama listesi kullanan bir sütunu olan paylaşılan bir çalışma kitabım var. Seçilirse YES, çalışma kitabına bakmalarını istemek için belli bir bölüme e-posta göndermesini istiyorum.

Bu kadar uzağa geldim

Sub SendMail()
    If Range("G10:G250") = "YES" Then
            With CreateObject("Outlook.Application").createitem(0)
                .To = "p***.h***@****.com"
                .Subject = "Update from Facility Manager"
                .Body = "Hi Property Services, " & vbNewLine & vbNewLine & " Please follow the link to see update on Facilty Management Tracker"
                .Send
            End With
    End If
End Sub

ama ben bir type mismatchhata alıyorum.

Yanıtlar:


1

Hatalar hakkında soru sorulurken, hatanın tam olarak nerede gerçekleştiğini belirtmek önemlidir. Kod bölmesinin kenarındaki bir kesme noktasını kodunuzun başına yerleştirin ve ile aynı anda bir adım atın F8.

Kodunuzda "type uyumsuzluğu" hatası satırda ortaya çıkıyor

If Range("G10:G250") = "YES" Then

Birden fazla hücreyi kapsayan bir aralık, bir dize değerine sahip olamaz. Niyetiniz, aralıktaki tüm hücreleri geçmek ve bir veya daha fazla hücre "EVET" gösteriyorsa bir posta göndermek olup olmadığı açık değildir. Aşağıdaki değiştirilmiş kodunuz, aralıkta bir "EVET" arar ve bulunursa, bir boolean belirler ve ileriye bakmayı keser. Sonra boole ayarlanmışsa, e-postayı hazırlar ve gönderir.

Private Sub SendMail()
    Dim cell As Range
    Dim y As Boolean

    'If Range("G10:G250").Value = "YES" Then
    y = False
    For Each cell In Range("G10:G250")
        If cell.Value = "YES" Then
            y = True
            Exit For
        End If
    Next

    If y Then
        With CreateObject("Outlook.Application").createitem(0)
            .To = "p***.h***@****.com"
            .Subject = "Update from Facility Manager"
            .Body = "Hi Property Services, " & vbNewLine & vbNewLine & " Please follow the link to see update on Facilty Management Tracker"
            .Send  'during debugging you can use .Display instead (to avoid filling someones mailbox)
        End With
    End If

End Sub

İşe yaradı, teşekkürler Tom :) herhangi bir fikir otomatik olarak çalışmaya zorlamak nasıl? Şimdiye kadar sadece kodu açıp zorlarsam çalışır mı?
P Hope

@PHope Otomatik olarak, ancak ne ile tetiklenir? Belki Worksheet_Changeolayı kullanabilirsiniz . MSDN'de Doküman Çalışma sayfasındaki hücrelerin kullanıcı tarafından veya harici bir bağlantı tarafından değiştirildiğinde ortaya çıkar . SuperUser'da, bu etkinlikle ilgili yüzlerce mesaj var, sadece arama kutusuna girin.
Tom Brunberg,

Cevabın için teşekkürler. Bu yüzden, makroyu hazırladım (önceki yardımınla birlikte), mükemmel çalışan, koşuyu zorlamak zorundayım. G sütunundaki herhangi bir hücre "EVET" olarak değiştirildiyse, e-postayı göndermesini isterim
P Hope

Asıl sorunuz type mismatch error, daha önce cevapladığım konu hakkındaydı. Ayrıca genel olarak, görevinizi nasıl otomatikleştireceğiniz ve ek örnekler bulma konusunda ek bir soru olarak yorumlarda cevapladım. SuperUser gibi Stack Exchange siteleri "bir soru - bir cevap" ilkesine dayanır. Yeni yayınlar olarak daha fazla soru sorabilirsiniz, ücretsizdir! :) Lütfen yardım merkezindeki makaleleri okuyarak, birilerinin cevaplarını
Tom Brunberg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.