Guardar doc con el nombre del valor que da un campo combinado
Mi idea es la siguiente. En vista de que no podemos o no sabemos utilizar en Word el valor de un campo que viene de Access, he pensado lo siguiente:
He creado una macro con este codigo:
''''''' 1º.- DESIGNAMOS LAS VARIABLES PARA LO QUE HEMOS COPIADO EN NUESTRO PORTAPAPELES LO PODAMOS UTILIZAR PARA GUARDAR EL ARCHIVO COMO, CON EL NOMBRE QUE TENEMOS EN NUESTRO PORTAPAPELES
Sub Macro9()
Dim fichero As String
Dim strTemp As String
Dim MyData As DataObject
Set MyData = New DataObject
MyData.GetFromClipboard
strTemp = MyData.GetText(1)
'''''''''''2º.- AQUI HE DECLARADO UNA VARIABLE PARA UTILIZAR EL DÍA EN EL QUE NOS ENCONTRAMOS, Y POSTERIORMENTE GUARDAR LA CARPETEA - MIGUEL + LA FECHA ACTUAL, ASI CADA DÍA, ME GUARDARÁ EL TRABAJO EN UNA CARPETA CON LA FECHA EN QUE HICE EL TRABAJO (PARA MI NECESARIO)
Dim a As Date
Dim RutaCarpeta As String
Dim RutaArchivo As String
a = Date
''''''''''''' 3º.- CREAMOS LA CARPETA + LA FECHA ACTUAL DEL SISTEMA ''''''''''''''
RutaCarpeta = dir("d:\" & "- Miguel_" & Format(a, "dd-mm-yyyy"), vbDirectory)
If RutaCarpeta <> "" Then
' MsgBox "LA CARPETA EXISTE"
Else
MkDir ("d:\") & "- Miguel_" & Format(a, "dd-mm-yyyy")
Shell "explorer.exe root = D:\" & "- Miguel_" & Format(a, "dd-mm-yyyy")
End If
'''''''''' 4º.- LE DECIMOS QUE GUARDE EL ARCHVIO EN LA CARPETA CREADA
RutaArchivo = "d:\" & "- Miguel_" & Format(a, "dd-mm-yyyy") & "\" & strTemp & ".doc"
If RutaArchivo = "d:\" & "- Miguel_" & Format(a, "dd-mm-yyyy") & "\" & strTemp & ".doc" Then
MsgBox RutaArchivo
''''''' 5º.- AQUI ES DONDE ME ATASCO, POR QUE HE INTRODUCIDO LA SIGUIENTE INSTRUCCION , DEBIDO A QUE A VECES SE PUEDE DAR EL CASO (a mi me pasa) A LA HORA DE GUARDA EL ARCHIVO, PUEDE QUE ANTERIORMENTE, YA HAYAMOS GUARDADO OTRO DOCUMENTO CON ESE MISMO NOMBRE DENTRO DE LA CARPETA, Y LO QUE NO DESEAMOS ES QUE MACHAQUE AL ANTERIOR DOCUMENTO. DE AHI LA PREGUNTA QUE DECLARAMOS, SI COINCIDE CON EL MISMO NOMBRE DE ARCHIVO A GUARDAR, ESCRIBELO TU A MANO EN EL MENSAJE QUE SALTA. SI NO COINCIDE PUES GUARDALO CON EL NOMBRE QUE TIENES ACTUALMENTE EN EL PORTAPAPELES.
ActiveDocument.SaveAs FileName:="d:\" & "- Miguel_" & Format(a, "dd-mm-yyyy") & "\" & InputBox("YA EXISTE, INTRODUCIR OTRO NOMBRE")
'ActiveDocument.SaveAs FileName:="d:\" & "- Miguel_" & Format(a, "dd-mm-yyyy") & "\" & strTemp
Else
'Application.Quit
ActiveDocument.SaveAs FileName:="d:\" & "- Miguel_" & Format(a, "dd-mm-yyyy") & "\" & strTemp
End If
End Sub
''''¿ DE DONDE TOMO EL VALOR DEL CAMPO PARA EL PORTAPAPELES?
''' En nuestro doc, el campo llamese "x" lo que hago es ponerlo en el primer renglón de mi documento doc. Cambiando ell tamaño de letra a 1 y el color de la letra lo paso al mismo color que tiene el fondo de papel, en mi caso a blanco, con lo cual el campo ni se ve ni se aprecia.
La macro autoopen se encarga de ir a mi otro "doc", que previamente ya esta combinado con Acces, copia su contenido y lo pega en este nuevo, basicamente viene a ser como ha algumentado Antoni, pero a mi forzosamente, tenía que hacerlo con un doc, ya que lo que ejecuto con el autoopen es una estructura de tabla predefinida en Word y que en combinación con access me sirve para pegarla en este nuevo documento.
Solamente tenemos que añadir otro pequeño código, y pegárselo al que he dado más arriba, justo donde termina el punto 4º.-, el cual hace irse al principio del documento Word, copia el campo "X" el que esta cambiado su tamaño a 1 y color a blanco, una vez que lo tenemos en el portapapeles, la macro seguirá su instrucción y lo guardará con ese nombre.
Por Dios, espero que se me haya entendido.
Total, la cuestión más importante ahora mismos es, no se como hacerle comparar, que lo voy a guardar con el nombre que tengo en el portapapeles, ejemplo "pepe.doc" si ya existe en la carpeta de destino con ese mismo nombre, que me salte el mensaje InputBox "YA EXISTE, INTRODUCIR OTRO NOMBRE"
Hasta ahora, lo único que he consigo es que siempre me pide el nombre.
Que es lo que falla? alguna idea.
No se si es que le falta un bucle, o que no le estoy diciendo bien la dirección de lo que quiero comparar.
P.D. Para que vba nos reconozca las variables que hemos designado anteriormente, tenemos que tener activada la casilla Microsoft Forms 2.0 Objetc Library.
¿Como?, estando en Word, Herramientas /Macro/Editor de Visual Basic, en esta nueva pantalla, en Herramientas/ Referencias..
O bien estando en Word pulsando Alt+f11 y en el Menú>Herramientas/ Referencias..