我有使用C / C ++的经验,但我是VBA
和Excel
的新手
我所拥有的是:
Range("A7:L7").Select
Selection.Copy
Range("R18").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'One column copied
问题在于我想要遍历整个范围的单元格(从A6:L6
一直到A41:41
的所有内容)。
我试过调查For循环,但我不明白在选择范围时索引是如何工作的。这是我到目前为止所写的内容:
pasteLocation = 6
For i = 6 To 41
Range("A" & i:"L" & i).Select
Selection.Copy
Range("R" & pasteLocation).Select '+12 every time to this counter
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
pasteLocation = pasteLocation + 12 'want to move down by 12 every time
Next i
显然我做错了,因为我得到“编译错误:预期:列表分隔符或者”
任何人都可以解释如何使用VBA
进行索引以及我做错了什么?
答案 0 :(得分:3)
你有一个错字:
Range("A" & i:"L" & i).Select
应该是
Range("A" & i & ":L" & i).Select
答案 1 :(得分:1)
海因兹有答案。
你可以稍微整理一下代码。无需提及默认参数。也许使用With
增加了一些可读性。我喜欢将大多数对象限定为类Excel
;可能有点过分,但肯定没有任何伤害。
Option Explicit
Sub slightlyTidier()
Dim pasteLocation As Integer
pasteLocation = 6
Dim i As Integer
For i = 6 To 41
With Excel.ActiveSheet
.Range("A" & i & ":L" & i).Copy
'+12 every time to this counter
.Range("R" & pasteLocation).PasteSpecial Paste:=xlPasteAll, Transpose:=True
End With
'want to move down by 12 every time
pasteLocation = pasteLocation + 12
Next i
End Sub
答案 2 :(得分:1)
为了使代码有效,你所要做的就是像Heinzi建议的那样在双引号内移动冒号。由于您是VBA的新手,我认为最好给您一个完整的解决方案。我删除了.Select .Copy和.PastSpecial方法,因为它们不是必需的,可以大大降低代码执行速度。
以下是我认为优化的解决方案:
Sub Solution()
Dim pasteLocation As Integer
pasteLocation = 6
Dim rngFrom As Range
Dim rngTo As Range
For i = 6 To 41
With Excel.ActiveSheet
Set rngFrom = .Range("A" & i & ":L" & i)
Set rngTo = .Range("R" & pasteLocation & ":R" & (pasteLocation + 12))
rngTo.Value = rngFrom.Value
End With
pasteLocation = pasteLocation + 12
Next i
End Sub
虽然此示例仅设置为复制单元格值,但可以轻松包含该范围的其他属性(即格式化等)。