2016-08-09 4 views
0

非常に新しいVBAをExcelし、ユーザーフォームで注文書を作成する練習に取り組んでいます。行機能数学ClearContents - Excel VBA

いくつかの変数に基づいて行をクリアしようとすると問題が発生しました。

私は次のコードと、シートに追加された行をクリアするためのボタンを持っている:

Private Sub RemovePrevious_Click() 

'Removes last line of PO 

If LineItemTotal > 1 Then 

Rows(LineItemTotal + POrowstart - 1).SpecialCells(xlCellTypeConstants).ClearContents 

End If 

End Sub 

LineItemTotalは、新しい行が追加されるにつれて増加シート上の範囲です。これは、ユーザーフォームの最初に公にPOrowstartで宣言されています。

Private LineItemTotal As Integer 
Private POrowstart As Integer 

次いで、それらを異なるサブに割り当てられています。

LineItemTotal = Range("LineItemTotal") 
POrowstart = 10 

問題があることremovepreviousサブを実行するためのボタンを使用した場合、数学は合わない。たとえば、LineItemTotalが3の場合は、行12(正しいもの)が削除されますが、行11が削除されます。もう一度押すと(LineItemTotalは2になりますので、11を削除する必要があります) 11を削除しているかのように検出されましたが、すでに誤ってこれをクリアしています。

コードにSpecialCellsがあります。これは、保留したい行に数式があるためです。

ありがとうございます。

+1

私はあなたに、しかし非常に強力な助言を与えることができます:あなたが必要とするもの(選択されたセルの消去など)を行い、記録を停止し、生成されたコードをあなたのVBAにコピーするMACROを記録しますしかし調整)。これが私がVBAで多くのことをする方法を見つける方法です。 – FDavidov

+0

これをデバッグする最も簡単な方法は、vbexplorerのlocalsウィンドウを使用し、コードの各ステップで変数の値が変化するのを見ることです.F8を押して1行を実行します。 [表示]> [地方自治体のウィンドウ]楽しい! – User632716

+0

ありがとう!本当に良いアドバイスは、しかし、まだあなたがまだ助けることができる場合は、問題の根底に達していない?私が宣言し、私の​​サブ内の変数を設定する場合、コードが動作しますが、私は一般的な宣言で宣言し、別のサブでそれらを設定しないので、変数と範囲とは何かするようですか?そしてtom preston私はこのコードをデバッガでステップすることはできませんが、別のサブプログラムにスキップするだけです!再びありがとう –

答えて

0

モジュールレベルで宣言されている変数は、期待している値と異なる値を持つ可能性があるため、変数を再度確認してください。一般的に言えば、モジュールレベルの変数を避け、最低レベルのVBAで宣言することをお勧めします:ROutine-level。値を別のルーチンに渡す必要がある場合は、そのルーチンの引数を与え、その値を引数として渡します。

+0

ありがとうJKpieterse、サブ全体を呼び出さずにサブミット間で変数を渡す方法はありますか?私。私はちょうど最初のサブのLineItemTotalとPOrowstartを設定し、他のサブの値を使用したい。しかし、それはお互いにどちらかのサブを呼び出すことはできません。再度、感謝します。 –

+0

コードをステップ実行して、変数の値を調べてみましたか? (それらの上にマウスを置く) – jkpieterse