What are the benefits and risks of using the StrPtr function in VBA?

前端 未结 5 524
陌清茗
陌清茗 2020-11-30 09:16

While looking for a way to test when a user cancels an InputBox, I stumbled across the StrPtr function. I believe it checks if a variable was ever

5条回答
  •  甜味超标
    2020-11-30 09:57

    I tired both using StrPtr and without using StrPtr. I tested my Sub with several examples. I got same results except in one occasion - When User inputs null value (nothing) and presses OK. Precisely I tried these two:

    Using StrPtr. "Invalid Number" was the result here

        ElseIf StrPtr(Max_hours_string) = 0 
                MsgBox "Cancelled"
        Else
                MsgBox "Invalid Number"
    

    Without Using StrPtr. "Cancelled" was the result here

     ElseIf Max_hours_string = "" Then
            MsgBox "Cancelled"
     Else
            MsgBox "Invalid Number"
    

    This is my code.

    Sub Input_Max_Hours_From_The_User()
            'Two Common Error Cases are Covered:
            '1. When using InputBox, you of course have no control over whether the user enters valid input.
            '        You should store user input into a string, and then make sure you have the right value.
            '2. If the user clicks Cancel in the inputbox, the empty string is returned.
                     'Since the empty string can't be implicitly coerced to a double, an error is generated.
                     'It is the same thing that would happen if the user entered "Haughey" in the InputBox.
    
         Dim Max_hours_string As String, Max_hours_double As Double
            Max_hours_string = InputBox("Enter Maximum hours of any Shift")
            If IsNumeric(Max_hours_string) Then
                Max_hours_double = CDbl(Max_hours_string) 'CDbl converts an expression to double
                Range("L6").Value = Max_hours_double
                Range("L6").Interior.ColorIndex = 37
            ElseIf StrPtr(Max_hours_string) = 0 Then 'ElseIf Max_hours_string = "" Then MsgBox "Cancelled"  also works !
                MsgBox "Cancelled"
            Else
                MsgBox "Invalid Number"
            End If
    
        End Sub
    

    So I think it depends how important it is to handle the null value for you. All other test cases, including pressing Cancel, non-numerical inputs etc. give the same results. Hope this helps.

提交回复
热议问题