VBA仅对文本进行排序,忽略带公式的单元格

VBA仅对文本进行排序,忽略带公式的单元格,vba,excel,Vba,Excel,我有一个非常大的表格,大约有150列,其中大部分包含公式。当我想对输入到不使用公式的单元格中的数据进行排序时,会把整个表格弄乱。-输入单元格不在一起 目前,我在VBA中的解决方案是将单元格复制到另一个(隐藏)工作表中,排序并将其全部放回原处。我只是觉得这对于一个看似简单的任务来说太多了。有没有更聪明的方法来解决这个问题 编辑 qua@varocabas我尝试了以下代码: Private Sub sortInputButton_Click() ' This sub sorts the in

我有一个非常大的表格,大约有150列,其中大部分包含公式。当我想对输入到不使用公式的单元格中的数据进行排序时,会把整个表格弄乱。-输入单元格不在一起

目前,我在VBA中的解决方案是将单元格复制到另一个(隐藏)工作表中,排序并将其全部放回原处。我只是觉得这对于一个看似简单的任务来说太多了。有没有更聪明的方法来解决这个问题

编辑

qua@varocabas我尝试了以下代码:

Private Sub sortInputButton_Click()
    ' This sub sorts the inpur, without messing up the references [hopefully]
    Dim rowCount As Integer
    Dim colCount As Integer

    rowCount = countItems
    colCount = 180

    Dim inputRange As Range
    Set inputRange = Sheets("Input").Range("A3")
    Set inputRange = inputRange.Resize(rowCount, colCount)

    Dim targetRange As Range

    On Error Resume Next ' If range is nothing, throws an error - we don't want that
    Set targetRange = inputRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If targetRange.Cells.count > 0 Then
        Sheets("Input").Select
        targetRange.Select
        Call targetRange.Sort(Sheets("Input").Range("A3"), xlAscending)
    End If

End Sub

但是这给了我一个错误
您选择的命令不能用多个选项执行。选择一个范围,然后再次单击该命令。

您可以使用
特殊单元格

Dim targetRange As Range
On Error Resume Next 'In case of not finding any cell under the requested conditions.
Set targetRange = inputRange.SpecialCells(xlCellTypeConstants)
inputRange
包含所有单元格,而
targetRange
仅包含不包含公式的单元格

更新:

Dim targetRange As Range
On Error Resume Next ' If range is nothing, throws an error - we don't want that
Set targetRange = inputRange.SpecialCells(xlCellTypeConstants)
Call targetRange.Sort(targetRange.Cells(1, 1), xlAscending)
'targetRange.Sort targetRange.Cells(1, 1), xlAscending -> alternative not requiring "Call"

你不需要
错误转到0
,也不需要
targetRange.Cells.count
(如果
targetRange
没有单元格,
错误恢复下一步将捕获它->这就是我包括这一行的原因;
SpecialCells
有这个小限制)。您不需要任何
。请选择其中一个呼叫。大概引起
.Sort
错误的是
表单(“输入”).Range(“A3”)
,我用
targetRange
(无论是什么)的第一个单元格替换了它。

这一点起初似乎有效,但我发现它只有在输入详细信息之前才有效。然后我得到了这个错误:
您选择的命令不能用多个选项执行。选择一个区域,然后再次单击命令。
我有6个用户输入的数据单元格,然后是20x
[formula][input]
,后面还有很多。我的观点是,输入和公式是混合的。@Kentora我不理解这个问题。你能用你试过的代码更新你的问题吗?这样我就可以帮你了?这个解决方案应该可以不受任何限制地工作。@Kentora另外,我还包括了一个错误捕获,因此它在任何情况下都不能输出错误(在最坏的情况下,它不会工作)。我现在更新了这个问题。我遇到的问题不是
Specialcells
命令,而是排序本身。@Kentora OK。代码中有各种冗余部分,但无论如何都应该可以工作。问题很可能是由您用作排序参考的图纸(“输入”).Range(“A3”)引起的,尽管targetRage中可能不存在(可能有公式)。将更新我的答案现在与代码,我希望你会发现有用的。