求助:关于GetInput返回值的问题
在明经通道 AutoCAD ActiveX和VBA参考中,关于GetInput的示例如下:Sub Example_GetInput()
' This example prompts for user input of a point. By using the
' InitializeUserInput method to define a keyword list, the example can also
' return keywords entered by the user.
On Error Resume Next
' Define the valid keywords
Dim keywordList As String
keywordList = "Keyword1 Keyword2"
' Call InitializeUserInput to set up the keywords
ThisDrawing.Utility.InitializeUserInput 128, keywordList
' Get the user input
Dim returnPnt As Variant
returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point(Keyword1, Keyword2): ")
If Err Then
If StrComp(Err.Description, "User input is a keyword", 1) = 0 Then
' One of the keywords was entered
Dim inputString As String
Err.Clear
inputString = ThisDrawing.Utility.GetInput
MsgBox "You entered the keyword: " & inputString
Else
MsgBox "Error selecting the point: " & Err.Description
Err.Clear
End If
Else
' Display point coordinates
MsgBox "The WCS of the point is: " & returnPnt(0) & ", " & returnPnt(1) & ", " & returnPnt(2), , "GetInput 示例"
End If
End Sub
这段程序的原意应该是当用户正确地输入了点坐标,将显示点坐标,若输入了非坐标数据但属于关键字的字符串则显示 "You entered the keyword:*"的消息(*代表用户输入的字符串,下同),若输入了非坐标的非关键字的字符串,则提示"Error selecting the point: " & Err.Description的消息。可是,程序实际运行时,若输入了非坐标的字符串时,无论是否为关键字,都将弹出: "You entered the keyword: *"的消息,与输入的内容是否为关键字无关。程序运行后若直接输入一个非关键字,Err.Description的返回值还是"用户输入的是关键字",GetInput的返回值是用户输入的非关键字,这和该方法的定义即:“将用户输入的字符串转换为关键词索引”不符。
曾经怀疑是否是因为软件中文化造成的问题,试安装的英文版,问题依旧。
注:当运行中本版时,上面的"User input is a keyword"应修改为"用户输入的是关键字"。
不知道是我理解错误还是软件或例程本身有错,求高手指点一下,多谢!
Err.Description是vba的返回的错误描述,这与autocad的定义的错误描述不是一回事儿
一般如果根据错误做一事情,最好用err.number,这样比较也快一点,而且不会因为语言不同而不同 多谢zzyong00的热情指导,但因我是初学AutoCAD VBA,看了您的解释还是无法解决上述问题。请求您手把手指导一下,最好能把程序源码改写一下,使其能够达到用户输入了关键字、非关键字时有相应的提示的目的。
我在If Err Then后面插入一句:MsgBox Err.Number,程序运行后输入关键字或非关键字,提示的错误代码都是-2145320928,可知其同样也不能区别关键字和非关键字,还是无法实现程序中If语句的预期功能,非常困惑。
Sub Example_GetInput()
' This example prompts for user input of a point. By using the
' InitializeUserInput method to define a keyword list, the example can also
' return keywords entered by the user.
On Error Resume Next
' Define the valid keywords
Dim keywordList As String, arrKL() As String, i As Long, flag As Boolean
keywordList = "Keyword1 Keyword2"
arrKL = Split(keywordList, " ")
' Call InitializeUserInput to set up the keywords
ThisDrawing.Utility.InitializeUserInput 128, keywordList
' Get the user input
Dim returnPnt As Variant
returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point(Keyword1, Keyword2): ")
If Err Then
Debug.Print Err.Number
If Err.Number = -2145320928 Then
' One of the keywords was entered
Dim inputString As String
Err.Clear
inputString = ThisDrawing.Utility.GetInput
For i = LBound(arrKL) To UBound(arrKL)
If InStr(arrKL(i), inputString) > 0 Then
flag = True
Exit For
End If
Next i
If flag Then
MsgBox "You entered the keyword: " & inputString
Else
MsgBox "Error selecting the point: " & Err.Description
Err.Clear
End If
End If
Else
' Display point coordinates
MsgBox "The WCS of the point is: " & returnPnt(0) & ", " & returnPnt(1) & ", " & returnPnt(2), , "GetInput 示例"
End If
End Sub 能得到这样高水平的指导,我非常感动,多谢! 认真学习了zzyong00给出的程序,获益匪浅,这段程序可以有效地区分关键字和非关键字,达到了预期的效果。有几个问题想讨论一下:
对于关键字和非关键字判别的操作,在条件语句:
If Err.Number = -2145320928 Then之内,但该语句没有相应的else,没有起到分支的作用,如果把这句和相应的End If删除,经试运行说明程序的功能没有变化,该语句在本程序中似乎未起到作用。
我猜想,官方的示例程序之所以不能够正确运行,原因可能是编程员认为Err.Description可以分辨错误是否为关键字,因为返回的内容"User input is a keyword"的字面含义就是:“用户输入的是关键字”,在上面给出的程序中,对If Err.Number = -2145320928 Then的解释是:' One of the keywords was entered,也是同样的意思。但是这个解释明显是不符合实际的,因为无论输入的是否为关键字,只要输入的不是坐标值,结果都是Err.Number = -2145320928,即Err.Description的值为"User input is a keyword"。示例程序的编程员被字面含义误导了,所以采用了If StrComp(Err.Description, "User input is a keyword", 1)来区分是否为关键字。不知道zzyong00老师是否也是这样认为的?
还有,GetInput的定义:将用户输入的字符串转换为关键词索引,根据运行的结果,显然也是错误的,因为执行该语句时,无论是否为关键字都同样会返回。如果将:
MsgBox "Error selecting the point: " & Err.Description
改为:
MsgBox "You entered the non-keyword: " & inputString
程序运行时输入一个非关键词就可以验证。
想请教一下:错误代码及其含义从什么文档中可以查到?多谢!
能在明经通道遇到这么好的指导老师zzyong00,感到太幸运了!
想请教一下:错误代码及其含义从什么文档中可以查到?
从微软的MSDN帮助文档能看到,网上也能查到,还有一个微软的小软件叫lookup也能查到!
If Err.Number = -2145320928 Then 是保证出错的就是“用户输入的是关键字”
而不是其它错误,程序代码各种错误,很难完全预料 多谢老师zzyong00的指导,对于“If Err.Number = -2145320928 Then 是保证出错的就是“用户输入的是关键字”而不是其它错误",我无法理解,因为当出错的不是“用户输入的是关键字”,而是相反:“用户输入的是非关键字”时,该条件语句包含的内容仍会被执行,可能我现在是走进了牛角尖,希望老师能把我带出来。 错误处理,就是出现相应错误号的错误,对应去处理,而对于未知错误,可以给出提示,不做任何处理退出,或继续执行下面代码(resume next)
作为初学者,我现在还没有能力准确理解,等学多了再慢慢领会吧,谢谢!
页:
[1]