将非顺序列引用的大小调整为第一行

时间:2017-04-14 14:56:47

标签: excel-vba vba excel

有人可以告诉我如何将列引用的大小调整为工作表中的第一行吗?

我得到的错误(两者都有不同的原因),这是可以理解的,但仍然令人沮丧:

尝试1:

Dim Columns_To_Export as String
    Columns_To_Export ="$B:$C,$E:$E"

Range(Columns_To_Export).Resize(1).Select

尝试2:

Dim Columns_To_Export as String
    Columns_To_Export ="$B:$C,$E:$E"

Colulumns(Columns_To_Export).Resize(1).Select

2 个答案:

答案 0 :(得分:0)

基本上,Column是范围,而不是字符串。这段代码可以完成这项工作。

Dim Rng As Range

With ActiveSheet
    Set Rng = Application.Union(.Columns("B"), .Columns("C"), .Columns("E"))
End With
Rng.Select

答案 1 :(得分:0)

我担心我对上述反应并不十分专注。以下是我认为更好的尝试。

Private Sub SelectCells()
    On Error Resume Next
    Debug.Print CellsForExport("$B:$C, $E:$E, G").Address
End Sub

Function CellsForExport(ByVal Desc As String) As Range
    ' 15 Apr 2017

    Dim Fun As Range, Rng As Range
    Dim Spi() As String, Spj() As String
    Dim i As Integer, j As Integer
    Dim Cstart As Long, Cend As Long

    Desc = Replace(Desc, "$", "")
    Spi = Split(Desc, ",")
    For i = 0 To UBound(Spi)
        Spj = Split(Trim(Spi(i)), ":")
        Cstart = Columns(Trim(Spj(0))).Column
        Cend = Cstart
        If UBound(Spj) Then Cend = Columns(Trim(Spj(1))).Column
        With ActiveSheet.Rows(1)
            Set Rng = .Range(.Cells(Cstart), .Cells(Cend))
        End With
        If Fun Is Nothing Then
            Set Fun = Rng
        Else
            Set Fun = Application.Union(Fun, Rng)
        End If
    Next i

    Set CellsForExport = Fun
End Function

函数CellsForExport返回调用过程SelectCells指定的范围。在这种情况下,调用过程不会选择范围。相反,它打印其地址。这是出于测试目的。 CellsForExport("$B:$C, $E:$E, G").Select将选择单元格。您也可以在某处粘贴此范围,或以任何其他方式操纵它,您可以操作范围。

请注意,在指定列时可以省略$符号。您也不必指定E:E来定义单个列,但如果有人做了所有宏,则会对其进行排序。空白无所谓,逗号是至关重要的。