2016-01-13 4 views
0

Я создал таблицу Excel с помощью командной кнопки, которая вызывает макрос. Макрос создает новое электронное письмо через Microsoft Outlook, которое предоставляет список данных, в частности данные от ячеек от A5 до A500, которые имеют внутренний цвет RGB (255, 255, 204).Excel 2010 - макрос для определения конкретного цвета интерьера ячейки и получения результата

Однако я не получаю точных результатов. Макрос не только захватывает данные из ячеек указанного внутреннего цвета, но и дает мне данные из ячеек альтернативных цветов. Это может быть логическая ошибка с моей стороны.

Вот код, я работаю с:

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 
+2

Вы тестирование на 'A5: A500' но вытягивать данные из столбцов D, L и M. Это намеренно? Изменить: можете ли вы даже «Range» («D» & r) ', если' r' - это диапазон? И вы, возможно, захотите изменить второй «r» на 'c', например. – findwindow

+0

yes, измените 2-ю 'r' на' c' (или любую другую букву), а затем измените 'Range (" D '& r) 'на' Range ("D" и c.Row) ' –

+0

Спасибо. не уверен, правильно ли я следил за вашим направлением, но я изменил свой код на следующий, и он не дает никаких результатов (где с моим исходным кодом, он приводит к результатам, а не к правильным результатам.) Редактировать: Извините, Проблема в том, что синтаксис системы доски объявлений [Для каждого c In r.Cells] [(«D» & c.Row)] –

ответ

1

Почему вы используете переменную г дважды в течение 2 целей, и почему вы строите диапазон с помощью кнопок («D» & г). r - объект (в частности, ячейка). Я предполагаю, что вы хотите брать данные из D и M, но в том же ряду?

Если так, то это должно быть указано ниже.

Dim aCell в диапазоне

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" & г). то есть это снимается для Range («D» & r.Value) ... поэтому, если «r» ссылается на ячейку с номером в ней, например 599, то вы хотите ссылаться на ячейку «D599», что делает ваш код?

This works for me

+0

Спасибо Smackenzie. Я использую диапазон A5: A500 для определения цвета ячейки Затем, как только указанный цвет ячейки будет найден, я беру данные из столбцов D, L и M. этой строки. Я попытался использовать ваше предложение, но макрос больше не производит никаких результатов. Это похоже на метод I ' m не совсем нормально b Это тоже сработало, это просто не давало мне правильных результатов. Поэтому я больше смущен. лол. –

+1

для использования Range («M» & r) может выдавать результаты только в том случае, если вы сохраняете номер строки в ячейках с цветами, а затем код принимает значение r.value? У вас есть номера строк, записанные в ячейках A5: 500. – smackenzie

+1

Я бы тестировал это с добрым старым красным цветом, 255,0,0 ;-) – smackenzie

Смежные вопросы