【问题标题】:Excel 2010 VBA Range doesn't select correct data out of a named tableExcel 2010 VBA 范围不会从命名表中选择正确的数据
【发布时间】:2016-08-15 22:04:00
【问题描述】:

我尝试从命名范围中选择多个列。我用一些变量构建了应该选择的字符串:

Dim onecolumn as Integer, lastcolumn as Integer
Dim tblTable as ListObject
Dim strforrange as String

Set tblTable = Sheet1.ListObjects("Table1")
onecolumn = 3
lastcolumn = tblTable.Range.Columns.Count 

strforrange = tblTable & "[[#All],[Column" & onecolumn & "]:[Column" & lastcolumn - 1 & "]]"

Range(strforrange).Select

我逐步运行代码并检查了“strforrange”变量。即使正确,所选列也与字符串中所述的列不同。

有没有其他方法可以获取命名表的范围,或者有人知道解决方案吗?

【问题讨论】:

    标签: vba excel named-ranges listobject


    【解决方案1】:

    以下内容应该有所帮助;我已经引用了一个有用的函数,它将列号转换为相应的列字母(信用:Function to convert column number to letter?@brettdj 的回答)

    Function Col_Letter(lngCol As Long) As String
    Dim vArr
    vArr = Split(Cells(1, lngCol).Address(True, False), "$")
    Col_Letter = vArr(0)
    End Function
    

    使用此函数,您只需使用 DataBodyRange 函数和 Columns 即可选择所需的范围:

    Sub SelectSpecificDataRange
    
    Dim startColumn as Long, lastColumn as Long
    Dim tblTable as ListObject
    Dim startColumnLetter, lastColumnLetter as String
    
    Set tblTable = Sheet1.ListObjects("Table1")
    startColumn = 3
    startColumnLetter = Col_Letter(startColumn)
    lastColumn = tblTable.Range.Columns.Count
    lastColumnLetter = Col_Letter(lastColumn)
    
    tblTable.DataBodyRange.Columns(startColumnLetter & ":" & lastColumnLetter).Select
    
    End Sub
    

    【讨论】:

    • 感谢您的回答,已解决!在您的代码中有一个小错误:变量 startColumnLetter 和 lastColumnLetter 不应用双引号括起来。
    • 很高兴我能帮上忙!哦,是的,我现在将对其进行编辑。谢谢
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2019-12-05
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多