Excel 2010 – macros检测单元的特定内部颜色并产生结果

我用一个调用macros的命令button创build了一个Excel电子表格。 该macros通过Microsoft Outlook生成新的电子邮件,提供数据列表,特别是A5到A500的单元格数据,其颜色为RGB(255,255,204)。

但是,我没有得到准确的结果。 macros不是专门捕获指定内部颜色的单元格中的数据,而是从交替颜色的单元格中提供数据。 这可能是我的一个逻辑错误。

这是我目前正在使用的代码:

Private Sub btnReport_Click() 'Create Email Message Dim r As Range Dim m As String Set r = ActiveSheet.Range("A5:A500") m = "Hello,<br><br>Here is some information:<br><br>" & _ "<table border=""1"" style=""width:98.7%"" align=""left"" ><tr style=""vertical-align:top;""><td style=""width:9.3%"" nowrap>" & _ "<b>Column 1</b></td><td style=""width:10%"" nowrap><b>Column 2</b></td><td style=""width:10%"" nowrap><b>Column 3</b></td></tr>" For Each r In r.Cells If r.Interior.Color = RGB(255, 255, 204) Then m = m & "<tr><td>" & ActiveSheet.Range("D" & r) & "</td><td>" & ActiveSheet.Range("L" & r) & "</td><td>" & _ ActiveSheet.Range("M" & r) & "</td></tr>" End If Next 'Open Email Dim olApp As Object Dim olMail As Object Dim name As String Set olApp = CreateObject("Outlook.Application") Set olMail = olApp.CreateItem(olMailItem) With olMail .To = "Dee Wolf" .Subject = "This is a subject line" .HTMLBody = m .Display End With Set olMail = Nothing Set olApp = Nothing End Sub 

为什么你为了两个目的而使用rvariables两次,为什么你要用(“D”&r)来build立一个范围。 r是一个对象(特别是一个单元格)。 我假设你想从D和M获取数据,但在同一行?

如果是这样的话应该如下所示。

Dim aCell as Range

 For Each aCell In r.Cells If r.Interior.Color = RGB(255, 255, 204) Then m = m & "<tr><td>" & ActiveSheet.Range("D" & aCell.Row) & "</td><td>" & ActiveSheet.Range("L" & aCell.Row) & "</td><td>" & _ ActiveSheet.Range("M" & aCell.Row) & "</td></tr>" End If Next 

您当然可以采取一个捷径,实际上使用r.Value时,使用Range(“D”&r)build立一个范围。 即这是射击范围(“D”&r.Value)…所以如果“r”引用一个数字像599的单元格,那么你想引用单元格“D599”这是你的代码呢?

这对我有用