2016-06-27 28 views
2

我得到下一個沒有錯誤消息 - 我錯過了什麼? 「下一步aCell」這段代碼的對於每個 - 編譯錯誤下一個沒有

enter image description here

目的的錯誤是確定從,要在Gmail電子郵件。標準基於Excel工作簿中的表格。

Sub SetsEmailAddress() 

Dim aCell As Range 
Dim aCell_1 As Long 
Dim strFrom As String 
Dim strTo As String 
Dim MyString As String 

For Each aCell In Sheets("Contact_Rev").Range("A2:A5").Cells 
If (aCell.Offset(1, 0).Value) = Sheets("Contact_Rev").Range("P2").Cells Then 
    If aCell.Offset(1, 2).Value = "From" Then 
     strFrom = aCell.Offset(1, 3).Value 
    End If 
    Select Case aCell.Offset(1, 2).Value 
     Case "Val" 
      strTo = (aCell.Offset(1, 3).Value) 
     Case "Invoice" 
      If IsNumeric(aCell.Offset(1, 3).Value) Then 
       For aCell_1 = 1 To aCell.Offset(1, 3).Value 
        strTo = "" 
        strTo = strTo & "" & (aCell.Offset(1, 3).Value) & strTo & "'" 
       Next aCell_1 
      End If 
    End Select 
    End If 
Next aCell 
end sub 

用.cells試過,沒有給出下標錯誤。

+0

嘗試'對於每個aCell在表( 「Contact_Rev」)範圍( 「A2:A5」)' (最後沒有'Cells')。另外,你是什麼意思「For Each aCell_1 In aCell.Offset(1,3).Value'?只有一個單元格。沒有'爲...每個'似乎都是必要的。 – Ralph

+0

對不起,你的答案'沒有單元格'感到困惑當我刪除。單元格時,我得到下標超出範圍。我需要創建一個電子郵件地址字符串,所以我認爲我需要重置單元格範圍來遍歷列表,但僅限於如果第3列中的偏移量=發票 –

+0

隨意重寫代碼 - 我需要確定strto是否應該是1值或所有電子郵件的字符串 –

回答

0

這裏是你的代碼的一些變化:

Option Explicit 

Sub SetsEmailAddress() 

Dim aCell As Range 
Dim aCell_1 As Long 
Dim strFrom As String 
Dim strTo As String 
Dim MyString As String 

Dim bolFound As Boolean 
Dim ws As Worksheet 

bolFound = False 
For Each ws In ThisWorkbook.Worksheets 
    If ws.Name = "Contact rev" Then bolFound = True 
Next ws 
If bolFound = False Then 
    MsgBox "Couldn't find the required sheet." & Chr(10) & "Aborting..." 
End If 

With ThisWorkbook.Worksheets("Contact rev") 
    For Each aCell In .Range("A2:A9") 
     If aCell.Offset(0, 1).Value2 = .Range("M2").Value2 Then 
      If aCell.Offset(0, 2).Value2 = "From" Then 
       strFrom = aCell.Offset(0, 3).Value2 
      End If 
      Select Case aCell.Offset(0, 2).Value2 
       Case "Val" 
        strTo = "'" & aCell.Offset(0, 3).Value2 & "'" 
       Case "Invoice" 
        strTo = strTo & ",'" & aCell.Offset(0, 3).Value2 & "'" 
      End Select 
     End If 
    Next aCell 
End With 

End Sub 

變化:

  1. 我在第一For...Each循環結束取出.Cells如評論所說以上。
  2. 第二個For...Each沒有意義。因此,我刪除了它。
  3. 現在,strTo被連接,以便在偏移單元格中查找「收件人」電子郵件地址。要分開這些電子郵件地址,請添加,。如果這是您需要的,您可以將其更改爲;
  4. Offset大部分不正確(根據提供的樣品數據並已調整)。
  5. 最後(也是最重要的)現在sub在使用之前先搜索工作表Contact_Rev。事實證明(在提供的示例文件中)沒有該名稱的工作表。表名是Contact rev(沒有下劃線)。因此,該表未找到,代碼無法工作。
+0

但是,仍然沒有像最後一個下一個acell - 仍然會產生下標錯誤河 –

+0

對於表格中的每個aCell(「Contact_Rev」)範圍(「A2:A5」) 下標錯誤 –

+0

添加了End If和End Select仍然收到錯誤消息。 –

0

你錯過了和 「結束,如果」 接近尾聲 - 試試這個:

Sub SetsEmailAddress() 
Dim aCell As Range 
Dim aCell_1 As Range 
Dim strFrom As String 
Dim strTo As String 
Dim MyString As String 

For Each aCell In Sheets("Contact_Rev").Range("A2:A5").Cells 

    If (aCell.Offset(1, 0).Value) = Sheets("Contact_Rev").Range("P2").Cells Then 
     If aCell.Offset(1, 2).Value = "From" Then 
      strFrom = aCell.Offset(1, 3).Value 
     End If 
     Select Case aCell.Offset(1, 2).Value 
      Case "Val" 
       strTo = (aCell.Offset(1, 3).Value) 
      Case "Invoice" 
       For Each aCell_1 In aCell.Offset(1, 3).Value 
        strTo = "" 
        strTo = strTo & "" & (aCell.Offset(1, 3).Value) & strTo & "'" 
       Next aCell_1 
     End Select 
    End If 

Next aCell 
End Sub