Jump to content

Alex_edm

Members
  • Content Count

    20
  • Joined

  • Last visited

About Alex_edm

  • Rank
    Member

Converted

  • Campos
    ;

Recent Profile Visitors

172 profile views
  1. Hola: En primer lugar, gracias por responder. Si, quiero abrir la carpeta donde se ha guardado el archivo Word y por otra parte abrir el archivo Word. He probado a colocar AppActivate... tal y como me dices pero sigue sin funcionar. Como alternativa se me ha ocurrido minimizar el propio excel con Application.WindowState = xlMinimized y entonces el word queda en primer plano. Respecto a lo que me dices de On Resume Next, lo he colocado porque lo he leido por ahi. Podrías indicarmecomo me podría afectar negativamente (te hablo desde mi total desconocimiento). Muchas gracias. Un saludo.
  2. Hola: El excel como tal no puedo adjuntarlo, tendría que adaptarlo mucho porque tiene mucha información confidencial. Pongo el código del Módulo a ver si con eso vale, si no es suficiente adapto el archivo y lo subo; adjunto el módulo tambien. Muchas gracias: 'Variables publicas que se pueden usar en todo el Excel Public K As Integer Public pctCompl As Single Sub ExcelModificaPlantillaWord(Abierto As Single) Application.ScreenUpdating = False Application.DisplayAlerts = False 'Dim objWord As Word.Application, wdDoc As Word.Document Static datos(0 To 1, 0 To 7) As String On Error Resume Next Set a = Sheets(ActiveSheet.Name) 'Creamos un objeto con la hoja de excel Static ruta_save As String Static rutainf As String Static Directorio As FileDialog Static objword As Object Static wdDoc As Object Set aDoc = ActiveDocument If Abierto = 1 Then GoTo FormularioAbierto 'Se salta parte del codigo despues de volver del formulario End If 'InputBox para introducir el número de máquina / proyecto num_maq = InputBox(" INTRODUCIR EL NÚMERO DE" & vbNewLine & " MÁQUINA / PROYECTO", "Nº MÁQUINA") 'Copia el nombre del archivo en una celda, que a su vez se utiliza para generar placas de características ActiveSheet.Range("L21").Value = num_maq nom = ActiveWorkbook.Name 'Determinamos el nombre del archivo pto = InStr(nom, ".") nomarch = Left(nom, pto - 1) 'ruta = ThisWorkbook.Path & "\" & nomarch & ".docx" 'Ruta de donde se va a abrir el archivo Word ruta_plantilla = ThisWorkbook.Path & "\" & nomarch & ".docx" 'Ruta de donde se va a abrir el archivo Word Set objword = CreateObject("Word.Application") objword.DisplayAlerts = wdAlertsNone objword.Visible = True 'Selección de directorio donde se va a guardar el archivo word de salida Set Directorio = Application.FileDialog(msoFileDialogFolderPicker) With Directorio .AllowMultiSelect = False .InitialFileName = ThisWorkbook.Path .Title = "Selecciona la Carpeta para Guardar las PLACAS DE CARACTERÍSTICAS" If .Show = 0 Then Exit Sub ruta_save = .SelectedItems(1) End With ruta = ruta_save & "\" & nomarch & ".docx" Set wdDoc = objword.Documents.Open(ruta_plantilla) 'Se crea un objeto con la ruta del archivo nomfic = a.Range("L21") & "_" & a.Range("I7") & "_" & "PLACAS DE CARACTERÍSTICAS" 'Se determina el nombre con el que vamos a guardar el archivo 'rutainf = ThisWorkbook.Path & "\" & nomfic & ".docx" rutainf = ruta_save & "\" & nomfic & ".docx" 'Creamos un bucle que va desde el primero al último número de la matriz UserForm1.Show 'Abre el formulario FormularioAbierto: ' Arranca desde aqui al volver del formulario 'pctCompl = 0 ' Incializa el valor de pctComp1 'Asignamos a variables que se debe buscar y el texto por que se debe reemplazar datos(0, 0) = "[MODEL]" datos(1, 0) = a.Range("I7") datos(0, 1) = "[SERIAL]" datos(1, 1) = a.Range("L21") datos(0, 2) = "[YEAR]" datos(1, 2) = Year(a.Range("L22")) 'Estrae el año de la fecha datos(0, 3) = "[VOLTAGE]" datos(1, 3) = a.Range("I22") datos(0, 4) = "[FREQ]" datos(1, 4) = a.Range("I15") datos(0, 5) = "[CURRENT]" datos(1, 5) = Round(a.Range("I18"), 1) 'Redondea un decimal datos(0, 6) = "[POWER]" datos(1, 6) = Round(a.Range("I17"), 1) 'Redondea un decimal K = UBound(datos, 2) 'Mete el maximo de variables totales a modificar dentro de la variable publica K para el Formulario wdDoc.Unprotect 'Desbloquea el word para poder escribir en el For i = 0 To UBound(datos, 2) textobuscar = datos(0, i) objword.Selection.Move 6, -1 objword.Selection.Find.Execute FindText:=textobuscar 'Bucle para reemplazar todo el texto que encuentre y solo el primero que encuentre While objword.Selection.Find.Found = True objword.Selection.Text = datos(1, i) 'texto a reemplazar objword.Selection.Move 6, -1 objword.Selection.Find.Execute FindText:=textobuscar Wend pctCompl = i 'Mete el valor de I dentro de la variable pctComl para enviarla a la barra de progreso Call Aumenta_progreso(pctCompl) 'Llama al procedimiento que actualiza la barra de progreso Next i 'wdDoc.Protect (wdAllowOnlyFormFields) 'Bloquea el archivo word para que solo permitar editar los campor de formulario **NO FUNCIONA UserForm1.Hide 'Cierra el formulario 'Guarda el archivo con el nombre asignado wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument 'wdDoc.Close MsgBox ("PLACAS DE IDENTIFICACIÓN DE MÁQUINA GENERADAS CON EXITO"), vbInformation, "AVISO" wdDoc.Activate wdDoc.Protect (wdAllowOnlyFormFields) 'Bloquea el archivo word para que solo permitar editar los campor de formulario **NO FUNCIONA wdDoc , vbMaximmizedFocus Application.ScreenUpdating = True Application.DisplayAlerts = True Shell "explorer " & ruta_save, vbNormalFocus 'Abre el explorar donde se ha guardodo el archivo word End End Sub Sub Aumenta_progreso(pctCompl As Single) Dim F As Single 'En cuanto tiene que incrementar el porcentaje para llegar a 100 segun la variable K (Numero de varibles a remplazar) Dim W As Single 'Porcentaje completado Dim P As Single 'En cuanto tiene que incrementar la barra para llegar a 100 segun la variable K (Numero de varibles a remplazar) F = 100 / K W = F * pctCompl P = 204 / K '204 es el ancho total de la barra de progreso 'Actualizo el UserForm UserForm1.Progreso.Caption = Fix(W) & "% Completado" UserForm1.Barra.Width = pctCompl * P 'Me permite actualizar el Userform y que se refleje DoEvents End Sub Un saludo. Módulo2.bas
  3. Hola Abraham: Muchas gracias por tu respuesta, he probado pero lo que consigo es que me abra un nuevo archivo de de word en blanco. Lo he colocado en varios sitios y nada... ¿Alguna idea mas? Un saludo.
  4. Hola: Gracias por tu respuesta, igual es que no me he explicado de forma muy clara. El tema es que yo abro una plantilla de word que está bloqueada, la desbloqueo tal y como me indicaste, posteriormente escribo en ese word y lo guardo con otro nombre. Este segundo word que genero, es el que quiero que se guarde bloquedo para que solo puedan editarse los campos de formulario, es decir restringir la edición como lo haria directamente desde word. Este es mi código (no consigo bloquearlo colocabdo la intruscción wdDoc.Protect (wdAllowOnlyFormFields) en diferentes sitios): wdDoc.Unprotect 'Desbloquea el word para poder escribir en el For i = 0 To UBound(datos, 2) textobuscar = datos(0, i) objword.Selection.Move 6, -1 objword.Selection.Find.Execute FindText:=textobuscar 'Bucle para reemplazar todo el texto que encuentre y solo el primero que encuentre While objword.Selection.Find.Found = True objword.Selection.Text = datos(1, i) 'texto a reemplazar objword.Selection.Move 6, -1 objword.Selection.Find.Execute FindText:=textobuscar Wend Next i 'wdDoc.Protect (wdAllowOnlyFormFields) 'Bloquea el archivo word para que solo permitar editar los campor de formulario **NO FUNCIONA UserForm1.Hide 'Cierra el formulario 'Guarda el archivo con el nombre asignado wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument MsgBox ("PLACAS DE IDENTIFICACIÓN DE MÁQUINA GENERADAS CON EXITO"), vbInformation, "AVISO" wdDoc.Activate wdDoc.Protect (wdAllowOnlyFormFields) 'Bloquea el archivo word para que solo permitar editar los campor de formulario **NO FUNCIONA wdDoc , vbMaximmizedFocus Application.ScreenUpdating = True Application.DisplayAlerts = True Muchas gracias. Un saludo.
  5. Hola: Tengo una macro de excel que a partir de una plantilla de word, genera un nuevo archivo de Word y lo guarda en una ubicación especifica. El tema es que al final de todo esto necesito que ese documento de word generado se muestre en primer plano pero no lo consigo, aparece siempre detras del resto de programas o minimizado. He probado lo siguiente sin exito: Static objword As Object . . wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument wdDoc.Activate wdDoc , vbMaximmizedFocus Muchas gracias. Saludos.
  6. Hola: Utilizando el comando que me dices consigo desprotegerlo, en mi caso: wdDoc.Unprotect Pero tras escribir en el Word, antes de guardarlo quiero protegerlo para que solo se pueda rellenar las entradas de formulario. Para ello he intentado lo siguiente: wdDoc.Protect (wdAllowOnlyFormFields) 'Bloquea el archivo word para que solo permitar editar los campor de formulario **NO FUNCIONA Pero el archivo Word que genera y guarda no queda bloqueado de ninguna manera. ¿Alguna idea? Muchas gracias!!!
  7. Hola: Estoy intentando abrir un formulario desde una macro. Ese formulario es una UseForm en la cual se muestras una barra de progreso que se completa del 0 -100% a partir de una variable que viene desde el Sub que lo abre. El tema es que no se como puedo pasar variables de unos Sub a otros, la única opción que veo es escibiendo valores en una celda de excel para depues leerlos de ahí y al terminar de ejecutar la macro, limpiar esas celdas. Alguien sabe cómo hacerlo?. Muchas gracais. Un saludo.
  8. Hola: Estoy trabajando en una marcro que rellena un docuemnto de word (.docx) el cual se utiliza como plantilla para generar un nuevo documento de word en el cual sustituye unos campos. El problema que tengo es que como con ese documento de word van a trabajar varias personas, tiene restringida la edición, perimitiendo solo el rellenado de formularios (foto adjunta). El problema que tengo que si el documento de word que actua como plantilla, tiene activa esa protección, la macro de excel que tengo no es capaz de rellenarlo y generar el nuevo docx; por el contrario si quito las restricciones de edición, lo hace sin problema. Muchas gracias de antemano. Un saludo.
  9. Muchas gracias Antoni, esa ha sido la solución, llevaba tiempo intentandolo.... Un saludo y gracias a todos.
  10. He probado esto pero si selecciono el rango I:I, me lo hace en toda la columna menos en la celda que necesito y si pongo rango I16 no funciona. Muchas gracias. Saludos.
  11. Hola: Tengo un Combobox que despliega una lista de porcentajes que coge de otra página del propio archivo. Las celdas de las que lee los datos, tienen formato porcentaje y los valores de muestran así: 5%, 10%, 15%... Al desplegar el combobox, los datos del deplegable tambien aparecen en el formato pocentaje tipo 5%, 10%, 15%... pero en la celda en la que escribe ese combobox, los datos se muestras en el formato 0.05, 0.10, 0.15...y me gustaría que aparecieran en el formato original tipo 5%, 10%... He intnetado cambiar el fomrato con el siguiente código pero no me funciona: Private Sub ComboBox5_Change() Tol_AV_in = ActiveSheet.Range("I16").Value Tol_AV_fin = Tol_AV_in Worksheets("Placa AV").Range("I16") = Tol_AV_fin Worksheets("Placa AV").Range("I16").NumberFormat = "#.0%" End Sub Muchas gracias de antemano. Un saludo
  12. He conseguido solucionarlo, dejo el código por si alguien le pudiera interesar. Private Sub GENERAR_ARCHIVO_BAAN_Click() Application.ScreenUpdating = False Dim ruta As String Dim Directorio As FileDialog Dim nombre As String Dim NombreHoja As String 'Seleccionar la Hoja de la que se cogen los datos para baan NombreHoja = Worksheets(3).Name Set Directorio = Application.FileDialog(msoFileDialogFolderPicker) With Directorio .AllowMultiSelect = False .InitialFileName = ThisWorkbook.Path .Title = "Seleccione la Carpeta para Guardar el .txt" If .Show = 0 Then Exit Sub ruta = .SelectedItems(1) End With nombre = InputBox("Indica el nombre del archivo") If nombre = "" Then MsgBox "No has indicado el nombre del archivo, el proceso terminará" Exit Sub End If Open ruta & "\" & nombre & ".txt" For Output As #1 Worksheets(NombreHoja).Activate Worksheets(NombreHoja).Range("A1").Select Do While ActiveCell.Offset(0, 1).Value <> "" Ubica = ActiveCell.Address Do While ActiveCell.Column < 19 If ActiveCell.Value <> "" Then Lista = Lista & "|" & ActiveCell.Value End If ActiveCell.Offset(0, 1).Select Loop Lista = Mid(Lista, 2, Len(Lista) - 1) Print #1, Lista Lista = "" Worksheets(NombreHoja).Range(Ubica).Offset(1, 0).Select Loop Close #1 MsgBox "Se ha creado el archivo .txt exportable para baan con nombre " & nombre Application.ScreenUpdating = True End Sub
  13. Hola Isidrod: Muchas gracias por tus aportación, me ha servido y de hecho consigo que me genere el archivo tal y como quiero. El tema está en que necesito que me genere el .txt al pulsar el botón Active X de la primera página, pero me da error 1004 al empezar a leer la celda A1. Alguna idea de por que podría ser? Muchas Gracias. Un saludo. Private Sub GENERAR_ARCHIVO_BAAN_Click() Application.ScreenUpdating = False Dim ruta As String Dim Directorio As FileDialog Dim nombre As String Dim NombreHoja As String NombreHoja = Worksheets(3).Name 'NombreHoja = "baan" Set Directorio = Application.FileDialog(msoFileDialogFolderPicker) With Directorio .AllowMultiSelect = False .InitialFileName = ThisWorkbook.Path .Title = "Seleccione la Carpeta para Guardar el TXT" If .Show = 0 Then Exit Sub ruta = .SelectedItems(1) End With nombre = InputBox("Indique el nombre del archivo") If nombre = "" Then MsgBox "No has indicado el nombre del archivo, el proceso terminará" Exit Sub End If Open ruta & "\" & nombre & ".txt" For Output As #1 Worksheets(NombreHoja).Activate Range("A1").Select (ERROR 1004) Do While ActiveCell.Offset(0, 1).Value <> "" Ubica = ActiveCell.Address Do While ActiveCell.Column < 19 If ActiveCell.Value <> "" Then Lista = Lista & "|" & ActiveCell.Value End If ActiveCell.Offset(0, 1).Select Loop Lista = Mid(Lista, 2, Len(Lista) - 1) Print #1, Lista Lista = "" Range(Ubica).Offset(1, 0).Select Loop Close #1 MsgBox "Se ha creado el archivo txt con nombre " & nombre Application.ScreenUpdating = True 'End Sub End Sub Prueba_Foro1.rar
  14. Hola: No soy muy experto en Excel, y estoy volviéndome loco para intentanr generar un archivo .txt de una de las hojas de un libro. Lo que intento hacer es lo siguiente: Ejecutar la macro al pulsar le Botón de la primera página (Generar Archivo para Baan), es decir que solo con pulsar se genere el .txt. Generar un archivo .txt que contenga los campos de una página concreta (en mi caso BAAN), pero separados por |. Ejemplo: TH317115R01|150|1|A1120122|170119|0|0.00 En la página de la que quiero generar el .txt tengo formulas condicionales en las celdas, pero en archivo de salida me gustaría sacar solo las que estén rellenas con valor (es decir hayan cumplido la condición) Guardar ese .txt en la misma ubicación del Libro Excel. Os adjunto el archivo con lo que he podido hacer pero no me funciona. Gracias de antemano. Private Sub GENERAR_ARCHIVO_BAAN_Click() Sheets("tarjetas").Select LibroActual = ActiveWorkbook.Name ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\tarjetas.txt", _ FileFormat:=xlCSV, CreateBackup:=False Workbooks.Open ThisWorkbook.Path & "\" & LibroActual End Sub Prueba_Foro.rar
×
×
  • Create New...

Important Information

Privacy Policy