3

我有使用 C/C++ 的经验,但我对VBAExcel.
我所拥有的是:

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工作以及我做错了什么?

4

3 回答 3

3

You have a typo:

Range("A" & i:"L" & i).Select

should be

Range("A" & i & ":L" & i).Select
于 2013-10-05T17:46:13.527 回答
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

虽然此示例仅设置为复制单元格值,但可以轻松包含范围的其他属性(即格式等)。

于 2013-10-06T14:30:05.413 回答
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
于 2013-10-05T18:10:43.057 回答