0

InputBox を使用するのはこれが初めてです。データベースにインポートされるスプレッドシートに入力するイニシャルをユーザーに挿入してもらいたいと考えています。一貫性を促進し、必要なセルをオートフィルするために InputBox を使用しています。

ユーザーが情報を入力するプロセスを理解するのに問題があります。エントリが 2 文字である場合は受け入れられ、セルに入力されます。それ以外の場合は、2 文字が必要であることを示すメッセージが表示され、InputBox が再び表示されます。テストを通じて、ループが期待どおりに機能していないと思います。最初のエントリが 2 文字の場合、期待どおりに情報が Excel に入力されます。ただし、最初のエントリが正しくなく、後続のエントリが正しい場合は、ループを終了していないように見えます。なぜこれになるのかわかりませんか?どんな助けでも大歓迎です。

Dim c As Range

Set c = Sheets("CompilePriceAdjustments").Range("E2")

    c = InputBox("Please Enter Initials", "PRICE INCREASE APPROVER")
Do Until c = vbString And Len(c) = 2
    MsgBox ("You must enter two letters")
    c = InputBox("Please Enter Initials", "PRICE INCREASE APPROVER")
Loop

Sheets("CompilePriceAdjustments").Range("E2").Value = UCase(c)
c.AutoFill Destination:=Sheets("CompilePriceAdjustments").Range("E2:E" & Cells    (Rows.Count, "D").End(xlUp).Row)
4

2 に答える 2

2

これがあなたがしようとしていることだと思いますか?

Sub Sample()
    Dim c As Range
    Dim Ret

    Set c = Sheets("CompilePriceAdjustments").Range("E2")

    Ret = InputBox("Please Enter Initials - (Only alphabets allowed of 2 Length)", "PRICE INCREASE APPROVER")

    Do Until (isString(Ret) And Len(Ret) = 2)
        Ret = InputBox("Please Enter Initials - (Only alphabets allowed of 2 Length)", "PRICE INCREASE APPROVER")
    Loop

    c.Value = UCase(Ret)
    '
    '~~> Rest of the code
    '
End Sub

Function isString(s As Variant) As Boolean
    Dim i As Long

    isString = True

    For i = 1 To Len(s)
        Select Case Asc(Mid(s, i, 1))
        Case 65 To 90, 97 To 122
        Case Else
            isString = False
            Exit Function
        End Select
    Next i
End Function

編集

あなたのアプローチには1つの欠陥があります。ユーザーがキャンセルして終了したい場合はどうなりますか? このコードを検討してみてはいかがでしょうか?

Sub Sample()
    Dim c As Range
    Dim Ret

    Set c = Sheets("CompilePriceAdjustments").Range("E2")

    Ret = InputBox("Please Enter Initials-(Only alphabets allowed of 2 Length)", _
          "PRICE INCREASE APPROVER")

    '~~> Added  Or Ret = "" so that user can cancel the inputbox if required
    Do Until (isString(Ret) And Len(Ret) = 2) Or Ret = ""
        Ret = InputBox("Please Enter Initials-(Only alphabets allowed of 2 Length)", _
        "PRICE INCREASE APPROVER")
    Loop

    '~~> This is required so that user can press cancel and exit
    If Ret = "" Then Exit Sub

    c.Value = UCase(Ret)
    '
    '~~> Rest of the code
    '
End Sub

Function isString(s As Variant) As Boolean
    Dim i As Long

    isString = True

    For i = 1 To Len(s)
        Select Case Asc(Mid(s, i, 1))
        Case 65 To 90, 97 To 122
        Case Else
            isString = False
            Exit Function
        End Select
    Next i
End Function
于 2013-08-09T15:02:15.933 に答える
0

検討:

Sub dural()
    Dim c As Range, init As String
    Set c = Sheets("CompilePriceAdjustments").Range("E2")
    init = ""
    While Len(init) <> 2
        init = Application.InputBox(Prompt:="Enter two initials", Type:=2)
    Wend
    MsgBox "Thanks"
    c.Value = init
End Sub
于 2013-08-09T14:50:01.457 に答える