VBA / Excel中的外部过程和语法无效

时间:2017-06-06 18:06:03

标签: excel vba excel-vba excel-2010

我是编程/编码的新手,我的代码遇到了问题。

我目前正在尝试在excel中编写一个宏,它将遍历一个Excel文档并在重复的列上插入一个部分空白的行。

我目前正在使用Excel 2010

例如,如果excel表包含:

Column A, Column B, Column C, Column D, Column E
       1     Apples        1        40      Blue
       1    Bananas        2        50       Red
       1    Oranges        3        60      Pink
       2   Cherries         
       3      Kiwis           

然后脚本会将其排序为:

Column A, Column B, Column C, Column D, Column E
       1     Apples        1        40      Blue
       1    Bananas        
       1    Oranges        
       2   Cherries        2        50       Red
       3      Kiwis        3        60      Pink  

因此,如果A列中的值不等于C列中的值,则按列A和C对数据进行排序,同时在C,D和E中创建空格。

到目前为止我的代码:

Sub Main()
Dim a As Long, c As Long
Dim objRange As Range
Dim strCIDCol1 As String, strCIDCol3 As String

a = 1 'row counter for Column A
c = 1 'row counter for Column C

Do Until ActiveSheet.Cells(a, 1) = ""
    'sets the loop to run until A1 is blank
    strCIDCol1 = ActiveSheet.Cells(a, 1)
        'sets the value of A1 as CIDCol1
    strCIDCol3 = ActiveSheet.Cells(c, 3)
        'sets the value of C1 as CIDCol3
    If (strCIDCol1 <> strCIDCol2) Then 
        'runs until A(a) and C(c) are not equal
        Set objRange = ActiveSheet.Cells(c, 3).Range(Cells(c, 3), Cells(c, 5))
        objRange.Activate
            'Selects Columns C, D, and E
        objRange.Insert (xlShiftDown)
            'Inserts "Shift Row Down"
        strCIDCol1 = ActiveSheet.Cells(a + 1, 1)
            'moves on
    End If
    a = a + 1 'adds 1 to counter to move to next row
    c = c + 1 'adds 1 to counter to move to next row
Loop
End Sub

我一直在

上收到“无效的外部程序”错误
a = 1
c = 1

a = a + 1
c = c + 1

我还在

上收到1004错误“范围类的插入方法失败”
objRange.Insert (xlShiftDown)

我不知道我在用objRange做什么。我在网上看到了这些代码并尝试调整它以适应我的需要。解释的方式是objRange用于突出显示选定区域C,D和E列。然后Insert会通过在突出显示的单元格上方插入一行来移动单元格。

1 个答案:

答案 0 :(得分:0)

 If (strCIDCol1 <> strCIDCol2) Then 

您从未定义过strCIDCoL2。我认为你的意思是str CIDCol3。

Set objRange = ActiveSheet.Cells(c, 3).Range(Cells(c, 3), Cells(c, 5))

这是设置范围的错误语法。尝试使用:

Set objRange = Range(ActiveSheet.Cells(c,3).Range(Cells(c,3), Cells(c,5)))

您还确定使用objRange.activate而不是objRange.select吗?