我知道如果使用「範圍對象」垂直移動,例如A1,A2,A3 ...我可以使用範圍代碼(「A」& i),只需更改「i」值。但是,如果要像A1,B1,C1 ...那樣水平移動,那麼使用Range對象可以實現類似的方式嗎?Excel VBA - 如何編程Range對象以水平移動?
回答
使用Cells
對象。這適用於使用行號和列號,所以Cell(1,1)
是A1,Cells(1,2)
是B1,Cells(2,2)
是B2等。您可以使用Range(Cells(1,1),Cells(2,2))
(它是A1:B2)創建一系列單元格。你可以將兩者結合起來,但我通常不會:Range("A1", Cells(2, 2))
。
如果引用一個範圍對象還可以確保您清楚地瞭解該工作表。如果Sheet1是活動頁面,那麼Range("A1", Worksheets("Sheet2").Cells(2, 2))
將引發錯誤,因爲它試圖在Sheet1上的A1和Sheet2上的B2中創建一個範圍。
Cells
通常是最直接的(也是最簡單的)方式,re:達倫的答案。
儘管可以創建變通方法,以便也可以使用Range
方法。有幾種可能性,但最簡單的可能是Range().Offset。
表達 .Offset(RowOffset,ColumnOffset)
後者的說法是我們所感興趣的,但要學會整個方法的工作原理是非常有用的。
實例:
Range("A1").Offset(1, 0)
等於Range("A2")
(一行從A1
向下)
Range("A1").Offset(0, 1)
等於Range("B1")
(一列從A1
右側)
Range("C1").Offset(1, 1)
等於Range("D2")
(一行向下,一個於,從C1
)
Range("C1").Offset(0, 3)
右列等於Range("F1")
(三列,以從C1
右側)
(你會發現Range().Offset
使用就行/列,Cells
相同的語法。)
你也可以做一個更迂迴的方式:
Sub arrayTest()
Dim letterArray() As String
Dim rng As Range
' Declare a bunch of letters here - expand if you need more columns
' Using a 1 as the first letter because remembering Option Base 1 is not something I prefer
' but you may of course do it. In that case, remove the "1:" from the beginning of the string
Const letterString As String = "1:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z"
' Fill an array with our letters
letterArray() = Split(letterString, ":")
' Range("A1")
Set rng = Range(letterArray(1) & "1")
Debug.Print rng.Address
' Range("B2")
Set rng = Range(letterArray(2) & "2")
Debug.Print rng.Address
' Range("M83")
Set rng = Range(letterArray(13) & "83")
Debug.Print rng.Address
Debug.Print vbCr
' Or we can loop it
For i = 1 To UBound(letterArray)
Debug.Print Range(letterArray(i) & "1").Address
Next i
End Sub
$ A $ 1
$省略從環路B $ 2
$ M $ 83
打印出來,因爲它佔用了大量的空間...但運行VBE中的宏並在立即窗口(Ctrl + G)中查看結果。
非常感謝Vegard。 – RealLifePM
- 1. Excel的VBA Range對象
- 2. 水平Excel VBA CopyFromRecordset?
- 3. Excel VBA Range對象已設置,但內部對象丟失
- 4. VBA Excel Range to cell
- 5. Excel VBA水平計數
- 6. 如何移動DIV水平
- 7. 以編程方式移動FormulaFieldDefinition對象
- 8. 如何讓對象在Android中水平或垂直移動?
- 9. Excel VBA - 如何在循環中將水平範圍向下移動一行
- 10. 以編程方式水平滾動PDFView
- 11. 如何在Mac上以編程方式移動界面對象?
- 12. 移調在VBA命名範圍Range對象
- 13. Excel VBA:如何以可編程方式打開對齊網格
- 14. 如何在Android中以編程方式水平滾動GridView?
- 15. 如何以編程方式停止水平滾動?
- 16. 水平移動div?
- 17. UIModalTransitionStyle水平移動
- 18. jQuery - 在垂直滾動上水平移動對象
- 19. 應用程序定義或對象定義的錯誤 - Excel的VBA .range(細胞
- 20. 偏移vba對象
- 21. Excel VBA編程
- 22. Excel VBA - 基於編號移動數據
- 23. 添加水平軸標籤 - VBA Excel
- 24. 如何創建水平div移動
- 25. 如何沿着水平線移動SKSpriteNode
- 26. 水平對齊元素,jquery移動
- 27. 從最後一個對象水平移動到第一個
- 28. 在javascript中水平移動對象的算法
- 29. 以編程方式偏移水平居中元素
- 30. 垂直移動水平移動div
你知道爲什麼我使用Cells對象,例如鍵入「Cells(1,1)」。並沒有自動完成。即自動顯示屬性,方法等...當我鍵入「範圍(」A1「)。」「?我必須把它像」範圍(單元格(1,1))「。」獲得自動完成? – RealLifePM
對不起,不知道爲什麼沒有自動完成 - 我現在遇到了與'FIND'相同的問題。但是如果我輸入'Cells('然後彈出_Default([RowIndex],[ColumnIndex])消息 –
由於某些原因,Cells的Item屬性不會返回一個Range類型的對象,這就是爲什麼你沒有得到Intellisense – Rory