-
Contador de contenido
11886 -
Unido
-
Última visita
-
Días con premio
911
Todo se publica por Antoni
-
No has especificado cuales son las celdas a validar si están vacías, te he puesto un ejemplo para el rango A1:A6, corrige a voluntad: Sub Borrar() '------- Corregir las celdas según necesidad If Range("A1") = "" Or _ Range("A2") = "" Or _ Range("A3") = "" Or _ Range("A4") = "" Or _ Range("A5") = "" Or _ Range("A6") = "" Then MsgBox "Hay celdas vacías", vbInformation Exit Sub End If '------- Range("C5").ClearContents Range("C7").ClearContents Range("C8").ClearContents Range("C23").ClearContents Range("C24").ClearContents Range("C39").ClearContents Range("C40").ClearContents Range("C55").ClearContents Range("C56").ClearContents Range("C71").ClearContents Range("C72").ClearContents Range("C87").ClearContents Range("C88").ClearContents Range("C103").ClearContents Range("C104").ClearContents Range("C119").ClearContents Range("C120").ClearContents Range("C135").ClearContents Range("C136").ClearContents Range("C151").ClearContents Range("C152").ClearContents End Sub
-
Para actualizar una celda con un valor numérico con un texto (TextBox), debes convertir el texto a número con una función de conversión de tipos (CInt(), CLng(), CDbl(), CCur(),.......) Poe ejemplo : Range("A1")=CDbl(TextBox1) pero debes asegurarte que contiene solamente números 0-9 y adicionalmente, el separador decimal (punto o coma según el país), para ello tienes la función IsNumeric(), por ejemplo: IF IsNumeric(TextBox1) Then Range("A1")=CDbl(TextBox1) else MsgBox "El TextBox1 no es numérico", VbCritical End If
-
Ordenar Tabla Dinámica de una Tabla por Fechas
tema contestó a Antoni en solbete Macros y programación VBA
No tengo ni idea de tablas dinámicas, pero la grabadora de macros muestra: ActiveSheet.PivotTables("TablaDinámica1").PivotFields("Campo 3").AutoSort xlAscending, "Campo 3" -
Formulas no me toman los valores de los textboxes
tema contestó a Antoni en Aris8a Macros y programación VBA
Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub -
Si no me he liado con los paréntesis: Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.Calculation = xlManual Application.EnableEvents = False If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then Range("E22") = WorksheetFunction.Sum(Range("E4:E21")) Range("E23") = WorksheetFunction.Sum(Range("E4:E19")) Range("E24") = Range("E23") - WorksheetFunction.Sum(Range("I4:I7")) Range("I22") = WorksheetFunction.Sum(Range("I4:I21")) Range("I4") = Range("E23") * 0.1 Range("I5") = Range("EN10") * Range("EN11") Range("I6") = Range("E23") * 0.0127 Range("I7") = Range("E23") * 0.006 Range("I25") = Range("E22") - Range("I22") Range("I12") = Range("E24") * 0.03 Range("C7") = Range("EQ8") - Range("EQ9") + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16") Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19") Range("E7") = Range("E4") / Range("C4") * 7 / 44 * 1.5 * Range("C7") Range("E8") = Range("E4") / Range("C4") * 7 / 44 * 0.3 * Range("C8") Range("E9") = Range("E4") / Range("C4") * 7 / 44 * 1.3 * 1.5 * Range("C9") End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub
-
Abre el adjunto y pulsa el botón GENERAR HOJAS y luego pulsa sobre cualquier fecha del calendario para ir a la hoja deseada. Observa que he añadido 2 botones en la hoja CALENDARIO, uno para generar las hojas y otro para eliminarlas. También he añadido una flechita azul en las hojas generadas para volver a la hoja CALENDARIO. Estas son las macros: En la hoja CALENDARIO: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d As Integer, m As Integer, a As Integer On Error Resume Next If IsNumeric(Target) Then If Not Target = "" Then x = Int((Target.Row - 6) / 9) y = Int((Target.Column - 5) / 8) + 1 m = x * 6 + y d = Target a = Right([E3], 4) Sheets(Format(d, "00") & "-" & Format(m, "00") & "-" & a).Activate End If End If End Sub En el Módulo1: Sub GenerarHojas() Application.ScreenUpdating = False Application.CopyObjectsWithCells = True Dim a As Integer a = Right([E3], 4) With Sheets("ORIGI") For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a generar .Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Format(fecha, "dd-mm-yyyy") [B4] = [B4] & " " & fecha Next End With Volver End Sub '-- Sub EliminarHojas(): On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Dim a As Integer a = Right([E3], 4) For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a eliminar Sheets(Format(fecha, "dd-mm-yyyy")).Delete Next End Sub '-- Sub Volver() Sheets("CALENDARIO").Activate End Sub Libro1 (15).xlsm
-
Sub GenerarHojas() Application.ScreenUpdating = False With Sheets("Hoja1") '<--- Hoja a copiar For fecha = CDate("01/01/2024") To CDate("31/12/2024") '<--- Periodo a generar .Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Format(fecha, "dd-mm-yyyy") Next .Activate End With End Sub Y por si las quieres eliminar: Sub EliminarHojas(): On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False For fecha = CDate("01/01/2024") To CDate("31/12/2024") '<-- Periodo a eliminar Sheets(Format(fecha, "dd-mm-yyyy")).Delete Next End Sub
-
Sub FormulaDocs() Set ws = ThisWorkbook.Sheets("Conte") Set Rng = ws.Range("U17:U" & ws.Cells(ws.Rows.Count, "U").End(xlUp).Row) For Each CELL In Rng If CELL.Value <> "" Then F = CELL.Row CELL.Offset(0, -5).FormulaLocal = "=SI.ERROR(SI(ESNUMERO(HALLAR($U" & F & ";$G" & F & "));BUSCARV($V$2&V$3&$U" & F & ";INDIRECTO(""'""&Z$2&""'!""&""G3:J10"");3;FALSO););"""")" End If Next CELL End Sub
-
No se acaba de ver, solo un ejemplo: 12 hombre+12 mujeres son 24 participantes, si cada participante juega 11 partidos, 24 por 11 son 264 partidos, lo que contradice las siguientes afirmaciones. Dicho lo cual, mejor subes un archivo, por ejemplo 4 hombres y 4 mujeres, a ver si se ve más claro lo que pretendes.
-
Si lo que buscas es el Cliente, este concepto se halla en la columna 5 de la Hoja7, no en la 83. nombre = Hoja7.Cells(FILA, 83).Value
-
Faltan hojas en el archivo que has subido (BD, CLIENTES, ALTAARTICULOS1,.....)
-
Version 1.0.0
33 downloads
En el adjunto encontrareis un formulario con 2 ejemplos de como llenar un listbox/combobox, uno, a partir de un nombre y otro, a partir de una fórmula, ambos combinados con la propiedad RowSource. Se basan en la utilización de DESREF y CONTARA. Lamentablemente la propiedad RowSource no admite la fórmula en ingles y con la fórmula en castellano, no funciona, de ahí que he colocado la fórmula en inglés en la propiedad Tag del listbox/combobox. -
Version 1.0.0
75 downloads
Es un calendario al uso, sin misterios. Ya sabeis de mi debilidad por los calendarios, en este caso la gracia está en el código VBA. Os recomiendo que lo reviseis y os dareis cuenta que se puede hacer click en un label sin evento individual y sin módulo de clase. Calendario mínimo.xlsm -
Version 1.0.0
79 downloads
Hola a todos: Os dejo un formulario para crear y visualizar álbumes de fotografías. Cada álbum va en una hoja. Puede haber cualquier número de álbumes. Cada álbum puede contener cualquier número de imágenes. En el formulario: Se pueden añadir múltiples imágenes a la vez. Al pulsar sobre la miniatura cambia la resolución de la imagen. El resto os lo dejo para que lo descubrais vosotros. Paz y amor. -
-
-
Version 1.0.0
85 downloads
Hola amados todos: ¿ Os acordais que siempre hemos dicho que no se puede usar el método AddItem en un Listbox/Combobox con más de 10 columnas ? Bueno, pues es falso. Analizando esta consulta Sumar 3 columnas de un listbox, me he dado cuenta que si es posible. Ver el código del adjunto. Paz y amor Mas de 10 columnas en un control ListBox con el método AddItem.xls