菜鸟捉虫(17) 2001年 17期 #1上期正确答案   分析:该程序要求能打开所有已被关联的文件,因此不能用Shell函数,所以只能调用API函数---ShellExecute。要使用这个函数,先在程序的“通用”中进行声明:Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long,ByVal lpOperation As String,ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long   将Shell File1.Path + File1.FileName, vbNormalFocus改成 ShellExecute Me.hwnd, "open", File1.Path + File1.FileName, vbNullString, vbNullString, vbNormalFocus   这个错误改正后,仍然不能正常打开文件(发现只能打开根目录中文件),原因是路径处理上有误,正确的代码为:   If Right$(Right$(Dir1.Path, 3), 1) = "\" Then '这一句就是用于判断是否为根目录   ShellExecute Me.hwnd, "open",File1.Path + File1.FileName, vbNullString,vbNullString, vbNormalFocus   Else '不在根目录中则加一个路径分割符   ShellExecute Me.hwnd, "open",File1.Path + File1.FileName,vbNullString, vbNullString, vbNormalFocus   End If   好了,将上面的两大错误修正后就能正常的打开文件了,但是,该程序中还存在一个比较隐蔽的BUG,那就是当程序一运行后,不做任何选择,点击“打开”,就会出现“请选择一个要打开的文件”的对话框,按理说应当退出这个过程,但却会弹出找不到该文件的错误信息。原因就是未加入这一句“Exit Sub”。   以下是第15期“菜鸟捉虫”幸运读者名单,奖品为《电脑报配套光盘》2001年第5期。   邓世学 四川 姜卫东 黑龙江   胡立俊 江苏 魏红军 北 京   #1本期题目:   现有一个程序,要求在文本框中输入行数后,在屏幕上逐行打印数字,并且下一行比前一行多一个字符,在屏幕上形成一个等腰三角形(如:第一行为1个字符“1”...第n行为n个字符“n”),但在编译前后都不能达到预期的目的,请找出其中的错误。   该程序中含有一个TextBox及一个CommandButton控件。   Dim a() As String   Private Sub Command1_Click()   Dim b,K,i,j As Integer'工作变量   Dim Value As Integer '数组长度   Dim L As Integer '字符间距   Dim PY As Double   Value = Val(Text1.Text) - 1   If Val(Text1.Text) < 2 Or Val(Text1.Text) < 0 Then   MsgBox "请输入2以上的正整数"   Exit Sub   End If   For i = 0 To Value   a(i) = Str(i + 1)   Next i   b = Value   PY = 100 + 245 * Value'//初始化Y座标   K = 10   For j = 1 To Value + 1   PY = PY - 200   L = L + 150   Form1.CurrentY = PY   K = K + 100   For i = 0 To b* 300 Step 300   Form1.CurrentX = K + L + i   Form1.Print a(b)   Next i   K = 10   b = b - 1   Next j   End Sub