Error en ejecucion de macro

Me podrian apoyar con esta macro cuando la ejecuto de esta forma me marca error, MyRango es una variable

Dim myRango As Range

Set myRango = Worksheets(HojaDatoGrafico).Range("OF50:OG81")

'ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort.SortFields.Add Key:=myRango, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

Y con estos datos funciona bien, lo unico que le cambio es la variable "myRango" por "Range("OG50:OG81"), y me marca error

ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort.SortFields.Add Key:=Range( _
"OG50:OG81"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort
.SetRange myRango
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
. Apply ' Aqui me marca el error "la referencia de ordenacion no es valida, compruebe que esta dentro de los datos que desea ordenar y que el primer cuadro por ordenar no es el mismo o esta en blanco"
End With

1 Respuesta

Respuesta
2

H o l a:

Para ordenar ocupas 2 rangos, un rango es el que contiene el total de la información que vas a ordenar (puede ser una o varias columnas; el otro rango es el que contiene la llave por el que vas a ordenar el primer rango, esta llave solamente es de una columna:

    With ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort
        .SortFields.Add Key:=Range("OG50:OG81"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange Range("OF50:OG81")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

El rango en .setRange va desde OF hasta OG

La llave solamente es la columna OG


Si lo quieres hacer con variables, quedaría así:

    Dim myRango As Range
    Dim KeyRango As Range
    Set myRango = Range("OF50:OG81")    'total de rango que va a ordenarse
    Set KeyRango = Range("OG50:OG81")   'columna llave para ordenar
    '
    With ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort
        .SortFields.Add Key:=KeyRango, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange myRango
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Muchas gracias Dante por tu pronta respuesta, se resolvió ese problema pero ahora me arroja otro que es cuando quiero asignarle un nuevo rango de datos al Gráfico 1 que tengo, el procedimiento completo es el siguiente:

(Con negritas marco donde me marca error"

Private Sub Materia_Change()
Dim HojaDatoGrafico As String
Dim NombreHoja As String
Dim Casos As String
Dim myRango As Range
Dim keyRango As Range

Worksheets("Config").Range("G31") = Materia
HojaDatoGrafico = Worksheets("Config").Range("F22") & Worksheets("Config").Range("F23")
Set myRango = Worksheets(HojaDatoGrafico).Range("OF50:OG81")
Set keyRango = Worksheets(HojaDatoGrafico).Range("OG50:OG81")

If (BuscarHoja1(HojaDatoGrafico)) Then
Casos = Worksheets("Config").Range("R24")

If Worksheets("Config").Range("R24") = Casos Then
Worksheets(HojaDatoGrafico).Select
Range("ALUMNOS").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"CRITERIO"), CopyToRange:=Range("SALIDA"), Unique:=False
'Ordena segun la materia para mostrar los 10 mejores
myRango.Select
ActiveWindow.LargeScroll Down:=-1
ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort.SortFields.Add Key:=keyRango, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort
.SetRange myRango
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
Range("OG49").Select
End With
Worksheets("Grafica").Select
'Activa el Gráfico para hacer los cambios de Rangos
ActiveSheet.ChartObjects("Gráfico 1").Activate
'Cambia los datos del Rango del Grafico
ActiveChart.SetSourceData Source:=Sheets(HojaDatoGrafico).myRango
'Cambia el Titulo o encabezado del Grafico
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Text = "Los Diez Mejores Alumnos en " & Materia
'Muestra el Grafico en UserForm
Set Grafico = Sheets("Grafica").ChartObjects("Gráfico 1").Chart
'Nome = "C:\Windows\Temp" & Application.PathSeparator & "temp.gif"
Nome = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
Grafico.Export Filename:=Nome, Filtername:="GIF"
Image1.Picture = LoadPicture(Nome)
Image1.Visible = True
End If
Label3.Visible = False
Label4.Visible = False
Bimestre.Visible = False
Materia.Visible = False
Grado.SetFocus
Else
MsgBox "La Hoja de la Base de Datos para el Grafico No existe " & HojaDatoGrafico, vbCritical, "Osiany Contreras"
Grupo.BackColor = &HFF&
Grupo.Enabled = True
Image1.Visible = False
End If
End Sub

H o l a:

Valora la respuesta.

Con todo gusto te ayudo con lo que necesites. Crea una nueva pregunta para cada petición.

Sal u dos

Muchas gracias Dante por tu pronta respuesta, se resolvió ese problema pero ahora me arroja otro que es cuando quiero asignarle un nuevo rango de datos al Gráfico 1 que tengo, el procedimiento completo es el siguiente:

(Con negritas marco donde me marca error"

Private Sub Materia_Change()
Dim HojaDatoGrafico As String
Dim NombreHoja As String
Dim Casos As String
Dim myRango As Range
Dim keyRango As Range

Worksheets("Config").Range("G31") = Materia
HojaDatoGrafico = Worksheets("Config").Range("F22") & Worksheets("Config").Range("F23")
Set myRango = Worksheets(HojaDatoGrafico).Range("OF50:OG81")
Set keyRango = Worksheets(HojaDatoGrafico).Range("OG50:OG81")

If (BuscarHoja1(HojaDatoGrafico)) Then
Casos = Worksheets("Config").Range("R24")

If Worksheets("Config").Range("R24") = Casos Then
Worksheets(HojaDatoGrafico).Select
Range("ALUMNOS").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"CRITERIO"), CopyToRange:=Range("SALIDA"), Unique:=False
'Ordena segun la materia para mostrar los 10 mejores
myRango.Select
ActiveWindow.LargeScroll Down:=-1
ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort.SortFields.Add Key:=keyRango, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets(HojaDatoGrafico).Sort
.SetRange myRango
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
Range("OG49").Select
End With
Worksheets("Grafica").Select
'Activa el Gráfico para hacer los cambios de Rangos
ActiveSheet.ChartObjects("Gráfico 1").Activate
'Cambia los datos del Rango del Grafico
ActiveChart.SetSourceData Source:=Sheets(HojaDatoGrafico).myRango
'Cambia el Titulo o encabezado del Grafico
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Text = "Los Diez Mejores Alumnos en " & Materia
'Muestra el Grafico en UserForm
Set Grafico = Sheets("Grafica").ChartObjects("Gráfico 1").Chart
'Nome = "C:\Windows\Temp" & Application.PathSeparator & "temp.gif"
Nome = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
Grafico.Export Filename:=Nome, Filtername:="GIF"
Image1.Picture = LoadPicture(Nome)
Image1.Visible = True
End If
Label3.Visible = False
Label4.Visible = False
Bimestre.Visible = False
Materia.Visible = False
Grado.SetFocus
Else
MsgBox "La Hoja de la Base de Datos para el Grafico No existe " & HojaDatoGrafico, vbCritical, "Osiany Contreras"
Grupo.BackColor = &HFF&
Grupo.Enabled = True
Image1.Visible = False
End If
End Sub

H o l a:

Me refiero a que debes crear otra pregunta en el tema de excel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas