2017-06-06 13 views
-1

私はプログラミング/コーディングが新しく、コードに問題があります。VBA/Excelで無効な外部プロシージャと構文

私は現在、エクセル文書を読み込み、重複した列に部分的に空白の行を挿入するマクロをExcelに書き込もうとしています。

Excelシートが含まれている場合、私は現在、エクセル2010例えばので

を使用しています。このようにデータをソートする

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 

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   

その後、スクリプトがにそれをソートします列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 

私はまた、1004エラー「の挿入を取得しています

a = 1 
c = 1 

a = a + 1 
c = c + 1 

に "無効な外部の手順" エラーを得続けます範囲クラスのメソッドが失敗しました」

objRange.Insert (xlShiftDown) 

私はobjRangeで何をしているのか分かりません。私はコードをオンラインで見て、必要なものに合わせてそれを適応しようとしました。説明された方法では、objRangeを使用して、選択された領域の列C、D、およびEを強調表示しました。そしてInsertは、強調表示されたセルの上に行を挿入することによってセルをシフトダウンします。

+0

// VBAではコメントに使用されていません。 //を ' – RADO

+1

@Tonyと置き換えると、 'objExcel'となります。これはあなたのコードの一部であると思われ、エラーはあなたが今私たちに示されていないものによって引き起こされると確信しています。 – Masoud

+1

便利なヒント:ローのカウントに整数を使用しないのは、符号付き16ビット値(最大32767)しか保持できないためです。代わりにLongを使用します。 –

答えて

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.selectの代わりにobjRange.activateを使用してもよろしいですか?