用于使用vba代码发送电子邮件的按钮

用于使用vba代码发送电子邮件的按钮

问题描述:

我在Access 2010表单上创建了一个按钮。我想向我的表格中的所有客户发送电子邮件,并向电子邮件添加报告。此外,我的报告是基于客户的,因此我必须使用表格创建报告。我无法设法在没有表格的情况下获得基于客户的报告。用于使用vba代码发送电子邮件的按钮

我管理了大部分的项目。但是,当我说去表单上的下一个记录,并更改信息我的代码不起作用。 acNext没有做好工作。有没有办法让它工作?

如果你不介意,评论和变量是我的主要语言。

感谢

Public Sub Komut15_Click() 


    Dim oApp As New Outlook.Application 
    Dim oemail As Outlook.MailItem 
    Dim fileName As String, todaydate As String 


    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 

    Set db = CurrentDb 
    Set rs = db.Openrecordset("SELECT Ad, Soyad, Email, Limit, Adres FROM Musteriler Sorgu") 

    Do Until rs.EOF 

    On Error Resume Next 
    DoCmd.GoToRecord , , acNext 



     'Raporu müşteri bazında olması için düzenliyoruz 

     DoCmd.OpenReport "MusteriRaporu", acViewReport, "", "[Forms]![MusteriFormu]![Ad]=[Musteriler]![Ad]", acNormal 


     'Raporu pdf file olarak dışa aktarıyoruz 
     todaydate = Format(Date, "DDMMYYYY") 
     fileName = Application.CurrentProject.Path & "\MusteriRaporu_" & todaydate & ".pdf" 
     DoCmd.OutputTo acReport, "MusteriRaporu", acFormatPDF, fileName, False 



     Set oemail = oApp.CreateItem(olMailItem) 
     oemail.To = rs.Fields("Email") 
     oemail.Subject = Me.Firma_Adı & " Bakiye Raporu" 
     oemail.Body = "Bakiye raporunuz ektedir." 
     oemail.Attachments.Add fileName 


     With oemail 
      If Not oemail.To <> Me.Email Then 
       .Send 
       MsgBox "Email Gonderildi" 

      Else 
       MsgBox "Mail adresi hatalı!" 

      End If 

     End With 
    rs.MoveNext 

    On Error Resume Next 
    DoCmd.GoToRecord , , acNext 

    Loop 


    rs.Close 

    Set rs = Nothing 
    Set db = Nothing 



End Sub 

通过记录循环:

Public Sub Komut15_Click() 
    On Error GoTo ErrProc 

    Dim oApp As Outlook.Application 
    Dim oemail As Outlook.MailItem 
    Dim fileName As String, todaydate As String 

    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 

    Set oApp = New Outlook.Application 
    Set db = CurrentDb 
    Set rs = db.OpenRecordset("SELECT Ad, Soyad, Email, Limit, Adres FROM Musteriler Sorgu") 

    If rs.EOF Then GoTo Leave 
    rs.MoveLast 
    rs.MoveFirst 

    Dim idx As Integer 
    For idx = 1 To rs.RecordCount 

     'Raporu müsteri bazinda olmasi için düzenliyoruz 
     DoCmd.OpenReport "MusteriRaporu", acViewReport, "", "[Forms]![MusteriFormu]![Ad]=[Musteriler]![Ad]", acNormal 

     'Raporu pdf file olarak disa aktariyoruz 
     todaydate = Format(Date, "DDMMYYYY") 
     fileName = Application.CurrentProject.Path & "\MusteriRaporu_" & todaydate & ".pdf" 
     DoCmd.OutputTo acReport, "MusteriRaporu", acFormatPDF, fileName, False 

     Set oemail = oApp.CreateItem(olMailItem) 
     With oemail 
      .To = rs.Fields("Email") 
      .Subject = Me.Firma_Adi & " Bakiye Raporu" 
      .Body = "Bakiye raporunuz ektedir." 
      .Attachments.Add fileName 

      If Not .To <> Me.Email Then 
       .Send 
       MsgBox "Email Gonderildi" 
      Else 
       MsgBox "Mail adresi hatali!" 
      End If 
     End With 

     DoCmd.Close acReport, "MusteriRaporu", acSavePrompt 
     rs.MoveNext 
    Next idx 

Leave: 
    On Error Resume Next 
    rs.Close 
    Set rs = Nothing 
    Set db = Nothing 
    On Error GoTo 0 
    Exit Sub 

ErrProc: 
    MsgBox Err.Description 
    Resume Leave 
End Sub 
+0

谢谢您的回答:)但是,当你删除:Dodmc.Gotorecord acNext,所有改变的项目。正如我们可以看到的,我的报告以表单状态收集其数据。电子邮件发送条件也与我纠正。形式上的电子邮件。当我像我的代码一样执行我的项目时,我无法获得基于客户的报告。我已经尝试过,并且无法想出这种方式:) – fguveli

+0

我爱你的男人 fguveli