Jump to content

dogwall

Members
  • Content Count

    153
  • Joined

  • Last visited

Everything posted by dogwall

  1. Hola, Prueba con esto: Sub Send_Selection_Or_ActiveSheet_with_MailEnvelope() 'Working in Excel 2002-2016 Dim Sendrng As Range Dim rangotitulos As Range Dim rangoglobal As Range On Error GoTo StopMacro With Application .ScreenUpdating = False .EnableEvents = False End With 'Rango de los títulos Set rangotitulos = Sheets("Automoviles").Range("A1:J3") 'Note: if the selection is one cell it will send the whole worksheet Set Sendrng = Selection Set rangoglobal = Union(rangotitulos, Sendrng) 'Create the mail and send it With rangoglobal ActiveWorkbook.EnvelopeVisible = True With .Parent.MailEnvelope ' Set the optional introduction field thats adds ' some header text to the email body. .Introduction = "Estimados" + vbNewLine + "A continuación remitimos el listado de propuestas a ser entregadas para su emisión" + vbNewLine + "Quedamos atentos ante cualquier duda o consulta" With .Item .To = "vfretes@yacyreta.com.py" .CC = "" .BCC = "" .Subject = "Remisión de Propuestas " & Range("B3") '.Send End With End With End With StopMacro: With Application .ScreenUpdating = True .EnableEvents = True End With ActiveWorkbook.EnvelopeVisible = False End Sub Debes tener en cuenta que si no seleccionas bien el rango con los datos saldrán cosas raras. He puesto '.Send para que veas como se genera el mensaje de correo antes de enviarlo. Quita la coma si quieres que se envíe directamente.
  2. Me puede servir. Gracias por el aporte, puede cerrarse el hilo.
  3. Buenas tardes a todos, hacía tiempo que no pasaba por aquí y espero que todos sigan bien Voy al grano: tengo tres columnas con datos (usuario, tiempo,clave) en un número indeterminado de filas. Necesito recorrer cada una de esas filas y añadirla a un array pero, tengo que comprobar si el usuario ya se ha añadido al array y si lo está tengo que comparar sus tiempos. Si el tiempo que estoy evaluando es mayor que el que existe en el array tengo que actualizar la fila completa eliminando la anterior y añadiendo la fila que estoy evaluando. Adjunto un fichero con un pequeño ejemplo inicial y otro de cómo me gustaría que quedara. A ver si alguien tiene alguna idea de como hacerlo porque yo me quedo rellenando el array de datos y ya no sé cómo seguir. Libro1.zip
  4. Muy buenas tardes, Tengo un formulario con un listbox que toma datos de una hoja. Según selecciono un elemento u otro en el listbox los valores de un grupo de checkboxes (guardados también en la misma hoja) muestran su valor (true/false). Necesito alguna ayuda para lo siguiente: Quiero que antes de cambiar de un elemento a otro en el listbox se compruebe si alguno de los checkbox ha cambiado su valor. Esa comprobación es sencilla, lo que no logro dominar es que una vez he comprobado que si se ha cambiado el valor de algún checkbox no pueda pasarse a otro item del listbox... No logro hacerlo. Antes de pasar a otro item hay que ejecutar otro paso pero no logro dar con la clave para que no cambie de item sin antes yo controlarlo. No he podido subir un ejemplo porque lo tengo en el trabajo. Si es necesario el próximo lunes saco un rato y subo un ejemplo. Gracias.
  5. Acabo de probar lo que comentáis y funciona perfecto. Muchas gracias a ambos @Antoni; @Riddle Tema solucionado.
  6. Gracias a los dos. Mañana pruebo y comento el resultado. Gracias
  7. Buenos días, Llevo unos días intentando resolver un problema y no doy con la solución. Tengo un libro excel conectado a una base de datos access en el que necesito cargar datos diariamente. Los datos que cargo van asociados a una fecha dentro del propio fichero y necesito comprobar que la fecha incluida en el fichero no existe ya en la base de datos para no duplicar registros. Obtengo la fecha del fichero (FechaArchivo = Cells(1, 3).Value) y mi idea es ejecutar una orden SQL para comprobar si esa fecha existe en la tabla: strSQL = "SELECT * FROM vtas_cajas WHERE (((vtas_cajas.FECHA)= " & FechaArchivo & "))" Pero no consigo nada útil... Y no sé qué más intentar para comprobar si existe o no esa fecha en la tabla utilizando ADO. Lo estaba intentando con Recordset.GetString pero luego he visto que únicamente sirve para comprobar si hay o no conexión. ¿Alguna idea sobre cómo hacerlo? Gracias.
  8. Buenos días, Trabajo con un libro compartido con macros al que he tenido que conectar una lista de datos externa (lista Sharepoint). La conexión la tengo configurada para que se actualicen los datos cada vez que se abra el fichero pero no funciona. Si el libro deja de estar compartido la conexión se actualiza sin problemas pero al estar compartido no funciona. Cómo alternativa se me había ocurrido esto: Sub Actualiza_Datos_Promos() Application.DisplayAlerts = False If ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.ExclusiveAccess End If 'Actualizo los datos ActiveWorkbook.Connections("Conexión").Refresh Application.Wait (Now + TimeValue("00:00:05")) ‘Aquí incluso he dejado unos segundos por si la conexión tarda en actualizarse, pero la lista son pocos registros y no debería. Application.DisplayAlerts = True 'Lanzo la rutina principal Call Carga_Fichero Application.DisplayAlerts = False If Not ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.FullName, _ accessMode:=xlShared End If Application.DisplayAlerts = True MsgBox "Proceso Finalizado" End Sub El caso es que sigue sin funcionar... Tengo que volver a dejar el libro sin compartir y actualizar la conexión a mano para que se actualicen los datos... ¿Alguna idea de lo que pasa? ¿Puede solucionarse? Gracias.
  9. Ambas soluciones me parecen muy acertadas. Podemos dar por resuelto el tema. Muchas gracias a los dos.
  10. Ahora dándole otra vuelta se me ocurre abrir todos los ficheros seleccionados y buscar cual de ellos contiene la palabra MAESTRO y procesarlo primero. Pero no se si es la mejor solución...
  11. Buenos días, A ver si podéis darme algo de luz porque no consigo salir de aquí... Necesito leer una serie de ficheros (seleccionados por el usuario) para luego cargar datos de esos ficheros en una hoja. El problema que se me presenta es que necesito imperiosamente que, de todos los ficheros seleccionados por el usuario, se procese siempre primero uno en concreto. Yo vengo utilizando este código para seleccionar ficheros: Sub SelecionFichero() Dim fd As Office.FileDialog Dim wk_tmp As Workbook Dim solonombre as string Dim nombrefichero As Variant Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = True .Title = "Seleccionar Maestro Ubicados GSA RF" .Filters.Add "Excel", "*.xlsx" '.Filters.Add "All", "*.*" If .Show = True Then For Each nombrefichero In .SelectedItems solonombre = GetFilenameFromPath(nombrefichero) If Contains(UCase(solonombre), "MAESTRO") Then 'Rutina para fichero MAESTRO ElseIf Contains(UCase(solonombre), "REPOSIC") Then 'Rutina para fichero REPOS End If Next Set fd = Nothing End Sub Pero claro, así voy leyendo los ficheros sin ningún orden y necesito que primero se procese el fichero que contiene la palabra "maestro". ¿Alguna idea? Muchísimas gracias.
  12. @Macro Antonio está perfecto. Puede cerrarse el tema. Muchas gracias.
  13. Gracias Macro Antonio. Mañana le daré un buen vistazo, pero a simple vista está perfecto. Un saludo.
  14. Buenas tardes, Tengo dos hojas en las que el único elemento en común es la fecha. Necesito, desde la hoja ORIGEN copiar el valor total (fila TOTALES) de esa fecha (indicada en PICOS) en la hoja DESTINO (Fila 30 - PICADAS PROMOCIONES). El proceso hay que repetirlo para cada una de las fechas con datos en ORIGEN. En el fichero adjunto va también la hoja RESULTADO en la que indico lo voy buscando. En la hoja ORIGEN marco en rojo los valores necesarios. Muchas gracias. Copia_Datos.xlsx
  15. Buenos días, Tengo un problema con un fichero que manejo en el trabajo. El fichero se utiliza en una unidad de red y tenemos acceso a él muchas personas. El fichero lo he creado yo con mi usuario, tiene macros y normalmente soy yo la única persona que abre el libro y lo modifica. Si otra persona intenta abrir el libro le aparece el mensaje de que mi usuario lo tiene bloqueado para modificarlo y que puede abrirlo en modo lectura. Hasta ahí correcto. El caso es que estando yo de vacaciones el fichero lo utilizaba y actualizaba alguno de mis compañeros y si cualquier otro intentaba abrirlo le aparecía el mensaje diciendo que el fichero estaba bloqueado, pero por mi usuario!! Y nadie, absolutamente abría sesión en windows con mi usuario, nadie sabe la contraseña. ¿Alguien sabe a qué puede deberse? De hecho si mi compañero abre el fichero y luego intento abrirlo yo me dice que es mi usuario el que tiene bloqueado el fichero... Muchas gracias.
  16. Ante todo gracias por vuestra ayuda. Sobre si se parecen o no el primer mensaje mío y los siguientes la respuesta es no @Macro Antonio, pero este cambio de tema se debe a la pregunta de @Gerson Pineda: Es a partir de ahí que expongo mi otra duda (tal vez debería haber abierto el post con ésta y no con la original) y es aquí cuando cambiamos. Pero ambas dudas van ligadas al mismo problema, mal planteado por mi parte eso si. No es el caso @Macro Antonio, de veras. No he tenido problemas con nadie del foro y espero no tenerlos. Siempre he recibido ayuda cuando la he necesitado. Y espero, en un futuro cercano, poder ayudar yo a los demás. Gracias de nuevo por vuestros aportes
  17. Buenos días, Sin ánimo de crear polémica, pues creo que no es necesario, no subí ejemplo ya que no lo creí necesario en un primer momento. En mi post de ayer expliqué con más detalle que es lo que busco y como únicamente añadía algo más de información a mi pregunta inicial tampoco creí necesario subir el fichero. De hecho Riddle, GabrielRaigosa y Macro Antonio respondéis en un primer momento sin mencionar fichero de ejemplo alguno, cosa que agradezco (y siempre agradeceré). Cierto es que en las normas se indica que debe acompañarse a la pregunta con un ejemplo, cierto, pero como ya comento no lo creí necesario de primeras. Si posteriormente es necesario se me pide y punto, conozco las normas y siempre he colaborado. Pero luego hay formas y formas de pedir las cosas y aunque la manera de @Macro Antonio para hacerlo no es excesivamente brusca si que me ha molestado en cierta medida. Entiendo que tu tiempo es tuyo y que tus aportaciones al foro son porque quieres y te apetece ayudar (de hecho a mi me has ayudado en varias ocasiones y te lo agradezco de veras) pero muchas veces, a los pesos pesados del foro os pierden las formas. Lo digo todo esto desde el respeto y sin ánimo de ofender a nadie, he sido administrador de una comunidad bastante grande de usuarios casi 10 años y se de lo que hablo. Por último comentar que he subido el fichero de ejemplo y que la idea sigue siendo la misma: meter los datos de la primera columna y de las cuatro últimas en un array obviando el resto. Gracias a todos. ejemplo_dog.xlsx
  18. Contesto vuestras dudas: Gerson, el problema es que no tengo ni idea de arrays. Te comento lo que me ocurre: en ocasiones necesito pasar a un array un rango de datos bastante extenso (40 columnas y aprox. 15.000 filas). De esas 40 columnas, la mayoría de las ocasiones, sólo contienen datos útiles para mi las tres primeras columnas y las cuatro últimas. Cómo ya he dicho mi conocimiento sobre arrays es prácticamente nulo así que se me ocurrió como primera solución el crear dos arrays, uno para las primeras tres columnas y otro para las cuatro últimas. Una vez definidos los uniría para dejar uno solo. Seguramente vosotros tengais respuesta a mi duda y seguramente el crear dos arrays no sea la mejor de la opciones... Ya digo que estoy depurando todas mis macros y el acelerar cálculos y operaciones pasa (a mi parecer) por utilizar arrays. A Gabriel comentarle que no tengo acceso a Power Query, bueno si, tengo en casa pero en el trabajo, que es donde utilizo la mayoría de mis macros, no nos instalan complementos. De hecho en el trabajo utilizo Excel 2007 y estoy peleando con IT para que me pongan al menos el 2010... Muchas gracias a todos por vuestro interés y vuestra ayuda
  19. Bien, ayer estuve haciendo alguna y aunque tengo aún dudas creo que voy por el buen camino. De momento puede darse el tema por cerrado. Iré probando a ver que tal se me da y si tengo problemas vuelvo a preguntar. Muchas gracias por tu ayuda Riddle
  20. Perdona no haberte respondido antes Riddle. Aún no he podido probarlo, vuelvo el lunes de vacaciones y haré mis pruebas. Gracias por tu ayuda
  21. Buenos días, Tengo dos matrices (2 columnas y n filas) cada una. Mi idea es "concatenar" esas dos matrices y unirlas en una sola: Matriz1: A, B Matriz2: B, C MatrizResultante: A, B, C, D. ¿Es posible hacer esto? Gracias.
  22. Muchas gracias por vuestros comentarios. Tomo buena nota de ellos y empezará a practicar en cuanto pueda. ¿Conocéis alguna web donde pueda consultar más ejemplos sobre arrays? Da igual si es ingles. De nuevo muchas gracias por vuestra ayuda.
  23. Muy buenas tardes, Normalmente mis macros son relativamente sencillas y luego, poco a poco voy puliendo detalles para hacerlas más rápidas y más cómodas. En el trabajo manejo un fichero con muchas rutinas: desde seleccionar un fichero txt y pasarlo a una hoja hasta seleccionar varios ficheros, recorrer uno a uno y realizar diferentes operaciones con ellos. Poco a poco la cantidad de cosas y subrutinas que he ido añadiendo (por necesidades de mi trabajo) han hecho que el tiempo que tardo en ejecutar todas las macros vaya incrementándose. No es excesivo aún, ronda el minuto y medio, pero se que trabajando con arrays o creando diccionarios (un compi que está de vacaciones me mencionó algo como Scripting Dictionary) para determinadas macros puedo acelerar todo bastante. Sobre todo a la hora de realizar operaciones en determinadas hojas. Pongo un ejemplo: Hoja1: Precios de productos (codigo, descripcion, precio) Hoja2: Pedidos (pedido, codigo, cantidad) Lo que hago es mediante código cómo este que pongo (que no tiene nada que ver: With Sheets("REPOSICIONES").Range("G4:G" & UltimaFila) .Formula = "=RC[-1]/DiasInforme" .Formula = .Value .NumberFormat = "0.00" End With Es anotar en la hoja2 el precio del producto (con un buscarv y en otra columna multiplicarlo por la cantidad). Este proceso, recorriendo todas las filas de toda la hoja lleva un determinado tiempo que multiplicado por varias fórmulas más y varias hojas más se convierten en un minuto. Y TODO el rollo éste que he contado es para pedir opiniones, ejemplos, etc. sobre las mejores prácticas en estos casos. ¿Se pueden almacenar esos datos en un array y recuperarlos haciendo un buscarv, una operación aritmética o similar? Apenas he utilizado arrays y me vendrían de perlas ejemplos para aprender. Muchísimas gracias si os habéis leído este tocho
×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png