Cómo aplicar. ClearOutline On QueryTable?
Estoy poniendo esbozos en una tabla que obtiene datos de Power Query a través de VBA basados en datos en la propia tabla.
ActiveSheet.Rows(2).Cells(7).Activate ' Set the row containing the OutlineLevel value to be active
Dim RowNumber As Integer ' Counter for the row we're on
For RowNumber = 2 To ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row ' Go from the first data row to the last row containing data in the first cell of the sheet
ActiveCell.EntireRow.OutlineLevel = CInt(ActiveCell.Value) ' Set the outline level
ActiveCell.Offset(1, 0).Activate ' Go to the next row in the sheet
Next RowNumber
Eso funciona siempre y cuando aclare el esquema manualmente primero. Sin embargo, cuando aclaro todos los esbozos primero ejecutando:
ActiveSheet.Rows().ClearOutline
I get
Error de ejecución '1004': ClearOutline método de clase Range falló
Traté de limpiar el contorno para todas las filas corriendo:
ActiveSheet.Rows().OutlineLevel = 1
Eso causa un retraso de 30-150ms cuando me puse .OutlineLevel
, y para 150K filas, eso va a causar problemas.
Pregunta hecha hace 3 años, 5 meses, 6 días - Por codemasterx
3 Respuestas:
-
ActiveSheet.Rows(). ClearOutline
Con
.Rows().
estás recibiendo ese error porque no sólo estás tratando de desagrupar las filas que tienen el agrupamiento, sino también el resto de las filas en la hoja de trabajo que no están agrupadas y por lo tanto estás recibiendo el error.Encase esa línea con OERN e inténtelo de nuevo
On Error Resume Next ActiveSheet.Rows().ClearOutline On Error GoTo 0
O asegúrese de encontrar las filas pertinentes que se agrupan y luego no se agrupan sólo esas filas. Algo así.Untested)
Dim rng As Range Dim i As Long Dim ws As Worksheet Dim lRow As Long Set ws = Sheet1 With ws lRow = .Range("A" & .Rows.Count).End(xlUp).Row For i = 1 To lRow If .Rows(i).OutlineLevel > 1 Then If rng Is Nothing Then Set rng = Rows(i) Else Set rng = Union(rng, Rows(i)) End If End If Next i End With If Not rng Is Nothing Then rng.ClearOutline
Respondida el Dec 17, 2020 a las 04:00 - por codexcrafter
Votos positivos: 0 | Votos negativos: 0 -
Para aplicar
ClearOutline
en unQueryTable
, debes manipular directamente elQueryTable
en lugar de intentar limpiar los esbozos a través de las filas de la hoja de cálculo. Aquí hay un ejemplo de cómo puedes aplicarClearOutline
en unaQueryTable
:vb ' Referenciar al QueryTable en la hoja activa Dim qt As QueryTable Set qt = ActiveSheet.QueryTables(1) ' Ajusta el índice (1 en este caso) según sea necesario ' Limpiar los esbozos del QueryTable qt.RefreshStyle = xlInsertDeleteCells qt.Refresh ' Luego puedes volver a crear los esbozos de la manera que lo estabas haciendo antes
Con este enfoque, deberías poder aplicar
ClearOutline
alQueryTable
en lugar de a las filas directamente, lo que debería evitar el error que estás experimentando. Asegúrate de ajustar el índice enActiveSheet.QueryTables(1)
para que coincida con la QueryTable que estás utilizando en tu hoja.Respondida el Dec 18, 2020 a las 03:58 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error que estás recibiendo se debe a que el método
ClearOutline
solo se puede aplicar a rangos individuales, no a toda la hoja de trabajo. Para borrar los esquemas de toda la hoja de trabajo, debes recorrer cada fila y borrar el esquema de cada rango individual.Aquí tienes un código modificado que debería resolver el problema:
vb Sub ClearAllOutlines() Dim RowNumber As Integer ' Recorrer cada fila en la hoja de trabajo For RowNumber = 2 To ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row ' Borrar el esquema de la fila actual ActiveSheet.Rows(RowNumber).ClearOutline Next RowNumber End Sub
Este código recorrerá cada fila de la hoja de trabajo y borrará el esquema de cada fila individualmente, lo que debería resolver el error que estás encontrando.
Respondida el Dec 18, 2020 a las 04:07 - por Gemini
Votos positivos: 0 | Votos negativos: 0