valor registros partir para ocultar número mostrar macro insertar filas fila datos dado copiar con columnas coincide boton blanco automaticamente agregar excel vba excel-vba

excel - registros - macro para insertar filas y copiar datos



El código VBA no mira a través de filas ocultas para agregar una fila con número de seguimiento (3)

Tengo otra pregunta que espero resolver con su ayuda.

¿Qué quiero hacer? Uso Excel para rastrear mi trabajo, actividades, contactos, etcétera. Mientras hacía eso descubrí que estaba haciendo un montón de trabajo repetitivo al agregar filas al final de una hoja llamada "Actividades".

Lo que quiero hacer es esto: - Presione un botón y agregue una fila. - Aumentar el número de seguimiento con 1 - Insertar valores predeterminados

El código. Para automatizar esto, he encontrado (copiado, pegado, ajustado a mis necesidades) el siguiente código:

Sub AddRowActiviteiten_NewAtEnd() ''Add''s a new row at the end of the sheet. Dim wsActiviteiten As Worksheet Set wsActiviteiten = Sheets("Activiteiten") DefType = "Daily" DefStatus = "Open" DefIssue = "*****" DefImpact = "*****" DefPrio = "Laag" MyDate = Date wsActiviteiten.Range("A4").Value = "1" ''Copy the "One Row To Rule Them All" wsActiviteiten.Range("A3:Q3").Copy wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteAll) ''Stop the "copy-action" Application.CutCopyMode = False ''Increase the tracking number with "one" LastNumber = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Value wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = LastNumber + 1 ''Insert default values LastRow = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(-1, 0).Row Cells(LastRow + 1, 2) = DefType Cells(LastRow + 1, 3) = DefStatus Cells(LastRow + 1, 4) = DefIssue Cells(LastRow + 1, 5) = DefImpact Cells(LastRow + 1, 6) = DefPrio Cells(LastRow + 1, 8) = MyDate ''Step down 1 row from present location. ActiveCell.Offset(1, 0).Select End Sub

El problema. En esta hoja, abro nuevos artículos, pero también los cierro. Lo hago al cambiar su estado y ocultarlos de la vista. Y este es el punto donde sale mal. Cuando cierro el último elemento de la lista y quiero agregar una nueva, la macro agrega una nueva fila debajo de la última entrada visible . No encuentra la última entrada que acabo de ocultar. Y también, cuando esto sucede, agregar los valores predeterminados a la nueva fila no funciona. Los agrega a la fila encima del agregado.

De alguna manera esto tiene perfecto sentido. Le digo a la macro que busque la última entrada, pero lo que no entiendo es por qué mira la última entrada visible y por qué no se ve en las filas ocultas.

Para replicar. Copie el código en una hoja (tal vez necesite cambiar el nombre de la hoja) y agregue algunas líneas. Pon algo de información en la última fila y escóndelo. Agregue otras pocas líneas y vea qué sucede.

La solución. ¿Hay una manera de resolver esto? Tal vez hay una manera más inteligente de hacer las cosas? Investigué cosas, pero sobre todo obtuve resultados usando "(" A "y Rows.Count) .End (xlUp)". Un ciclo podría funcionar, pero me temo que 1) No busca a través de filas ocultas y 2) hace que la hoja (algo) sea lenta. Debo decir que he intentado hacer un ciclo, primero quiero ver si mi primera solución es rescatable.

Gracias por su aporte, si hay alguna pregunta, hágamelo saber.

Simon EDIT: código de trabajo para cualquier persona interesada

Sub AddRowActiviteiten_NewAtEnd() ''Add''s a new row at the end of the sheet. Dim wsActiviteiten As Worksheet Set wsActiviteiten = Sheets("Activiteiten") DefType = "Daily" DefStatus = "Open" DefIssue = "*****" DefImpact = "*****" DefPrio = "Laag" MyDate = Date ''Copy the One Row To Rule Them All wsActiviteiten.Range("A3:Q3").Copy ''Offset(y,x) ''De -16 is een getal dat iets doet, maar ik weet niet wat. wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).PasteSpecial (xlPasteAll) ''Stop the "copy-action" Application.CutCopyMode = False ''Het volgnummer verhogen met 1 ''Het laatste getal selecteren (LastNumber) en dan plus 1. LastNumber = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(0, -16).Value wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).Value = LastNumber + 1 ''Insert default values LastRow = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(-1, 0).Row Cells(LastRow + 1, 2) = DefType Cells(LastRow + 1, 3) = DefStatus Cells(LastRow + 1, 4) = DefIssue Cells(LastRow + 1, 5) = DefImpact Cells(LastRow + 1, 6) = DefPrio Cells(LastRow + 1, 8) = MyDate ''Step down 1 row from present location. ActiveCell.Offset(1, 0).Select End Sub


Supongamos que tenemos una columna de estado AB y actualmente cerramos un elemento colocando la palabra "Cerrado" en esa columna y luego ocultando la fila.

En lugar:

  1. Mostrar todas las filas
  2. Realice las inserciones y ediciones necesarias
  3. A través de un bucle, oculta todas las filas marcadas como "Cerrado"

Use esto para obtener la última fila y verá la última fila, incluso si está oculta.

LastRow = wsActiviteiten.UsedRange.Rows.Count


Actualizar

Veo que su hoja tiene un autofiltro que "oculta" las filas de estado, que Find no detecta, a diferencia de las filas ocultas.

Te sugiero que pruebes este código actualizado a continuación:

Sub Test() Dim rng1 As Range If ActiveSheet.AutoFilterMode Then MsgBox ActiveSheet.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Row Else Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious) If Not rng1 Is Nothing Then MsgBox rng1.Row End If End Sub

publicación inicial

Si está ocultando filas, puede usar Find con la opción xlFormulas para buscar entradas en filas ocultas (a diferencia de xlValues ).

Dim rng1 As Range Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious) MsgBox rng1.Address