Jump to content

AlexanderS

Moderators
  • Posts

    1,395
  • Joined

  • Last visited

  • Days Won

    58

Everything posted by AlexanderS

  1. Lo mas recomendable ya que lleva un bucle es que lo ejecutes manualmente cuando realices algún cambio. Saludos.
  2. Hola @Galactico, algo asÍ?: Saludos. Muestra tamaño Letra.xlsm
  3. Hola @paikerr, prueba así: Private Sub Worksheet_Activate() Const HOJA As String = "CALENDARIO" Const TABLA As String = "CALENDARIO" Dim tbl As Object On Error Resume Next Set tbla = ActiveSheet.ListObjects(TABLA) If tbla Is Nothing Then ActiveSheet.ListObjects.Add(xlSrcRange, Sheets(HOJA).Cells(1, 1).CurrentRegion, , xlYes).Name = TABLA MsgBox "La tabla se ha creado con éxito dentro de la " & HOJA & "." Else MsgBox "La tabla ya existe dentro de la " & HOJA & "." End If End Sub Saludos
  4. Correcto, pero entonces lo mejor en tu caso borrar toda la lista de archivos de la columna y volver a escribirla seria lo mejor. Sub DoFolder(Folder) Range([B2], [A2].End(xlDown)).Clear .... Saludos
  5. Debemos tener alguna condición para diferenciar que es una categoría y que no, en tu caso veo que las categorías no tienen un código numérico al inicio y los datos si, con esa condición se puede generar el cambio automático. Saludos mrzo-bdd.xlsm
  6. Prueba así: Sub DoFolder(Folder) Dim SubFolder For Each SubFolder In Folder.SubFolders DoFolder SubFolder Next i = Cells(Rows.Count, 1).End(xlUp).Row + 1 Dim file For Each file In Folder.Files If Range("A:A").Find(file, , , xlWhole) Is Nothing Then ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:= _ file.Path, TextToDisplay:=file.Path Cells(i, 2).Value = file.DateCreated i = i + 1 End If Next End Sub
  7. Debes utilizar el evento Workbook_Open(), puedes leer un poco mas acerca de este aquí: https://www.exceleinfo.com/ejecutar-macros-al-abrir-un-archivo-en-excel-con-el-evento-workbook_open/ Saludos.
  8. En un formulario coloca un control "Image" y pega este código completo: Option Explicit Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As LongPtr) As Long Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" Alias "DeleteUrlCacheEntryA" _ (ByVal lpszUrlName As String) As Long Private Const BINDF_GETNEWESTVERSION As Long = &H10 Private Sub CommandButton1_Click() End Sub Private Sub UserForm_Initialize() Dim imageURL As String Dim fileName As String imageURL = "https://petsbioforestal.es/wp-content/uploads/2020/05/porque-mi-conejo-estornuda.jpg" fileName = Environ("temp") & "" & Mid(imageURL, InStrRev(imageURL, "/") + 1) If DownloadFile(imageURL, fileName) Then Image1.Picture = LoadPicture(fileName) Else MsgBox "Error downloading " & imageURL End If End Sub Private Function DownloadFile(URL As String, LocalFileName As String) As Boolean Dim RetVal As Long DeleteUrlCacheEntry URL RetVal = URLDownloadToFile(0, URL, LocalFileName, BINDF_GETNEWESTVERSION, 0) DownloadFile = (RetVal = 0) End Function PD: Este código no es mío lo tome de aqui https://www.mrexcel.com/board/threads/load-url-image-into-userform.1060189/ Saludos.
  9. Hola @Villable la forma correcta en la primera Public Const n As Integer = 12 Este debe ser escrito en un modulo, no en un modulo de objeto (ThisWorkbook o Hoja1 por ejemplo). La forma de llamar la variable seria simplemente: Msgbox n O tambien Msgbox Modulo1.n Saludos.
  10. Suponiendo que las 2 celdas son A1 y A2: HostFolder = Range("A1") & Range("A2") Saludos
  11. Hola, con formatos condicionales no seria mas fácil? Saludos Formato C.xlsx
  12. Tienes razón, no me di por hecho que los num de los recibos serian únicos. Adjunto el archivo con una modificación. Saludos EJEMPLO PARA INSERTAR COMENTARIOS.xlsm
  13. Prueba el adjunto, ten en cuenta que la macro esta echa con el formato de la tabla que adjuntaste es posible que debas realizar modificaciones a la macro para adaptarlo a otro libro. Saludos. EJEMPLO PARA INSERTAR COMENTARIOS.xlsm
  14. Hola @tupy77, si es posible con macros y es bastante simple, pero para no tener que imaginarnos la tabla y construirla desde 0 te recomiendo subir un excel de ejemplo. Saludos.
  15. @Leonardo Briceño Pura vida!! A mi no me pasa lo que indicas, pero de igual forma puedes probar solo des protegiendo la hoja cuando confirmas la eliminación de esta forma no deberías ver las formulas cuando se muestren los cuadros de mensaje. Sub BorrarCeldas(): On Error GoTo ExitSub Set CeldaDestino = Application.InputBox("SELECCIONE LA CELDA CON EL NOMBRE QUE DESEA ELIMINAR", _ "BORRAR - SELECCIONE CELDA", Type:=8) Application.ScreenUpdating = False CeldaDestino.Worksheet.Select CeldaDestino.Select If MsgBox("DESEA ELIMINAR EL NOMBRE " & ActiveCell.Value, vbQuestion + vbYesNo) = vbYes Then If MsgBox("¿ESTÁ SEGURO?", vbQuestion + vbYesNo) = vbYes Then ActiveSheet.Unprotect Password:="123" Range("A" & ActiveCell.Row).Resize(1, 2).ClearContents Range("D" & ActiveCell.Row).Resize(1).ClearContents Range("F" & ActiveCell.Row).Resize(1).ClearContents Range("J" & ActiveCell.Row).Resize(1).ClearContents MsgBox ("NOMBRE ELIMINADO SATISFACTORIAMENTE") ActiveSheet.Protect ("123") Exit Sub End If End If ExitSub: MsgBox "¡OPERACIÓN CANCELADA!", vbExclamation ActiveSheet.Protect ("123") End Sub Saludos
  16. @Leonardo Briceño, por lo que veo no estas volviendo a proteger la hoja luego de eliminar, solo la proteges si se cancela. Así debería funcionar: Sub BorrarCeldas(): On Error GoTo ExitSub ActiveSheet.Unprotect Password:="123" Set CeldaDestino = Application.InputBox("SELECCIONE LA CELDA CON EL NOMBRE QUE DESEA ELIMINAR", _ "BORRAR - SELECCIONE CELDA", Type:=8) Application.ScreenUpdating = False CeldaDestino.Worksheet.Select CeldaDestino.Select If MsgBox("DESEA ELIMINAR EL NOMBRE " & ActiveCell.Value, vbQuestion + vbYesNo) = vbYes Then If MsgBox("¿ESTÁ SEGURO?", vbQuestion + vbYesNo) = vbYes Then Range("A" & ActiveCell.Row).Resize(1, 2).ClearContents Range("D" & ActiveCell.Row).Resize(1).ClearContents Range("F" & ActiveCell.Row).Resize(1).ClearContents Range("J" & ActiveCell.Row).Resize(1).ClearContents MsgBox ("NOMBRE ELIMINADO SATISFACTORIAMENTE") ActiveSheet.Protect ("123") '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Exit Sub End If End If ExitSub: MsgBox "¡OPERACIÓN CANCELADA!", vbExclamation ActiveSheet.Protect ("123") End Sub Saludos
  17. Hola @Leonardo Briceño, en este caso seria convertir tanto la búsqueda como el nombre de las hojas a mayúsculas independientemente de como estén escritas: Sub BuscarNombreHoja() Application.ScreenUpdating = False Dim existe As Boolean Dim nombreHoja As String Dim cont As Integer nombreHoja = UCase(InputBox("INGRESE EL NOMBRE DE LA HOJA")) existe = False For cont = 1 To Worksheets.Count If UCase(Worksheets(cont).Name) Like "*" & nombreHoja & "*" Then existe = True Exit For End If Next If existe = False Then MsgBox "NO SE ENCONTRÓ EL NOMBRE INGRESADO!" Else Sheets(Worksheets(cont).Name).Select End If End Sub Lo logras con UCASE(). Saludos
  18. Hola @paikerr intenta así: Dim rango As Range Set rango = Range(Columns(1), Columns(6)) If IsNull(rango.OutlineLevel) Then rango.Ungroup Comentas, saludos.
  19. Que tal @fx.ingenieria, bienvenido al foro, te comento que puedes realizar tus consultas en el hilo de excel general (Formulas,etc) o en el de macros y VBA. Espero que el foro te sea de tanta ayuda como ha sido para mi. Pura vida!!, saludos desde Cartago.
  20. Pero probaste abrir el archivo y ejecutar la macro?, el error 1004 regularmente es porque un nombre no definido o alguna comilla faltante etc.
  21. Un gusto @Sergio, sinceramente no sabría recomendarte alguna pagina o vídeo en concreto, la cinta que vez arriba la hice con una recopilación de paginas y un poco de prueba y error. Pero te aseguro que no es tan complicado como parece, seguro que con leer un poco de la documentación del programa le agarras el tiro https://bettersolutions.com/vba/ribbon/custom-ui-editor.htm Saludos.
  22. @RadioViraje73, correcto la instrucción copiara los datos en columnas contiguas, entonces tienes algunas opciones: 1 utilizar un ciclo while para leer cada columna de tu tabla individualmente o 2 realizar una consulta a por cada columna para poder utilizar el .CopyFromRecordset, algo como esto: Columnas = Array("FECHA", "PAGADO", "DEBE") For Each param In Columnas Sql = Replace("SELECT ? FROM [Datos$] where (FECHA BETWEEN #1/1/2020# and #31/3/2020#) and DEBE >0", "?", param) Rst.Open Sql, cn, 3, 3 Select Case param Case Is = "FECHA": Sheets("Resultado").Range("A2").CopyFromRecordset Rst Case Is = "PAGADO": Sheets("Resultado").Range("B2").CopyFromRecordset Rst Case Is = "DEBE": Sheets("Resultado").Range("F2").CopyFromRecordset Rst End Select Rst.Close Next Adjunto un pequeño ejemplo, en mi caso la tabla esta en el mismo libro. Obviamente es mas rápido utilizar un ciclo para leer 3 columnas que uno para leer X cantidad de filas. Comentas, saludos. Ejem SQL.xlsm
  23. Hola @joselica, en este caso no es necesario tratar cada celda individualmente, revisa el adjunto y comentas. Saludos COLOR CELDAS (1) Ucase o Lcase.xlsm
×
×
  • Create New...

Important Information

Privacy Policy