2017-04-12 64 views
0

我的宏是爲某些客戶端發送電子郵件。只有在列B的某一行有X時,纔會發送電子郵件,然後通過創建一個新表單連接到電子郵件上的客戶端,將整行發送到客戶端。 問題是我需要創建一個循環來計算包含字母X的所有列,因爲此宏只計算包含字母X的第一行,然後其他字符不會轉到新工作表並且因此它不會去客戶端。儘管有櫃檯,但我的宏中一切正常。當我運行它時,只有包含X的第一行發送給客戶端,而其他頁面不發送。你們能幫我嗎?循環查找VBA列中的字母

代碼:

LinhaInicio = 1 
While Workbooks(planilha).Sheets("Boletas").Cells(LinhaInicio, 2) <> "X" 
    LinhaInicio = LinhaInicio + 1 
Wend 
LinhaFim = LinhaInicio 
While Workbooks(planilha).Sheets("Boletas").Cells(LinhaFim, 2) = "X" 
    LinhaFim = LinhaFim + 1 
Wend 
LinhaFim = LinhaFim - 1 
RangeInicio = Workbooks(planilha).Sheets("Boletas").Cells(LinhaInicio, 26).Address 
RangeFim = Workbooks(planilha).Sheets("Boletas").Cells(LinhaFim, 34).Address 
Set RangeCopiar = ActiveSheet.Range(RangeInicio, RangeFim) 
+1

有什麼代碼是什麼樣子? – Clyde

+0

LinhaInicio = 1 雖然工作簿(planilha).Sheets( 「Boletas」)。將細胞(LinhaInicio,2)<> 「X」 LinhaInicio = LinhaInicio + 1 WEND LinhaFim = LinhaInicio 雖然工作簿(planilha).Sheets ( 「Boletas」)細胞(LinhaFim,2)= 「X」 LinhaFim = LinhaFim + 1 WEND LinhaFim = LinhaFim - 1 RangeInicio =工作簿(planilha).Sheets( 「Boletas」)細胞(LinhaInicio ,26)。地址 RangeFim = Workbooks(planilha).Sheets(「Boletas」)。Cells(LinhaFim,34).Address Set RangeCopiar = ActiveSheet.R ange(RangeInicio,RangeFim) 這就是需要循環找到其他人的部分X –

+1

將代碼添加到您的問題中,並使用「{}」按鈕對其進行格式化。註釋中的代碼不可讀 –

回答

0

也許嘗試是這樣的:

Dim vArr As Variant 
Dim LinhaFim As Long 
Sub mainLoop() 
    'put all values into variant array vArr 
    vArr = Workbooks(planilha).Sheets("Boletas").UsedRange 
    For i = LBound(vArr) To UBound(vArr) 

     If vArr(i, 2) = "X" Then 
      Nestedloops (i) 'initiate nested loops 
      i = LinhaFim 'artificially increment counter 
     End If 

    Next i 
End Sub 


Sub Nestedloops(LinhaIncio As Long) 
    With Workbooks(planilha).Sheets("Boletas") 
     LinhaFim = linhaInicio 
     While vArr(LinhaFim, 2) = "X" 
      LinhaFim = LinhaFim + 1 
     Wend 
     LinhaFim = LinhaFim - 1 
     RangeInicio = .Cells(LinhaInicio, 26).Address 
     RangeFim = .Cells(LinhaFim, 34).Address 
     Set RangeCopiar = ActiveSheet.Range(RangeInicio, RangeFim) 

     'email code goes here 

    End With 
End Sub 

添能想出更好的東西,雖然可能要看看他有

+0

克萊德。我試圖搜索互聯網上的所有內容。讓我們等待蒂姆。 –

+0

如果他沒有 - 第二個我會稍微調整後,我與這位客戶脫機電話 – Clyde

+0

今天對不起粗魯的一天 - 不知道這是否有幫助,但問題是你的第一個循環尋找第一個x第二個循環尋找x的末尾,然後你不爬回去尋找更多的x,所以它需要包含在它自己的循環中。但計數器應增加超過x的數量,否則它將複製電子郵件信息。不確定數據是什麼樣子,但這可能會讓你接近至少 – Clyde

0

的時候,您想要將X字母搜索到列或行,抱歉,我不明白你想說什麼。你想創建一個循環來計算每一行和每列的所有X字母,或者只計算一列中的每一行?

+0

lonut,我的宏搜索列B包含字母X,然後它發送一封電子郵件給客戶,方法是創建一個新的工作表,其中X列在B列,但只有當X按順序排列時才能工作,所以當字母X在行3和第5行,只是第3行去到表單。明白了嗎? –

+0

我不知道你是否已經定義了一個數組,但如果你有你的代碼應該是這樣的: 對於i = 2〜UBOUND(your_array,1) 如果your_array(1,2)= X,則 您的病情 結束時,如果 接下來我 如果你不有一個數組,你應該定義一個,它會改善你的代碼。 – Ionut

0

這裏是你如何定義一個數組:

Dim timelinessSheet, o As Variant 
timelinessSheet = Worksheets("your_sheet_name").Range("A2:X" & Worksheets("your_sheet_name").Cells(Worksheets("your_sheet_name").Rows.Count, "B").End(xlUp).Row).Value 

,然後你的代碼

dim i as long 
for i=2 to ubound (timelinessSheet,1) 
if timelinessSheet(i,2)= X then 
    Your_condition 
end if 
next I