Jump to content

All Activity

This stream auto-updates     

  1. Past hour
  2. ¡Hola, a ambos! Cuando abres un archivo en una carpeta, Windows genera un "pseudoarchivo" que comienza por vigulilla (~). Esto lo detecta Power Query, e intenta abrir el archivo, sin que este lo sea realmente. Lo que debes hacer es, en el filtro de los archivos que él selecciona dentro de la carpeta, omitir los que comienzan por la vigulilla. Así podrás trabajar con archivos cerrados o abiertos, sin problema. ¡Bendiciones!
  3. Yesterday
  4. Buenas noches ( el post es de ayer pero lo había borrado sin querer ) No logro que me calcule bien las -horas diurnas laborables, -nocturnas laborables, -horas festivas nocturnas, -ni las festivas diurnas. Teniendo en cuenta que la nocturnidad se comprende desde las 22:00 hasta las 06:00. Y la festividad sábado y domingo 24H. Adjunto documento con las formulas con las que he intentado sacar el resultado pero imposible Ya no se me ocurre nada Gracias a quien me pueda ayudar FORMULAS ERRONEAS (3).xlsx
  5. Hola Tienes cosas innecesarias, pero bueno, ese ya es otro tema. No me queda claro eso de que abres la carpeta pero a su vez quiere el ¿último archivo? activo, así que, después de esta línea: Shell "explorer " & ruta_save, vbNormalFocus Coloca esto: AppActivate (nomfic & ".docx") Prueba ya que yo lo estoy haciendo de memoria pues evidentemente al no tener tus archivo (así, en plural), no puedo probar. PD: Es una mala costumbre usar On Error Resume Next, deberías borrarlo
  6. Estimado, tienes toda la razón. No me había dado cuenta. Me puedes ayudar a cambiar la columna N en la C por favor? Y si es mucho pedir, se podrá al ingresar un número en cuenta, cargar automáticamente los datos si es que ese número ya está registrado en vez de buscarlos? Muchas gracias
  7. La macro ya hace todo lo que estás pidiendo, si se trata de una modificación, en la columna N se registra la fecha y la hora. Solo tienes que preguntar por esa columna, si está informada, es una liquidación, por el contrario, si está vacía se trata de una previsión.
  8. ¡Hola, @Pedro Martos Sanchez! En ese orden de ideas, si estás aprendiendo, no deberías encasillarte a algunas funciones para resolver un cometido. Conoce varias funciones para lograr resolver un problema en particular. Hazlo de varias formas, y así ampliarás el conocimiento que tienes sobre Excel. ¡Saludos y Bendiciones!
  9. Muchas gracias! Mi sirvió la primera fórmula. Saludos
  10. @snake Disculpame pero no había podido entrar nuevamente al foro por motivos laborales; voy a tratar de modificar la formula y te cuento algo; muchas gracias por tus comentarios.
  11. ¡Hola, @Matías86! Puedes probar cualquiera de las siguientes fórmulas: =--EXTRAE(A766;16;SUMA(HALLAR(" ";A766;{8;17})*{-1;1})-1) =--ESPACIOS(EXTRAE(SUSTITUIR(A766;" ";REPETIR(" ";99));3*99;99)) ¡Bendiciones!
  12. 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
  13. Estimados: Desde ya gracias por su ayuda. Les explico un poco lo que debo hacer: Recibo documentos, los cuales tienen un numero de cuenta el que debo ingresar (llámese previsación). Luego, ese documento va a otro proceso interno, y puede que vuelva hacia mi nuevamente(llámese liquidación). La cosa es que cuando previso y guardo los datos, estos se guardan en otra planilla con fecha y hora. Sin embargo, si recibo nuevamente el documento con un número de cuenta ya guardado en previsación, este al guardarlo nuevamente no se guarda con la fecha actual. Entonces necesito por favor, en esta macro (que me ayudaron a crear) lo siguiente: -Si es que es posible, hacer en la misma planilla alguna distinción entre "previsación" y "liquidación" -Si no, que al momento de guardar un número de cuenta que ya se encuentre en la planilla de registro, este se guarde con la fecha actual, independiente de si ya fue guardado anteriormente con otra fecha. -Y lo otro aprovechando de su talento para esto, que al ingresar en "cuenta" un número que ya este guardado, se carguen automáticamente los datos, sin tener que presionar en "buscar". Necesito llevar un registro de lo que "previso" y lo que "liquido", independiente de si fue previsado antes o no Espero que se entienda.. Muchas gracias (subi el archivo a mi drive porque no me deja subirlo acá ) https://drive.google.com/open?id=1j10qMVsajTfhWkge3dZtTwV0yvE8e1im
  14. Estimados, junto con saludar, me gustaría hacer las siguiente consulta. A través de la función de Importar data desde una página web, obtengo información relacionada a unos productos el cual me interesa conocer sus precios. Una vez extraída la información, surge el problema de que tengo que separar el número del resto de texto para poder procesar los primeros con fórmulas. Al principio pensaba en usar combinación de formulas de DERECHA y EXTRAE, pero después me fijé que hay precios con 3, 4 y 5 dígitos, lo que hace que se complique un poco más el problema. A raíz de lo anterior, existirá una fórmula que solo me extraiga el número? Adjunto ejemplo, donde la información de interés está marcada en amarillo. De antemano, gracias! Saludos! Cotizador.xlsb
  15. Tengo la impresión o de que no te entendemos del todo o que hay "algo" que no estás comentando/mostrando. Adjunta el archivo. Si es muy grande, colócalo en algún Drive y envía el enlace. No olvides comentar cómo activar lo del dilema.
  16. Gracias, John, correcto.Son ejemplos que voy cogiendo de Internet, algunos los voy resolviendo, pero otros no lo consigo. Voy aprendiendo a través de Tutoriales por la red. y con las respuestas que me dais las voy analizando respecto a las funciones que pide el ejercicio. Saludos
  17. 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.
  18. 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.
  19. ¡Hola, @Pedro Martos Sanchez! Tu pregunta suena a "tarea de escuela"... Es una función matricial (debes introducirla con Ctrl + Shift + Enter, en vez de solo Enter): =INDICE(D6:D13;COINCIDIR(MIN(SI(AÑO(C6:C13)=G6;C6:C13));C6:C13;)) O esta, de introducción normal: =INDICE(D6:D13;COINCIDIR(AGREGAR(15;6;C6:C13/(AÑO(C6:C13)=G6);1);C6:C13;)) ¡Bendiciones!
  20. Saludos siempre muy agradecido por la ayuda excelente. Me sirve perfectamente es lo que necesitaba Tema cerrado, solucionado Gracias como siempre
  21. Buenas tardes por favor necesito , que los datos se guarden en la siguiente fila, y no se sobrescriba. gracias 

     

    COPIA ENVIAR.xlsm

  22. Last week
  23. Hola, buenas tardes-., tengo un detalle  al momento de querer asignar un color a una celda siempre y cuando otra celda contenga la letra X.,  Es decir, cuando este la letra X en una celda, la otra debe ponerse del color que yo elija, por ejemplo, verde. 

     

    Saludos..

  24. Haber si me podéis ayudar, soy bastante novato en Excel. os envío el ejercicio: Yo realice esta formula, pero me da error. =INDICE(D42:D58;COINCIDIR(VERDADERO;TEXTO(C42;"aa")=TEXTO(G42;"aa");0))Ejercicio.xlsx
  1. Load more activity
×
×
  • Create New...

Important Information

Privacy Policy