excel - 循环通过排除指定工作表的工作表
问题描述
我想从单个工作簿中的指定工作表中获取数据,然后从这些工作表中创建单独的电子邮件。
代码不会为每个工作表执行操作,然后移动到下一个。
我还想从操作中排除指定的工作表。
我在一个单独的模块中利用 Ron DeBruin 的RangetoHtml函数。
Sub ClientEvent_Email_Generation()
Dim OutApp As Object
Dim OutMail As Object
Dim count_row, count_col As Integer
Dim Event_Table_Data As Range
Dim Event2_Table_Data As Range
Dim strl As String, STR2 As String, STR3 As String
Dim WS As Worksheet
Dim I As Integer
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
For Each WS In ThisWorkbook.Sheets
WS.Activate
If ActiveSheet.Name <> "DATA INPUT" Then Or "FORMATTED DATA TABLE" Or "REP CODE MAPPING TABLE" Or "IDEAS TAB" Then
count_row = WorksheetFunction.CountA(Range("A10", Range("a10").End(xlDown)))
count_col = WorksheetFunction.CountA(Range("A10", Range("a10").End(xlToRight)))
Set Event_Table_Data = ActiveSheet.Cells.Range(Cells(9, 1), Cells(count_row, count_col))
Set Event2_Table_Data = Sheets("w61").Range(Cells(9, 1), Cells(count_row, count_col))
str1 = "<BODY style=font-size:12pt;font-family:Times New Roman>" & _
"Hello " & Range("L3").Value & ",<br><br>The following account(s) listed below appear to have an upcoming event<br>"
STR2 = "<br>Included are suggestions for an activity which may fit your client's needs.<br>"
STR3 = "<br>You may place an order, or contact us for alternate ideas if these don't fit your client."
On Error Resume Next
With OutMail
.To = ActiveSheet.Range("l4").Value
.cc = ""
.bcc = ""
.Subject = "Upcoming Event In Your Clients' Account(s)"
.display
.HTMLBody = str1 & RangetoHTML(Event_Table_Data) & STR2 & RangetoHTML(Event2_Table_Data) & STR3 & .HTMLBody
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End If
Next WS
End Sub
解决方案
循环(迭代)工作表
- 以下将遍历包含此代码 ( ) 的工作簿中的每个工作表,并打印(数组)
ThisWorkbook
中不包含的每个工作表名称以及以单元格开头的“非空”范围到(VBE: + 。Exceptions List
Exceptions
A9
Immediate window
CtrlG - 首先按原样运行它以查看结果是否令人满意,然后才在需要限定范围和单元格的地方添加您的电子邮件代码(不清楚),即使用
ws
代替ActiveSheet
和ws.
前面Cells
或Range
(ws.Cells(...)
,ws.Range(...)
如果有的话,或者是循环中当前工作表的一部分。 - 可能有更可靠的方法(请参阅Error in find last used cell in Excel with VBA 的答案)来定义(创建对)范围的引用,但这里的焦点设置在循环上(使用更不可靠)。
ACount
Option Explicit
Sub loopThroughWorksheets()
Const sFirst As String = "A9"
Const ExceptionsList As String _
= "DATA INPUT,FORMATTED DATA TABLE,REP CODE MAPPING TABLE,IDEAS TAB"
Dim Exceptions() As String: Exceptions = Split(ExceptionsList, ",")
Dim wb As Workbook: Set wb = ThisWorkbook
Dim sws As Worksheet
Dim srg As Range ' "Event_Table_Data"
Dim fCell As Range
Dim rCount As Long, cCount As Long
For Each sws In wb.Worksheets
If IsError(Application.Match(sws.Name, Exceptions, 0)) Then
Set fCell = sws.Range(sFirst)
rCount = sws.Range(fCell, fCell.End(xlDown)).Cells.Count
cCount = sws.Range(fCell, fCell.End(xlToRight)).Cells.Count
Set srg = fCell.Resize(rCount, cCount)
' e.g.:
Debug.Print sws.Name, srg.Address
' Your email code (per worksheet) here.
'Else
' Worksheet is in Exceptions Array: do nothing, or...
End If
Next sws
End Sub
推荐阅读
- java - How can I check if a bean has been loaded by springboot
- sql - 显示 itemname 、 type 和实际价格,其中实际价格是所有记录的价格折扣
- wavesplatform - 关于@waves/waves-transactions 库
- css - less-loader 模块构建失败 ~ import
- c++ - int main() 和带符号的 main() 之间的区别
- visual-studio - Ankh SVN 更新到最新版本后未在 Visual Studio 中的解决方案中添加新文件
- python-3.x - 使用 bs4 从
- javascript - 使用Javascript从带有每行标题的表中获取元素
- php - 我对 laravel / HTML 中的单选按钮有疑问
- android - Android Kotlin:自动转到下一个音频。如何?