2016-04-22 36 views
1

我嘗試從命名範圍中選擇多個列。我建立的字符串應該選擇什麼變量:Excel 2010 VBA範圍不會從命名錶中選擇正確的數據

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」變量。即使是正確的,選定的列也不同於字符串中列出的列。

是否有任何其他方式來獲取命名錶的範圍或有人知道這個解決方案?

回答

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 
+0

謝謝你的回答,它修復了它!在你的代碼中有一個小錯誤:變量startColumnLetter和lastColumnLetter不應該用雙引號括起來。 – freakfeuer

+0

很高興能幫到你!哦,是的,我現在就編輯它。謝謝 – Jordan