首页 > 解决方案 > 根据用户输入对列进行排序

问题描述

请参考下面的代码。我正在尝试根据Range("AD2"). 问题出在key1:=rng_sort我认为以错误方式调用的线路上。

我想要做的是更改根据在单元格上选择的条件排序的列 Range("AD2")。在该单元格上,我有一个数据验证列表,如下所示: 在此处输入图像描述

如果Range("AD2") = "Event"我想对 I 列进行排序。如果它等于“Vo”,我想对 J 列进行排序。

知道我可能做错了什么吗?

谢谢你。

Sub sortEvent()

Sheets(1).Activate ' activate sheet(1)

Dim n As Integer
Dim j As Integer
Dim i As Integer
Dim h As Integer
Dim Lastrow As Integer
Dim ng_sort As Range
        
        Lastrow = Cells(Rows.Count, "I").End(xlUp).Row ' guarda o indice da ultima linha com conteudo da coluna I. Mesmo havendo vazios identifca a ultima linha
        Length = Range(Range("I10"), Range("I" & Lastrow)).Rows.Count ' dimensão da coluna O ate a ultima celula com conteudo começando na O6
        
For firstrow = 1 To Length ' loop na coluna O
            If Range("C2").Offset(firstrow, 0).Interior.Color = RGB(68, 114, 196) Then
                Exit For
            End If
Next firstrow

If Range("AD2") = "Event" Then
        rng_sort = Range("I1")
    Else
        rng_sort = Range("J1")
End If
            
n = 0
j = 1
        
        For i = 1 To Length ' loop na coluna I
            If Range("C2").Offset(firstrow + i, 0).Value <> "" Then
                n = n + 1
            Else
                Range(Range("C2").Offset(firstrow + j, 0), Range("C2").Offset(firstrow + j + n - 1, 0)).EntireRow.sort key1:=rng_sort, order1:=xlAscending, Header:=xlNo
                j = j + n + 1
                n = 0
            End If
        Next i
End Sub

标签: excelvbasorting

解决方案


您没有Option Explicit在模块的开头设置,否则您会看到您的问题。

转到工具/选项并将选项设置为始终需要变量声明。我不知道为什么 MS 不将其设为默认值。

你有

Dim ng_sort As Range

但是在您的代码中,您显示

rng_sort = Range("I1")

由于rng_sort从未声明过,它将用作变体并包含 的内容Range("I1"),而不是范围对象。

如果您声明Option Explicit,这将被标记为错字;如果没有Set关键字,您将收到运行时错误 91,并且能够自己解决这个问题。

尝试:

If Range("AD2") = "Event" Then
        set rng_sort = Range("I1")
    Else
        set rng_sort = Range("J1")
End If

我没有测试你的代码,因为你没有提供任何数据示例,但你肯定需要Set一个范围对象。


推荐阅读