Jump to content

Antoni

Members
  • Content Count

    10,078
  • Joined

  • Last visited

  • Days Won

    541

Everything posted by Antoni

  1. Con fórmulas no se, pero te adjunto una pequeña macro de evento. Haz doble-click en cualquier celda de la columna B (B2 en el ejemplo que has subido) La macro solo actúa si la siguiente fila está vacía. ejemplo (4).xlsm
  2. Casi, casi, lo mismo que JSDJSD: Sub Resumen() Application.ScreenUpdating = False Hoja2.Range("A12:AI" & Hoja2.Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents For x = 10 To Hoja1.Range("A" & Rows.Count).End(xlUp).Row For y = 5 To 11 Set código = Hoja2.Columns("A").Find(Hoja1.Range("A" & x), , xlValues, xlWhole) If Hoja1.Cells(x, y) = 100 Then Set fecha = Hoja2.Rows(10).Find(Hoja1.Cells(8, y), , xlValues, xlWhole) If Not fecha Is Nothing Then If Not código Is Nothing Then fila = código.Row Else fila = Hoja2.Range("A" & Rows.Count).End(xlUp).Row + 1 Hoja2.Range("A" & fila) = Hoja1.Range("A" & x) Hoja2.Range("B" & fila) = Hoja1.Range("B" & x) Hoja2.Range("C" & fila) = Hoja1.Range("C" & x) Hoja2.Range("D" & fila) = Hoja1.Range("D" & x) End If Hoja2.Cells(fila, fecha.Column) = 100 End If End If Next Next Hoja2.Activate End Sub
  3. Sería una contradicción, si tienes el sistema para protegerte de las macros activado y resulta que puedes anularlo por medio de una macro, no tendría sentido que existiera esa protección. ¿No te parece? Es como si tienes una contraseña y tuvieras un botón para anularla. ¿De que serviría?
  4. Si lo que pretendes hacer es cambiar el CodeName de una hoja: ActiveWorkbook.VBProject.VBComponents(Sheets("Hoja1").CodeName).Name = "NuevaHoja1"
  5. He añadido un control ScrollBar ActiveX (Ficha del programador\Diseño\Insertar) y he añadido la macro siguiente en la hoja. Private Sub ScrollBar1_Change() ActiveSheet.Unprotect Password:="" [A5] = ScrollBar1 Barra ActiveSheet.Protect Password:="" End Sub Barra Scroll (1).xlsm
  6. Tendrás que cambiar la barra de desplazamiento a ActiveX. Sube el archivo y te muestro como.
  7. Con independencia de que la macro se puede enfocar de otra forma, simplemente: For Each celda In Range("E10:Y10") celda.select 'Fila 10 ... celda.Offset(1).Select 'Fila 11 ... celda.Offset(-1).select 'Fila 9 ... Next
  8. Lo mismo que Leopoldo, pero con algo de cosecha propia. Sub DividirTexto_Antoni() Dim PRO As Variant, Texto As Variant Dim Columna As Integer, VAL As Variant Dim Fila As Integer, x As Integer '-- Texto = [C4] Texto = Replace(Texto, "Cantidad", "") Texto = Replace(Texto, "valorUnitario", "") Texto = Replace(Texto, "Importe", "") Texto = Replace(Texto, "Descripción", "") Texto = Replace(Texto, " ", "") Texto = Replace(Texto, "| ", "|") Texto = Replace(Texto, " |", "|") '-- Fila = 5 PRO = Split(Texto, Chr(10)) For x = 0 To UBound(PRO) - 1 VAL = Split(PRO(x), "|") Fila = Fila + 1 For Columna = 1 To 4 Cells(Fila, Columna + 3) = VAL(Columna) Next Next End Sub
  9. ¿Antes de contestar te molestas en leer las respuestas anteriores? porqué a esa conclusión ya se llegó el 24 de noviembre y ya se han dado varias soluciones en ese sentido.
  10. La idea de juntar todos los formularios en uno era buena, la forma de llevarla cabo, no, mis disculpas por ello. La utilización de frames por si sola es engorrosa, la solución correcta es sustituirlos o combinarlos con un control multipage. Prueba todo el circuito por si he cometido algún error a la hora de mostrar los distintos "formularios". Contar2 (2).xlsm
  11. Prueba el adjunto. Barra Scroll.xlsm
  12. Algo así: Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Select Case Target.Address Case "$C$9": Target = UCase(Target) Case "$C$10": Target = Evaluate("=PROPER(C10)") Case "$C$11": Target = LCase(Target) End Select Application.EnableEvents = True End Sub
  13. Así te ahorras incluso escribir los meses: Private Sub ComboBox1_Change() TextBox1 = "" If ComboBox1.ListIndex > -1 Then TextBox1 = Day(DateAdd("m", 1, CDate("1/" & ComboBox1.ListIndex + 1 & "/" & Year(Date))) - 1) End If End Sub Private Sub UserForm_Initialize() For x = 1 To 12 ComboBox1.AddItem UCase(Left(MonthName(x), 1)) & Mid(MonthName(x), 2) Next End Sub Private Sub CommandButton1_Click() Unload Me End Sub
  14. ¿Y esto que se supone que es? 🤔🤔🤔 Public Sub Worksheet_Selection_Change(ByVal Target As Range)
  15. Vale más tarde que nunca, esto vale incluso para los años bisiestos. Private Sub ComboBox1_Change() TextBox1 = "" If ComboBox1.ListIndex > -1 Then TextBox1 = Day(DateAdd("m", 1, CDate("1/" & ComboBox1.ListIndex + 1 & "/" & Year(Date))) - 1) End If End Sub 🙂
  16. Sub Macro2() Dim Fila As Long Dim H1 As Worksheet Dim H2 As Worksheet Dim H3 As Worksheet '-- Application.ScreenUpdating = False 'Evita el parpadeo Set H1 = Sheets("FICHA") Set H2 = Sheets("BD") Set H3 = Sheets("RESUMEN") '-- BD Fila = H2.Range("B" & Rows.Count).End(xlUp).Row + 1 H2.Range("B" & Fila) = H1.Range("K9") 'Número reserva H2.Range("C" & Fila) = H1.Range("B4") 'Tipo reserva H2.Range("D" & Fila) = H1.Range("I6") 'Emitido H2.Range("E" & Fila) = H1.Range("C9") 'Nombre del grupo H2.Range("F" & Fila) = H1.Range("J5") 'Estado de la reserva H2.Range("B6:K" & Fila).Sort Key1:=H2.Columns("B") '-- RESUMEN Fila = H3.Range("B" & Rows.Count).End(xlUp).Row + 1 H3.Range("B" & Fila) = H1.Range("K9") 'Número reserva H3.Range("C" & Fila) = H1.Range("B4") 'Tipo reserva H3.Range("D" & Fila) = H1.Range("I6") 'Emitido H3.Range("E" & Fila) = H1.Range("C9") 'Nombre del grupo H3.Range("F" & Fila) = H1.Range("J5") 'Estado de la reserva H3.Range("B6:K" & Fila).Sort Key1:=H3.Columns("B") '-- H1.Activate H1.Range("B4:K4").ClearContents H1.Range("B2").Select End Sub
  17. Ya está revisado, salvo error u omisión, el formulario adjunto es la fusión de todos los demás. 🙂 Contar2.xlsm
  18. Falta revisar, pero esta sería la idea. Si te convence, mañana lo termino de pulir. Contar2.xlsm
  19. Me da la impresión que se llena alguna pila de eventos de tanto Unload Me y .Show. Prueba añadiendo la sentencia DoEvents después de cada Unload Me, a ver si se soluciona. Lo suyo sería hacerlo todo en un único formulario a base de motrar/ocultar frames. Mañana si tengo un hueco te subo un ejemplo de lo que quiero decir, mientras, prueba lo que te he comentado.
  20. Pues a mi no me funciona, en Europa utilizamos la coma como separador decimal, en cualquier caso, no tiene sentido convertir a doble una variable que ya está definida como doble y se acumula convirtiendo a doble los textbox, definiendo las variables como moneda se arregla el problema . Imagino que es un problema de precisión a la hora de convertir. (¿?) Otra forma sería convertir a moneda antes de comparar Vendes = CCur(Vendes) Mitxans = CCur(Mitxans) que es mas o menos lo que haces tú, o sea eliminar a partir del tercer decimal. X1 = CDbl(Format(Vendes, "#.00")) '<<<<<<------------ X2 = CDbl(Format(Mitxans, "#.00")) '<<<<<<------------ Se agradece el interés y la dedicación.🙂🙂
  21. Hola a todos: Abrir el adjunto y pulsar el botón Registrar en el formulario que se muestra. ¿Porque aparece el mensaje si la condición que controla el mensaje no se cumple? Gracias anticipadas. Descuadre.xlsm
×
×
  • Create New...

Important Information

Privacy Policy