La Web del Programador: Comunidad de Programadores
 
    Pregunta:  58872 - PROBLEMAS CON MACRO EXCEL
Autor:  Wilberth Mendez
Tengo problemas para enviar por correo información de las celdas de una hoja de excel por medio del Outlook.
El código es el siguiente:
Sub Enviar()
Set objOutlook = CreateObject("Outlook.Application")
'Create and open a new email for input.
Set objItem = objOutlook.CreateItem(olMailItem)
With objItem
.To = "[email protected]"
.Subject = "Nueva Información para Cotizar"
.body = Range("a1:i15")
.display
End With
'Quit Microsoft Outlook
Set objOutlook = Nothing
End Sub

Todo funciona bien excepto donde trato de obtener todas las celdas con la instrucción "Range". Si trato de obtener una por una si funciona. Ej. range("a1")......... range("a2").....etc pero como comprenderán este método es muy engorroso y lento.

  Respuesta:  Eider Mauricio Aristizábal Erazo
La instrucción
.body = Range("a1:i15")
espera una cadena de texto, pero tu le estas asignando un rango de celdas (135 en total). mientras que la instrucción:
.body = Range("a1")
solo asigna una celda e implicitamente VBA retorna el valor (texto) de la celda.

Es mejor utilizar el método "Engorroso" no lo veo de esa manera, seria algo asi:

Sub EnviarCelda(CeldaEnviar as range) 

Set objOutlook = CreateObject("Outlook.Application")
'Create and open a new email for input.
Set objItem = objOutlook.CreateItem(olMailItem)
With objItem
.To = "[email protected]"
.Subject = "Nueva Información para Cotizar"
.body = CeldaEnviar
.display
End With
'Quit Microsoft Outlook
Set objOutlook = Nothing
End Sub

sub Enviar()
dim celda as range
foreach celda in range("a1:i15")
EnviarCelda(celda)
next celda
end sub