2016-05-10 10 views
1

Ich habe eine Unterkomponente in einem Formular, mit der Benutzer Fehler melden und Verbesserungen am Formular vorschlagen können. Ich habe es so gut wie fertig, aber es kommt immer wieder zu Problemen beim Hinzufügen von Anhängen.Hinzufügen von Listbox-Elementen als E-Mail-Anhänge

Sub Submit() 
Dim OutApp As Object 
Dim OutMail As Object 
Dim Item 
Dim STR As String, AdminOnly As String, TruncBox As String, STRAttachments As String 

For Each cCont In Me.MultiPage1.SelectedItem.Controls 
    Select Case TypeName(cCont) 
     Case "TextBox" 
      If cCont.value = "Please enter a short description here." Or _ 
       cCont.value = "Please enter a short description here." Then 
        MsgBox ("Please enter all information.") 
        Exit Sub 
      ElseIf cCont.value = "" Then 
       MsgBox ("Please enter all information.") 
       Exit Sub 
      End If 
     Case "ComboBox" 
      If cCont.value = "" Then 
       MsgBox ("Please enter all information.") 
       Exit Sub 
      ElseIf InStr(cCont.value, "Report") Then 
       TruncBox = "BUG" 
      Else 
       TruncBox = "SUGGESTION" 
      End If 
    End Select 
Next 

STR = "{email address redacted}" 
If RecipientsListBox.ListCount = 0 Then 
    AdminOnly = MsgBox("Only admin will receive updates!", _ 
     vbOKCancel + vbExclamation, "No Users on Watch List") 
    If AdminOnly = vbCancel Then 
     Exit Sub 
    Else 
     STR = STR 
    End If 
Else 
    For Each Item In RecipientsListBox.List 
     STR = STR & ";" & Item 
    Next Item 
End If 

Application.ScreenUpdating = False 
Set OutApp = CreateObject("Outlook.Application") 

On Error GoTo cleanup 
    Set OutMail = OutApp.CreateItem(0) 
    On Error Resume Next 
    With OutMail 
     .to = STR 
     Call .Recipients.resolveall 
     .Subject = TruncBox & ": " & ActiveWorkbook.Name & ": " & ShortDescriptionTextBox 
     .Body = LongDescriptionTextBox 
     If AttachmentsListBox.ListCount = 0 Then 
     Else 
      For Each Item In AttachmentsListBox.List 
       STRAttachments = Item 
       .Attachments.Add STRAttachments 
      Next Item 
     End If 
     '.Send 'Or use Display 
     .Display 
    End With 
    On Error GoTo 0 
    Set OutMail = Nothing 
cleanup: 
Set OutApp = Nothing 
Application.ScreenUpdating = True 
End Sub 

Ich habe bei Schleifen zu jedem Punkt der AttachmentsListBox Kontrolle durch verschiedene Versuche laufen und bereit, um Hilfe zu bitten. Dieser letzte Versuch ergab Run-time error '94': Invalid use of Null mit der Zeile STRAttachments = Item, die im markierten Abschnitt null zurückgibt. Wenn ich mir ansehe, was ich bereits habe und im Vergleich zu anderen Suchen im Internet, verstehe ich das nicht. Ich habe die Variante Item zu STR in der Zeile STR = STR & ";" & Item oben zurückgegeben, und ich habe andere Beispiele von Strings gesehen, die als Anhänge zurückgegeben werden. Was vermisse ich?

+0

vergessen zu erwähnen 'cCont' ist öffentlich erklärt Kontrolle. – dubyarly

Antwort

2

Also, das ist ein Problem, das ich in der Vergangenheit identifiziert habe, aber ich habe die Ursache nicht gründlich erforscht. ListBox.List gibt ein mehrdimensionales Array von ListObjects zurück. Auch wenn Sie eine ListBox mit 1 Spalte haben, hat das List-Array mehrere Spalten. Wenn Sie mit einer For Each Schleife Schleife durchlaufen, versucht es, auf Werte in diesen anderen Spalten zuzugreifen, die nur in einem Null Wert resultieren. Versuchen Sie, eine For Schleife mit einem Zähler verwenden, wie zum Beispiel:

Private Sub UserFormButton_Click() 
    For i = 0 To Me.ListBox1.ListCount - 1 
     MsgBox Me.ListBox1.List(i) 
    Next i 
End Sub 
+0

So einfach ... Danke. – dubyarly

+0

Korrigieren. Das Array ist immer '10 * Zeilen'. Sie haben also immer die Spalten 0 bis 9 in diesem Array. Dies liegt an der Tatsache, dass ungebundene Datenquellen immer auf 10 Spalten beschränkt sind. Wenn Sie eine Listbox mit mehr als 10 Spalten haben möchten, müssen Sie die Eigenschaft 'RowSource' der Listbox verwenden. – Ralph

+0

@Ralph danke für mehr Klarheit. Ich habe es in der Vergangenheit [kurz] nachgeschlagen, aber ich habe keinen schlüssigen Grund für die 10 Spalten gefunden. – user3561813

Verwandte Themen