2017-04-08 7 views
0

次のコードを使用して、excelシートの表データからuserformを入力し、次のおよび前のボタンを使用してテーブルの前のエントリを繰り返して正常に実行しようとしています。このコードでは、前のボタンが前の行を選択し、ユーザーフォームにロードします。次のボタンは次の行を選択し、それをuserformにもロードします。excel userformでナビゲーション中に制限に達するための警告メッセージ

質問:サイクリングをテーブルのみに制限したい(ワークシートの339行から390行まで)。このコードを修正して、テーブルへの移動を制限し、最初のレコードと最後のレコードが到達したという警告メッセージを表示します。私は「次へ」ボタンのコードを修正してテストしましたが、前のボタンのコードは機能しません。

あなたのレビューと提案をいただければ大変ありがとうございます。 Const TblFirstRow

Private Sub cmdGetNext_Click() 

Range("B339").Select 
ActiveCell.End(xlDown).Select 
lastRow = ActiveCell.Row 
currentrow = currentrow + 1 
If currentrow = lastRow + 1 Then 
    currentrow = lastRow 
    MsgBox "You have reached the last entered data!" 
End If 

txtmeas.Text = Cells(currentrow, 2).Value 
txtsource.Text = Cells(currentrow, 4).Value 
cmbmatric.Text = Cells(currentrow, 6).Value 

End Sub 

Private Sub cmdPreviousData_Click() 

currentrow = currentrow - 1 
If currentrow > 1 Then 
    txtmeas.Text = Cells(currentrow, 2).Value 
    txtsource.Text = Cells(currentrow, 4).Value 
    cmbmatric.Text = Cells(currentrow, 6).Value 
ElseIf currentrow = 1 Then 
    MsgBox "This is your first record!" 
    currentrow = currentrow + 1 
End If 

End Sub 
+0

私の答えでコードをテストしましたか?どんなフィードバック? –

+0

こんにちはシャイ、はい私は試みたが、それは問題を解決しませんでした。私がここで共有したコードは完全に機能していて動作していますが、唯一の問題はテーブルのROM番号で停止するのではなく、前の行に移動し続けることです。しかし、次のデータボタンのために、それは完全に正常に動作し、メッセージを表示しています。したがって、唯一のことは最初の行に制限することです。より明確にするために、私は異なる行に複数のテーブルを持ち、各テーブルに同じコードを適用します。行1(A1)から始まる表でこのコードを試してみると、これは両方向(前後)には適していますが、残りの表では不可能です。 – user7828601

+0

私はあなたの時間と支援Shai Radoを感謝します! – user7828601

答えて

0

私はあなたが設定したい表の最初の行を表す、モジュールレベルで定数を定義します。

次に、Range("B339")の代わりに、Range("B" & TblFirstRow)を使用して、今後変更することがより動的になります。

コード

Option Explicit 

' define a variable at the module level, for first row of the table 
Const TblFirstRow As Long = 339 

Private Sub cmdGetNext_Click() 

Dim LastRow As Long, CurrentRow As Long 

' get last row (not skipping blank cells) 
LastRow = Range("B" & TblFirstRow).End(xlDown).Row 

If CurrentRow + 1 > LastRow Then 
    CurrentRow = LastRow 
    MsgBox "You have reached the last entered data!" 
Else 
    CurrentRow = CurrentRow + 1 
End If 

txtmeas.Text = Cells(CurrentRow, 2).Value 
txtsource.Text = Cells(CurrentRow, 4).Value 
cmbmatric.Text = Cells(CurrentRow, 6).Value 

End Sub 

'================================================================ 

Private Sub cmdPreviousData_Click() 

If CurrentRow - 1 < TblFirstRow Then 
    CurrentRow = TblFirstRow 
    MsgBox "This is your first record!" 
Else 
    CurrentRow = CurrentRow - 1 
End If 

txtmeas.Text = Cells(CurrentRow, 2).Value 
txtsource.Text = Cells(CurrentRow, 4).Value 
cmbmatric.Text = Cells(CurrentRow, 6).Value 

End Sub 
0

私は "他" に "のelseif currentRowの= 1し、" 変化するであろう。

currentrow = 1の場所でcmdPreviousData_Click()を実行すると、最初の行(currentrow = currentrow - 1)でcurrentrowの値が1から0に減少します。その後、0文が1より大きくないため、0文が実行されません.<> 1なので、elseifは実行されません。

+0

こんにちはチャールズ、私は試みたが、それは動作しませんでした。私の質問をより詳細に説明したShai Radoソリューションのコメントをご覧ください。助けてくれてありがとう! – user7828601

関連する問題