Excel - Copiar de Excel a Outlook y Word

   
Vista:

Copiar de Excel a Outlook y Word

Publicado por Omar (5 intervenciones) el 13/02/2016 06:32:18
Hola,

Necesito hacer una macro en Excel, la cual haga las siguientes funciones con un archivo abierto:
1. Abrir un nuevo email con Outlook
2. Enviar emails copiando en imagenes diferentes hojas de Excel
3. Abrir word, eliminar la imagen anterior (o en su caso guardar el archivo con un nombre especifico y sobrescribir ese archivo), copiar una hoja como imagen, guardar el archivo, y adjuntar estos archivos en un email.

La parte de abrir Outlook, y crear un nuevo email la tengo, sin embargo no encuentro la forma de que copie de manera especifica ciertas hojas como imagenes, y mucho menos que pueda abrir Word, copiar como imagen una hoja y adjuntarlo a un nuevo email de Outlook. Si me pudieran ayudar con esta tarea se los agradecerìa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Copiar de Excel a Outlook y Word

Publicado por agustin (149 intervenciones) el 13/02/2016 09:08:24
Tiene que ser con excel? Quizás autoit te vendría mejor ya que la parte que no se como hacerla es la de convertir una hoja en imagen. El resto se puede hacer con automation de Microsoft.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por Omar (5 intervenciones) el 13/02/2016 16:22:23
Lo que pasa es que no puedo instalar nada extra y si tiene que ser en Excel para que funcione en diferentes máquinas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por agustin (149 intervenciones) el 13/02/2016 20:25:14
a ver, autoit es un programa interprete de scripts y que una vez lo tengas bien lo conviertes en un .exe y no necesita ejecucion. Simplemente ejecutas ese archivo y automatizas lo que hayas querido hacer y eso funcionaria en cualquier maquina porque lo podrias hacer usando atajos de teclado eso es igual en todos los excel, words y demas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por Omar (5 intervenciones) el 13/02/2016 20:47:58
Y creo que yo no fui claro no puedo descargar, instalar, meter una usb o Vd nada solamente el Excel que tengo instalado pero te agradezco tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por agustin (149 intervenciones) el 14/02/2016 00:20:24
mira a ver si te ayuda un poco esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Sub ExportarImagenEnWord()
    Dim applWord As Word.Application
    Dim docWord As Word.Document
    Dim paraWord As Word.Paragraph
    Dim oldRange As Range
 
    'Creo una nueva instancia del Word:
    Set applWord = New Word.Application
 
    'Hago al Word visible:
    applWord.Visible = True
 
    'Maximizo la ventana del Word:
    applWord.WindowState = wdWindowStateMaximize
 
    'Añado un nuevo documento de Word:
    Set docWord = applWord.Documents.Add
 
    'Le damos el formato al documento - Orientacion, Tamaño de pagina y Margenes:
    With docWord.PageSetup
        .LineNumbering.Active = True
        .Orientation = wdOrientPortrait
        .TopMargin = applWord.InchesToPoints(1)
        .BottomMargin = applWord.InchesToPoints(1)
        .LeftMargin = applWord.InchesToPoints(1.5)
        .RightMargin = applWord.InchesToPoints(1.5)
        .PageWidth = applWord.InchesToPoints(8)
        .PageHeight = applWord.InchesToPoints(11)
        .Gutter = applWord.InchesToPoints(0.25)
        .GutterPos = wdGutterPosLeft
    End With
 
    'The Selection Property returns the the selected area in the document or if nothing is selected it represents the insertion point.
    With applWord.Selection
        .Font.Name = "Arial"
        .Font.Size = 12
        .Font.Bold = True
        .Font.Color = wdColorRed
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        'set spacing after this paragraph, in points:
        .ParagraphFormat.SpaceAfter = 10
 
    End With
 
    Application.ScreenUpdating = False
 
    For i = 1 To ThisWorkbook.Sheets.Count
        'Selecciono la hoja indicada por el indice
        ThisWorkbook.Sheets(i).Select
 
        If i > 1 Then
            'Inserto el nombre de la hoja en el documento. el & vbCrLf es para añadir un salto de linea:
            applWord.Selection.TypeText Text:=vbCrLf & vbCrLf
        End If
 
        'Inserto el nombre de la hoja en el documento. el & vbCrLf es para añadir un salto de linea:
        applWord.Selection.TypeText Text:=ThisWorkbook.ActiveSheet.Name & vbCrLf
 
        Set oldRange = ActiveCell.CurrentRegion
 
        'Selecciono el rango que quiero convertir en imagen
        Range("A1:F14").Select
 
        'Guardo la seleccion en el portapapeles como una imagen con el formato indicado
        Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
        oldRange.Select
 
        'Pego la tabla que copie como imagen en el portapapeles
        applWord.Selection.Paste
    Next i
 
    Application.ScreenUpdating = True
 
    'Limpio la variable de rango utilizada de modo auxiliar
    Set oldRange = Nothing
 
    'Añado un nuevo parrafo al final del documento:
    docWord.Paragraphs.Add
 
    'Le indico que lo añada al final del documento y le indico el texto del parrafo.
    Set paraWord = docWord.Paragraphs(docWord.Paragraphs.Count)
    paraWord.Range.Text = "Escribes lo que quieras y si no lo quieres pues nada, eliminas desde aqui hasta la instruccion donde se guarda el documento."
 
    'damos formato al nuevo parrafo de texto:
    With paraWord.Range
 
        .ParagraphFormat.Alignment = wdAlignParagraphJustify
        .ParagraphFormat.LineSpacingRule = wdLineSpaceSingle
        .ParagraphFormat.LeftIndent = applWord.InchesToPoints(0.25)
        .ParagraphFormat.FirstLineIndent = applWord.InchesToPoints(0.5)
        .ParagraphFormat.SpaceAfter = 10
 
        With .Font
 
            .Name = "TimesNewRoman"
            .Size = 10
            .Bold = False
            .Color = wdColorBlue
 
        End With
 
    End With
 
 
    docWord.Paragraphs.Add
 
    Set paraWord = docWord.Paragraphs(docWord.Paragraphs.Count)
    paraWord.Range.Text = "Otro parrafo mas de texto."
 
 
    With paraWord.Range
 
        .ParagraphFormat.Alignment = wdAlignParagraphJustify
        .ParagraphFormat.LineSpacingRule = wdLineSpaceDouble
        .ParagraphFormat.LeftIndent = applWord.InchesToPoints(0.75)
        .ParagraphFormat.FirstLineIndent = applWord.InchesToPoints(1)
        .ParagraphFormat.SpaceAfter = 10
 
        With .Font
 
            .Name = "Verdana"
            .Size = 10
            .Bold = False
            .Color = wdColorGreen
 
        End With
 
    End With
 
    'Para guardar el documento en el lugar por defecto:
    docWord.SaveAs Filename:="newDoc1.docx"
 
    'Para especificar el documento en una direccion deseada:
    'DocWord.SaveAs fileName:="C:\Documents and Settings\Usuario\Mis documentos\newDoc1.docx"
 
    'Guardo y cierro el documento de Word.
    docWord.Close SaveChanges:=wdSaveChanges
 
    'Cierro el Word:
    applWord.Quit
 
    'Limpio las variables:
    Set docWord = Nothing
    Set applWord = Nothing
    Set paraWord = Nothing
End Sub
Ese codigo de vba lo que hace es copiar una seleccion de cada pagina en el portapapeles como imagen, luego abre un documento de word y lo pega en el y luego guarda el documento de word. Es lo que puedo ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por Omar (5 intervenciones) el 14/02/2016 03:46:32
Muchas gracias, este esta muy especifico para todo lo que puedes hacer, me imagino que para copiar directamente en un email como imagen es muy parecido el codigo, y solamente en el campo de texto se copia lo deseado correcto? Te agradezco mucho ya sobre de este codigo puedo trabajar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por agustin (149 intervenciones) el 14/02/2016 09:50:56
Exacto. Los paragraph los puse para que vieses como se añaden párrafos con formato pero si no los necesitas pues sobran. Sólo me quede con el gusanillo de que al hacer eso el word me redimensionaba las imágenes y no quería que lo hiciese y estuve un buen rato intentando evitarlo pero no di con la manera. Si Doy con el modo te lo pongo.
Sobre el Outlook no puedo ayudarte ya que no lo tengo instalado pero por mensajes anteriores a este se hace algo de automation desde excel a Outlook con lo que es cuestión de verlo y adaptar mi código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar de Excel a Outlook y Word

Publicado por agustin (149 intervenciones) el 14/02/2016 11:00:06
ya consegui redimensionar las imagenes. Te pongo el codigo final para que puedas estudiarlo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
Sub ExportarImagenEnWord()
    Dim applWord As Word.Application
    Dim docWord As Word.Document
    Dim paraWord As Word.Paragraph
    Dim image As Word.InlineShape
    Dim oldRange As Range
    Dim ratio, i As Integer
 
    'Creo una nueva instancia del Word:
    Set applWord = New Word.Application
 
    'Hago al Word visible:
    applWord.Visible = True
 
    'Maximizo la ventana del Word:
    applWord.WindowState = wdWindowStateMaximize
 
    'Añado un nuevo documento de Word:
    Set docWord = applWord.Documents.Add
 
    'Le damos el formato al documento - Orientacion, Tamaño de pagina y Margenes:
    With docWord.PageSetup
        .LineNumbering.Active = True
        .Orientation = wdOrientPortrait
        .TopMargin = applWord.InchesToPoints(1)
        .BottomMargin = applWord.InchesToPoints(1)
        .LeftMargin = applWord.InchesToPoints(1.3)
        .RightMargin = applWord.InchesToPoints(1.3)
        .PageWidth = applWord.InchesToPoints(8)
        .PageHeight = applWord.InchesToPoints(11)
        .Gutter = applWord.InchesToPoints(0.25)
        .GutterPos = wdGutterPosLeft
    End With
 
    'The Selection Property returns the the selected area in the document or if nothing is selected it represents the insertion point.
    With applWord.Selection
        .Font.Name = "Arial"
        .Font.Size = 12
        .Font.Bold = True
        .Font.Color = wdColorRed
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
 
        'set spacing after this paragraph, in points:
        .ParagraphFormat.SpaceAfter = 10
    End With
 
    Application.ScreenUpdating = False
 
    'Elijo el ratio de aspecto deseado para las imagenes que meteremos al documento de Word
    ratio = 100
 
    For i = 1 To ThisWorkbook.Sheets.Count
        'Selecciono la hoja indicada por el indice
        ThisWorkbook.Sheets(i).Select
 
        If i > 1 Then
            'Inserto el nombre de la hoja en el documento. el & vbCrLf es para añadir un salto de linea:
            applWord.Selection.TypeText Text:=vbCrLf & vbCrLf
        End If
 
        'Inserto el nombre de la hoja en el documento. el & vbCrLf es para añadir un salto de linea:
        applWord.Selection.TypeText Text:=ThisWorkbook.ActiveSheet.Name & vbCrLf
        Set oldRange = ActiveCell.CurrentRegion
 
        'Selecciono el rango que quiero convertir en imagen
        Range("A1:F14").Select
 
        'Guardo la seleccion en el portapapeles como una imagen con el formato indicado
        Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
        oldRange.Select
 
        'Pego la tabla que copie como imagen en el portapapeles
        applWord.Selection.Paste
 
        'Si es una imagen la redimensiono al tamaño deseado
        'Realmente no necesitamos el condicional ya que sabemos que será una imagen
        With docWord.InlineShapes.Item(i)
            If .Type = wdInlineShapePicture Then
                .LockAspectRatio = msoCTrue
                .ScaleHeight = ratio
            End If
        End With
    Next i
 
    'Con este bucle recorro todos los InlineShapes y si son imagenes las redimensiono al tamaño deseado
    'O lo hacemos como está dentro del bucle de arriba, o lo hacemos asi, el resultado es el mismo
    'For Each image In docWord.InlineShapes
    '    If image.Type = wdInlineShapePicture Then
    '        image.LockAspectRatio = msoCTrue
    '        image.ScaleHeight = ratio
    '    End If
    'Next
 
    'Otro modo de hacerlo
    'For i = 1 To docWord.InlineShapes.Count
    '    With docWord.InlineShapes.Item(i)
    '        If .Type = wdInlineShapePicture Then
    '            .LockAspectRatio = msoCTrue
    '            .ScaleHeight = ratio
    '        End If
    '    End With
    'Next i
 
    'Limpio la variable usada para recorrer las imagenes y redimensionarlas
    Set image = Nothing
 
    Application.ScreenUpdating = True
 
    'Limpio la variable de rango utilizada de modo auxiliar
    Set oldRange = Nothing
 
    'Añado un nuevo parrafo al final del documento:
    docWord.Paragraphs.Add
 
    'Le indico que lo añada al final del documento y le indico el texto del parrafo.
    Set paraWord = docWord.Paragraphs(docWord.Paragraphs.Count)
    paraWord.Range.Text = "Escribes lo que quieras y si no lo quieres pues nada, eliminas desde aqui hasta la instruccion donde se guarda el documento."
 
    'damos formato al nuevo parrafo de texto:
    With paraWord.Range
        .ParagraphFormat.Alignment = wdAlignParagraphJustify
        .ParagraphFormat.LineSpacingRule = wdLineSpaceSingle
        .ParagraphFormat.LeftIndent = applWord.InchesToPoints(0.25)
        .ParagraphFormat.FirstLineIndent = applWord.InchesToPoints(0.5)
        .ParagraphFormat.SpaceAfter = 10
 
        With .Font
            .Name = "TimesNewRoman"
            .Size = 10
            .Bold = False
            .Color = wdColorBlue
        End With
    End With
 
    docWord.Paragraphs.Add
    Set paraWord = docWord.Paragraphs(docWord.Paragraphs.Count)
    paraWord.Range.Text = "Otro parrafo mas de texto."
 
    With paraWord.Range
        .ParagraphFormat.Alignment = wdAlignParagraphJustify
        .ParagraphFormat.LineSpacingRule = wdLineSpaceDouble
        .ParagraphFormat.LeftIndent = applWord.InchesToPoints(0.75)
        .ParagraphFormat.FirstLineIndent = applWord.InchesToPoints(1)
        .ParagraphFormat.SpaceAfter = 10
 
        With .Font
            .Name = "Verdana"
            .Size = 10
            .Bold = False
            .Color = wdColorGreen
        End With
    End With
 
    'Para guardar el documento en el lugar por defecto:
    docWord.SaveAs Filename:="newDoc1.docx"
 
    'Para especificar el documento en una direccion deseada:
    'DocWord.SaveAs fileName:="C:\Documents and Settings\Usuario\Mis documentos\newDoc1.docx"
 
    'Guardo y cierro el documento de Word.
    docWord.Close SaveChanges:=wdSaveChanges
 
    'Cierro el Word:
    applWord.Quit
 
    'Limpio las variables:
    Set docWord = Nothing
    Set applWord = Nothing
    Set paraWord = Nothing
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Copiar de Excel a Outlook y Word

Publicado por Omar (5 intervenciones) el 15/02/2016 20:55:10
Te agradezco mucho ya la hice y me funciona a la perfección quedó excelente . ya me ahorraste 10 clicks :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar