2017-07-20 9 views
0

ユーザーがデータをインポートするExcelブックがあります。私はいくつの輸入が完了したのかを数える静的カウンタを持っています。 counter for code ..このマクロは、ユーザーがデータセットをインポートするたびに呼び出されます。 静的カウンタのリセット

Public Sub Macro() 
Static i As Integer 
Worksheets("Hidden").Activate 

i = i + 1 

Cells(i + 1, 1).Select 
ActiveCell.FormulaR1C1 = "=" & i 

Cells(2, 2).Select 
ActiveCell.FormulaR1C1 = "=" & i 

End Sub 

は今、ユーザーが、私は、静的なカウンタをリセットしたい「データクリア」ボタンを押すと、シート内のすべてのデータを消去した場合。これをコード化する方法に関するアイデア?私はオンラインで探していて答えを見つけていません! TIA

+0

デフォルトでfalseに設定されているオプションのブール値「リセット」を追加します。カウンタをリセットするには「マクロTrue」を呼び出します。 –

答えて

2

Static変数を使用する代わりに、Public変数(ルーチン外で宣言されています)を使用する必要があります。これは、他のマクロが「見る」ことができる唯一の方法です。

Public i As Integer 

Public Sub Macro() 
Worksheets("Hidden").Activate 

i = i + 1 

Cells(i + 1, 1).Select 
ActiveCell.FormulaR1C1 = "=" & i 

Cells(2, 2).Select 
ActiveCell.FormulaR1C1 = "=" & i 

End Sub 
+0

それでは、クリアデータボタンが選択されているときにi = 0に設定するにはどうすればよいですか? – hdk857

+0

ワークシート内のセルをクリアするのと同じルーチンでクリアします – jsotola

+0

fyi:_activate_ ... _select_ ... _activecell_を使用しないでください。ワークシート( "隠し")を使用するセル(i + 1、1).FormulaR1C1 = "="&i' – jsotola

2

オプションのブールFalseにデフォルトパラメータ「リセット」を追加します:カウンターをリセットするためにMacro Trueを呼び出します。

Public Sub Macro(Optional reset As Boolean = False) 

    Static i As Integer 
    If reset Then 
     i = 0 
     Exit Sub 
    End If 

    Worksheets("Hidden").Activate 

    i = i + 1 

    Cells(i + 1, 1).Select 
    ActiveCell.FormulaR1C1 = "=" & i 

    Cells(2, 2).Select 
    ActiveCell.FormulaR1C1 = "=" & i 

End Sub 
+0

私もそれを考えました。問題は、もはや従来の「マクロ」ではないということですか?その名前が示すように、GUIから起動するのであればしかしちょうど偶然かもしれません:) –

+0

私はここに本当の区別があるとは思わない - "マクロ"は、 "オートメーション"タイプのものの束をカバーするために使用される一般的な用語の一種です。私には、メソッドにパラメータを追加しても基本的な変更はありません。 –

+0

私は根本的に同意します。 D –

関連する問題