Jump to content

Alex_edm

Members
  • Content Count

    22
  • Joined

  • Last visited

About Alex_edm

  • Rank
    Member

Converted

  • Campos
    ;

Recent Profile Visitors

296 profile views
  1. Es justo lo que quería, funciona perfectamente. Muchas grcias @Antoni!!!
  2. Hola: LLevo tiempo intnetandolo y ya no se que hacer, la verdad es que mis conociminetos de VBA son limitados, a ver si me podeis ayudar....Gracias de antemano. Tengo un excel cuya Hoja1 "INICIO", se rellena desde otro programa. La hoja INICI O, se divide en grupos de datos, cada uno de ellos formado por un encabezado (gris oscuro) y unos datos en las filas siguientes; entre cada grupo de datos siempre hay como minimo una fila en blanco. Lo que quiero hacer es copiar en la Hoja 2 ("BAAN"), todos los datos de la hoja 1, pero diferenciandolos por el encabezado de cada grupo, de tal forma que al copiarlo el encabezado de cada grupo esté en la primera columna de la Hoja BAAN correspondiente . He empezado a hacer una macro intentando utilizar las filas en blanco entre cada grupo de datos para diferenciarr cuando empeiza cada uno, pero imposible.... Adjunto el archivo en el que estoy trabajando y en la Hoja 2 ("BAAN") he copiado 'a mano' las primeras filas a modo de ejemplo de cómo me gustaría que quedaran despues de ejecutar la macro. Muchas gracias. Un saludo. Copia de H21_IMPORTAR_BANN_R00B01.xlsm
  3. 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.
  4. 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
  5. 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.
  6. 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.
  7. 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.
  8. 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!!!
  9. 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.
  10. 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.
  11. Muchas gracias Antoni, esa ha sido la solución, llevaba tiempo intentandolo.... Un saludo y gracias a todos.
  12. 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.
  13. 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
  14. 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
×
×
  • Create New...

Important Information

Privacy Policy