0

私は VBA で小さなスコア ルックアップ プログラムを書いています。次のコードはタイトルにエラーを表示します。私は VBA が初めてで、エラーは Excel 自体によって生成された最初の行を指しています。

Private Sub btnSearch_Click()
    Name = txtSearch.Text
    AmountOfEntries = Range("i10")
    For i = 1 To AmountOfEntries
        If Range("a" + i) = Name Then
            cell = i
        Else
            cell = "Error"
        End If
    Next i

    If cell = "Error" Then
        lblScore.Caption = "Your Username is Incorrect. Please Try Again"
    Else
        lblScore.Caption = "Your Score Is : " + Range("b" + cell)
    End If
End Sub

私のスプレッドシートには、「A」列に名前のリストが含まれ、「B」列にスコアのリストが含まれています。「I10」には、リスト内のエントリ数を含むフィールドがあります。

4

1 に答える 1

0

変数名として「名前」、「セル」など (VBA の総称) を使用しないようにしてください。変数を定義してみてくださいDim strName as String, i as Integer, intCell as Integer, intAmountOfEntries as Integer

また、範囲ステートメントを変更して&、オブジェクトの RANGE アスペクトではなく VALUE を使用するように指定する必要があります。

Range("a" & i).ValueRange("b" & intCell).Value

編集 =============

以下のコメントを再確認してください。

問題は、セルを整数(行番号)と文字列(「エラー」)として使用しているためだと思います。エラーがあるかどうかを検出する新しい変数を作成します。

Dim blnError as Boolean

次に、これを置き換えます。

cell = "Error"blnError = True

以下のIfステートメントを修正する必要がありますIf blnError = True Then

「Sheet1」というシートがあることを確認できますか?そうでない場合、それがSheets("Sheet1")コードが機能しない理由です。私は通常、代わりにシートに VBA 名を使用します。VBE では、プロジェクト エクスプローラー (括弧の前の名前) でそれらが何であるかを確認でき、プロパティ ウィンドウを使用して変更できます。次に、使用するだけsheetname.Range("A1")です。

于 2013-03-18T09:28:53.973 に答える