有时逐行阅读工作表并有选择地从中获取数据很有用。 下面的示例显示了如何执行此操作。
本文假定读者已显示开发人员功能区并且熟悉 VBA 编辑器。 如果没有,请谷歌“Excel Developer Tab”或“Excel Code Window”。
以下示例通过检查每一行电子邮件地址并将它们连接成一个地址行来处理数据。 虽然 Excel 具有内置的转置函数,但我们打算用我们的代码排除一些特定的收件人并添加分隔符。
我们的申请只需要一张纸。 将以下信息复制到单元格 A1:
| 邮箱 |
| tcruise@paramount.com |
| 朱莉娅.R@disney.com |
| Jules.dassin@gaumont.co.fr |
| EnricoFellini@cinecitta.co.it |
| 玛丽蒙特rary@bedlam.org.uk |
在表单上放置一个按钮以启动代码。
假设有数百封这样的电子邮件,而不是只有五封; 我们希望向每个人发送相同的信息和相同的剧本副本。 有几种方法可以做到这一点,most 特别是通过从 VBA 代码调用电子邮件程序,如 Outlook。 但是,此练习有两个目的:
- 展示如何轻松地循环工作表;
- 突出显示 Excel 检查每一行并对其采取行动的能力。
VBA代码
VBA 代码将连接所有地址,在每个地址后插入一个分号,以便将它们一次性粘贴到电子邮件的收件人字段中。 您会从代码中注意到,在检查行之后,它将排除法语行。
插入一个模块,然后输入以下内容:
Option Explicit
Dim strEmail As String
Dim strAll As String
Sub Main()
strAll = ""
Range("C2") = strAll 'clear previous program results
Sheets("Sheet1").Select
Range("A2").Select
Do While ActiveCell > "" 'loop until row 7
strEmail = ActiveCell
If Right(strEmail, 2) <> "fr" Then 'exclude France
strAll = strAll & strEmail & ";"
End If
Range("A" & ActiveCell.Row + 1).Select 'move on a row in the SAME column
Loop
Range("C2") = strAll
End Sub
代码将活动单元格保留在 A 列中,只有行继续移动。 要连续引用其他地方的信息,我们将使用:
Variable = Activecell.offset(offset rows, offset columns)
例如,要从活动行中的 B 列获取值,代码将读取 Activecell.offset(0, 1). 要在 A2 中获取 A3 的值,请阅读 Activecell.offset(-1, 0)。
要测试您的代码,请将按钮分配给宏“Main”。
作为反垃圾邮件的预防措施,某些 Internet 服务提供商可能会限制您一次可以发送的电子邮件数量。 如果您使用此方法,最好在一次发送数百封电子邮件之前与他们核实。
处理 Excel 文件损坏

作者简介:
Felix Hooker 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 rar 腐败 和sql恢复软件产品。 欲了解更多信息,请访问 datanumen.com
