2013-11-13 4 views
0

Я работаю над задачей, когда пользователи вводят сначала столбец от «А» до «Z», а затем номер строки от 1 до 20. Мне нужно написать function getIntData (col as String, row as Integer) как Integer, который возвращает содержимое этой ячейки на активном листе и показывает его в окне сообщения. Если число - это максимальное отрицательное целое число, то вместо него появляется окно с восклицательным знаком. Функция getIntData возвращает значение Integer. Если содержимое ячейки не является числовым, верните максимально возможное отрицательное значение (-2^15), то есть -32768.Как получить значение ячеек через функцию в VBA Excel

Я написал код для функции getIntdata(), но не может производить целочисленное значение. Может кто-нибудь, пожалуйста, посмотреть, что мне не хватает. Кроме того, пожалуйста, расскажите мне, как запустить функцию через процедуру Sub.

Sub getIn() 

    Dim Row As Integer 
    Dim Column As String 
      Column = InputBox("Please enter the column letter from A-Z", "Column Letter") 
      Row = InputBox("Please enter the row number from 1-20", "Row Number") 
      Debug.Print getIntData(Column, Row) 
End Sub 


Function getIntData(Col As String, Rw As Integer) As Integer 
    Dim Result As Variant 
     If Col = "" Or Rw < 1 Then 
     Result = "Invalid inputs" 
     ElseIf Not IsNumeric(Range(Col & Rw).Value) Then 
     Result = -32768 
     ElseIf Range(Col & Rw).Value <= -32768 Then 
     Result = "!" 
     ElseIf Range(Col & Rw).Value >= 32767 Then 
     Result = "Now what?" 
     Else 
     Result = Range(Col & Rw).Value 
     End If 
     MsgBox Result 
    ' return value to caller 
     getIntData = Result 
End Function 

ответ

0

Вам нужно getIntData = ... вернуть значение из функции

Вы должны также иметь дело с несколькими других случаях ошибки

Попробуйте это как статера

Function getIntData(Col As String, Rw As Integer) As Integer 
    Dim Result As Variant 
    If Col = "" Or Rw < 1 Then 
     Result = "Invalid inputs" 
    ElseIf Not IsNumeric(Range(Col & Rw).Value) Then 
     Result = -32768 
    ElseIf Range(Col & Rw).Value <= -32768 Then 
     Result = "!" 
    ElseIf Range(Col & Rw).Value >= 32767 Then 
     Result = "Now what?" 
    Else 
     Result = Range(Col & Rw).Value 
    End If 
    MsgBox Result 
    ' return value to caller 
    getIntData = CInt(Result) 
End Function 

называть его from a Sub try

Sub Demo() 
    Debug.Print getIntData("A", 1) 
End Sub 
+0

Bcz задачи требуют, чтобы я изменил вашу подфункцию, пожалуйста, снова просмотрите мой вопрос; Но после ссылки на эту подпрограмму с функцией, я получаю ошибку «ошибка несоответствия типа» в переменной «Результат», «getIntData = Result», макрос создает результат, затем возникает ошибка –

+0

Добавлен тип cast для исправления ошибки –

Смежные вопросы