2016-07-21 10 views
0

下のコードで選択条件を満たすセルが1つしかないときに、オーバーフローエラーを排除するためにコードを修正する手助けをしてもらえますか?セルA4および下には製品の説明が含まれ、セルB4には数量が含まれています。その目的は、A4から列Lへの説明をB4の数量に対応する回数だけコピーし、列Aの製品説明と同じ回数だけこのプロセスを繰り返すことです。これは、複数の説明がある場合は完全に機能します。コピーされますが、A5が空の場合はオーバーフローエラーになります。以下のコードで呼び出されている3つのマクロは、すべて無害であり、実際のコードが実行される前にこのワークシートの保護を解除してから、範囲をフォーマットした後にワークシートを再保護するだけです。 私はExcelの公式にはうんざりですが、コーディングが弱いので、答えは私のコードの単純な欠陥だと思っています。事前に多くの感謝。Excelランタイムエラー '6'の原因は何ですか?

Private Sub Create_NumberList() 

    Application.ScreenUpdating = False 
    Sheets("Selections").Select 
    Call UnprotectSelections 
    Dim lRow As Long 
    Dim x, MyCount As Integer 

    lRow = Range("A4:B4").End(xlDown).Row 

    For Each cell In Range("A4:A" & lRow) 
     cell.Copy 
     MyCount = cell.Offset(0, 8) 

     Do 
      x = x + 1 
      Range("L" & x).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
                       :=False, Transpose:=False 
      MyCount = MyCount - 1 
     Loop Until MyCount = 0 
    Next cell 

    Application.CutCopyMode = False 
    Call ProtectSelections 
    Call ReformatSelections 
End Sub 

答えて

0

変更:lRow = Range("A4:B4").End(xlDown).Row

へ:lRow = Range("A" & Rows.Count).End(xlup).Row

理由はA5:B5とダウンにはすべて空の場合、lRowxlDown機能を備えたスプレッドシートの一番下、および変数になることです行番号のメモリを保持することはできません(コードも不必要にループします)。

コードが最下部から始まり、(xlUp)を参照すると、チェックするデータの最後の行も検索されます。

+1

Scottは、完璧に動作するだけでなく、VBAプロセスを大幅にスピードアップしました。また、私が素晴らしいソリューションを提供したのは今回が2回目であり、十分に感謝することはできません。 –

+0

@ user1483720 - これは4年前のようでした。素晴らしい!また、あなたのためにうまくいく答えを受け入れるか、他の人が将来的に利益を得ることができるように有用であることを、SOのベストプラクティスにします。 –

+0

申し訳ありません - 私はそれを逃した。あなたが普通のユーザーでないなら、それは直感的ではありません。 –

関連する問題