excel-vba-verschachtelte for-each-Schleife
Ich arbeite an einem excel-makro und stecken geblieben an einer Stelle. Brauche Hilfe bitte, es zu lösen.
Ich suchen für 2 Zeilen im Blatt, und für jeden Wert in der 1 Zeile suchen Wert der Zelle in Zeile 2. Wenn der Bereich der Werte in Zeile 2 gleich einige bedingte Wert ist, dann kommen der Reihe 2 überprüfen Sie und setzen Sie das flag auf true gesetzt wird. Um dies zu erreichen verwendete ich zwei For Each
Schleife:
Sub Sendmail ()
For Each cell in Rows("5").Cells.SpecialCells(xlCellTypeConstant)
If cells.Value Like "*@*" Then
Subj = "Fill the Sheet"
Recipient = cell.Offset(0,-3).Value
EmailAddr = cell.Offset.Value
For Each row In Sheet14.Range("O244:AK244").Cells
If Not row = '8.00" Then
found = False
Else
found = True
End If
Next row
If found = False Then
Msg = "Hi " & Recipient & vbCrLf & vbCrLf
Msg = Msg & " Please fill the sheet for this week " & vbCrLf & vbCrLf
Set MItem = Outlook.CreateItem(oIMailItem)
With MItem
.To = EmailAddr
.Subject = Subj
.Body = Msg
.Save
End With
End If
End If
Next
End Sub
Den found
variable hier verwendet, ist definiert als boolescher Wert , aber ich bin nicht in der Lage, um es richtig zu nutzen, und jedes mal, wenn found = false
ausgeführt wird . Ich will nur einmal die Bedingung "true" für Zeile 2, dann werden nur die E-mail erstellt werden soll .
- Ich würde schauen in die Zeile 'Wenn Zeile Nicht = '8.00", Dann " zuerst von allen, die Sie mit einem einfachen Anführungszeichen beginnen und schließen mit einem doppelten Anführungszeichen. Wenn dies eine Zahl ist, dann Anführungszeichen sollten nicht erforderlich sein, wenn es nur text ist, verwenden Sie doppelte Anführungszeichen beiden Seiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paar Dinge, die ich bemerkt... ich habe nicht getestet, der code aber hier sind meine Allgemeinen Beobachtungen.
A) Ein krasses Stück code ist
If cells.Value Like "*@*" Then
. Ändern Sie es zuIf cell.Value Like "*@*" Then
B) Ändern
xlCellTypeConstant
zuxlCellTypeConstants
C)
EmailAddr = cell.Offset.Value
Wenn Sie wollen, pick-up die gleiche Zelle, die den Wert, die Sie nicht brauchenOffset
sonst geben Sie den Parameter OffsetD) @ChrisProsser bereits kommentiert
For Each row In Sheet14.Range("O244:AK244").Cells
E) um Gottes Willen (gut ignorieren, dass... Für Ihre sake), Verwenden Sie
Option Explicit
! Ich würde dringend raten, mitOption Explicit
ich würde auch empfehlen, einen Blick auf diesen link (SIEHE PUNKT 2 in dem link).Thema: Nach 'Err' wird die Menschliche
Link: http://www.siddharthrout.com/2011/08/01/to-err-is-human/
Ausgeführt werden, dass die For-Schleife;
für das gesamte Sortiment, ohne etwas zu tun, pro Bedingung. Das wäre das gleiche, als nur die überprüfung der letzten Zelle in dem Bereich, das ist wohl Wahr, so thats, warum Sie denken, False ausgeführt wird. Vielleicht ist deine if-Anweisung sollten in dieser Schleife sowie? Vielleicht wo gefunden = False ist?