Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Schleife & If.. Then Next

VBA Schleife & If.. Then Next
24.11.2020 10:24:16
viktor0000000000
Hallo Community,
ich versuche mein Glück erneut und diesmal mit der Datei :-)
Vielleicht findet sich jemand der mein Problem lösen kann.
https://www.herber.de/bbs/user/141805.xlsm
PW: verteiler
Es geht um das Modul

Sub AnAlleVersenden
_________________________

Sub AnAlleVersenden()
'W?hle Spalte AD aus und erstelle eine ?berschrift f?r die Spalte
Sheets("Liste").Select
Range("AD1").Select
ActiveCell.FormulaR1C1 = "Controller"
Range("AD1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 8813846
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.Font.Bold = True
'F?ge XVerweis hinzu
Range("AD2").Select
ActiveCell.FormulaR1C1 = _
"=XLOOKUP(RC[-29],Zuordnung!R7C3:R168C3,Zuordnung!R7C1:R168C1)"
Range("AD2").Select
Selection.AutoFill Destination:=Range("AD2:AD15236")
Range("AD2:AD15236").Select
Dim j As Integer
For j = 7 To 8
Dim i As Integer
For i = 7 To 8
ThisWorkbook.Worksheets("Zuordnung").Activate
'Hier startet das Problem
If Sheets("Zuordnung").Cells(i, 1).Value = _
Sheets("Zuordnung").Range(Cells(6, 1), Cells(i - 1, 1)).Value Then
Else: GoTo Start
End If
Next i
Start:
'Hier endet das Problem.


Ich habe in der ersten Spalte Namen stehen (doppelt, dreifach,..) Er erstellt zwei Dateien    _
_
_
mit „Name1“ obwohl er erkennen müsste, dass er „Name1“ schon hatte und zum nächsten Name (i)  _
springen sollte.

'Das Tabellenblatt aktivieren
ThisWorkbook.Worksheets("Liste").Activate
'FilterEinstellungen auf null setzen
ActiveSheet.Columns("A:AD").AutoFilter
'Filter w?hlen - Referenz Zuordnung Zelle A2
ActiveSheet.Columns("A:AD").AutoFilter 30, "=" & Worksheets("Zuordnung").Cells(j, 1).Value
'Neues Tabellenblatt hinzuf?gen
'Tabelle leeren
ThisWorkbook.Worksheets("Exportliste").Cells.Clear
'Informationen kopieren
ActiveSheet.Range("A1:AC20000").Copy Destination:=ThisWorkbook.Worksheets(" _
Exportliste").Range("A1")
ThisWorkbook.Worksheets("Exportliste").Activate
'Exportliste versenden per Outlook an Controller
Dim DateiNameA As String
Dim NameDatei As String
DateiNameA = Worksheets("Zuordnung").Range("D3") & Worksheets("Zuordnung").Cells(j, 1) & " " _
_
_
& Worksheets("Zuordnung").Range("D5") & ".xlsx"
NameDatei = DateiNameA
Sheets("Exportliste").Copy
With ActiveWorkbook
.SaveAs filename:=DateiNameA
.Close
End With
Dim OutlookApp As Object
Dim OutlookMailItem As Object
Dim myAttachments As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMailItem = OutlookApp.CreateItem(0)
Set myAttachments = OutlookMailItem.Attachments
With OutlookMailItem
.To = Worksheets("Zuordnung").Cells(j, 2).Value
.Subject = Worksheets("Zuordnung").Range("D5").Value
.Body = Worksheets("Zuordnung").Range("D1").Value
.Attachments.Add NameDatei
.Display 'Hier Display durch Send ersetzen!!
End With
Set OutlookApp = Nothing
Set OutlookMailItem = Nothing
Next j
MsgBox "Die Email wurde an an alle Mitarbeiter versandt."
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleife & If.. Then Next
24.11.2020 11:25:17
Edmund
Hallo Viktor
Ich habe mal das Script bis zu deiner Fehlermeldung etwas gekürzt und deine Schleife angepasst.
Guck mal, ob das so funktioniert. Ich kann das leider nicht testen, da ich ja nicht deine Ordnerstruktur besitze.
Eine Änderung, die ich gemacht habe:
Ich gehe davon aus, dass alle Zeilen mit Namen überprüft werden sollen.
Deshalb ermittelt die For Next Schleife erstmal , bis zu welcher Zeile Einträge stehen, und arbeitet diese dann ab.
Wie gesagt, testen kann ich es nicht und bin deshalb gespannt auf deine Antwort.
https://www.herber.de/bbs/user/141814.xlsm
Gruß
Edmund
Anzeige
AW: VBA Schleife & If.. Then Next
24.11.2020 11:39:23
viktor0000000000
Hi,
vielen Dank!
Der erste Durchlauf mit F8 läuft sauber durch.
Beim zweiten Durchlauf sagt er mit einen Laufzeitfehler Typ 13 an; Typen unverträglich.
Debuggen bei Loop Until i = j Or j = ""
Gruß
Viktor
AW: VBA Schleife & If.. Then Next
24.11.2020 11:45:01
Edmund
Hallo Viktor,
sorry, da habe ich ja voll gepennt.
Ersetze mal die ganze Loop Zeile mit:
Loop Until i = j Or Cells(j, 1) = ""
AW: VBA Schleife & If.. Then Next
24.11.2020 11:26:03
UweD
Hallo
erstmal. Auf select kann in 99% verzichtet werden.
zum Fehler: ungetestet!!!
versuch das mal.

Option Explicit
Sub AnAlleVersenden()
'Wähle Spalte AD aus und erstelle eine Überschrift für die Spalte
With Sheets("Liste").Range("AD1")
.FormulaR1C1 = "Controller"
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 8813846
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With .Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.Bold = True
End With
End With
'Füge XVerweis hinzu
Sheets("Liste").Range("AD2:AD15236").FormulaR1C1 = _
"=XLOOKUP(RC[-29],Zuordnung!R7C3:R168C3,Zuordnung!R7C1:R168C1)"
Dim j As Integer
For j = 7 To 10
Dim i As Integer
For i = 7 To 10
ThisWorkbook.Worksheets("Zuordnung").Activate
'error.
If Sheets("Zuordnung").Cells(i, 1).Value = _
Sheets("Zuordnung").Cells(i - 1, 1).Value Then
Else: GoTo Start
End If
Next i
Start:
'Das Tabellenblatt aktivieren
ThisWorkbook.Worksheets("Liste").Activate
'FilterEinstellungen auf null setzen
ActiveSheet.Columns("A:AD").AutoFilter
'Filter wählen - Referenz Zuordnung Zelle A2
ActiveSheet.Columns("A:AD").AutoFilter 30, "=" & Worksheets("Zuordnung").Cells(j, 1).Value
'Neues Tabellenblatt hinzufügen
'Tabelle leeren
ThisWorkbook.Worksheets("Exportliste").Cells.Clear
'Informationen kopieren
ActiveSheet.Range("A1:AC20000").Copy Destination:=ThisWorkbook.Worksheets(" _
Exportliste").Range("A1")
ThisWorkbook.Worksheets("Exportliste").Activate
'Exportliste versenden per Outlook an Controller
Dim DateiNameA As String
Dim NameDatei As String
DateiNameA = Worksheets("Zuordnung").Range("D3") & Worksheets("Zuordnung").Cells(j, 1) & " " _
& Worksheets("Zuordnung").Range("D5") & ".xlsx"
NameDatei = DateiNameA
Sheets("Exportliste").Copy
With ActiveWorkbook
.SaveAs filename:=DateiNameA
.Close
End With
Dim OutlookApp As Object
Dim OutlookMailItem As Object
Dim myAttachments As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMailItem = OutlookApp.CreateItem(0)
Set myAttachments = OutlookMailItem.Attachments
With OutlookMailItem
.To = Worksheets("Zuordnung").Cells(j, 2).Value
.Subject = Worksheets("Zuordnung").Range("D5").Value
.Body = Worksheets("Zuordnung").Range("D1").Value
.Attachments.Add NameDatei
.Display 'Hier Display durch Send ersetzen!!
End With
Set OutlookApp = Nothing
Set OutlookMailItem = Nothing
Next j
MsgBox "Die Email wurde an an alle Mitarbeiter versandt."
End Sub

LG UweD
Anzeige
AW: VBA Schleife & If.. Then Next
24.11.2020 11:29:46
peterk
Hallo
Nur die Schleife als Code.
Die zweite Schleife (i) war der Fehler, Du arbeitest bereits am 2. Namen (j=8) und prüfst dann ob der 1. Name (i=7) im Bereich "A6" vorhanden ist. Für den Zähler i ist dies nie der Fall! und somit schickt Du Deine Emails Doppelt und Dreifach.

Dim j As Integer
For j = 7 To 10
With ThisWorkbook.Worksheets("Zuordnung")
If WorksheetFunction.CountIf(.Range(.Cells(6, 1), .Cells(j - 1, 1)), .Cells(j, 1)) > _
0 Then
GoTo EmailGeschickt
End If
End With
'Das Tabellenblatt aktivieren
ThisWorkbook.Worksheets("Liste").Activate
'FilterEinstellungen auf null setzen
ActiveSheet.Columns("A:AD").AutoFilter
'Filter wählen - Referenz Zuordnung Zelle A2
ActiveSheet.Columns("A:AD").AutoFilter 30, "=" & Worksheets("Zuordnung").Cells(j, 1). _
Value
'Neues Tabellenblatt hinzufügen
'Tabelle leeren
ThisWorkbook.Worksheets("Exportliste").Cells.Clear
'Informationen kopieren
ActiveSheet.Range("A1:AC20000").Copy Destination:=ThisWorkbook.Worksheets("Exportliste") _
.Range("A1")
ThisWorkbook.Worksheets("Exportliste").Activate
'Exportliste versenden per Outlook an Controller
Dim DateiNameA As String
Dim NameDatei As String
DateiNameA = Worksheets("Zuordnung").Range("D3") & Worksheets("Zuordnung").Cells(j, 1) & _
" " & Worksheets("Zuordnung").Range("D5") & ".xlsx"
NameDatei = DateiNameA
Sheets("Exportliste").Copy
With ActiveWorkbook
.SaveAs filename:=DateiNameA
.Close
End With
Dim OutlookApp As Object
Dim OutlookMailItem As Object
Dim myAttachments As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMailItem = OutlookApp.CreateItem(0)
Set myAttachments = OutlookMailItem.Attachments
With OutlookMailItem
.To = Worksheets("Zuordnung").Cells(j, 2).Value
.Subject = Worksheets("Zuordnung").Range("D5").Value
.Body = Worksheets("Zuordnung").Range("D1").Value
.Attachments.Add NameDatei
.Display 'Hier Display durch Send ersetzen!!
End With
Set OutlookApp = Nothing
Set OutlookMailItem = Nothing
EmailGeschickt:
Next j

Anzeige
AW: VBA Schleife & If.. Then Next
24.11.2020 11:45:05
viktor0000000000
Hi Peter,
das wars! Es klappt! Wahnsinn..
Vielen Dank an alle die sich die Mühe gemacht haben.
Gruß
Viktor

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige