程式中点击按钮打开导入Excel文件的窗口,用的是CommonDialog控件。相关代码如下: CommonDialog1.DialogTitle = "选取要汇入之 Excel 档案"
CommonDialog1.DefaultExt = "xls"
CommonDialog1.Filter = "Excel档案 (*.xls)|*.xls"
On Error GoTo subImport_Cancel
CommonDialog1.ShowOpen '打开Excel选取窗口
'On Error GoTo subImport_Err
现在问题是,如果我打开了该CommonDialog窗口后,再单击任务栏其他程式,会导致该CommonDialog窗口消失。也就是失去焦点后它会消失,造成之前开的其他窗口也被锁定。程式无响应。
CommonDialog1.DefaultExt = "xls"
CommonDialog1.Filter = "Excel档案 (*.xls)|*.xls"
On Error GoTo subImport_Cancel
CommonDialog1.ShowOpen '打开Excel选取窗口
'On Error GoTo subImport_Err
现在问题是,如果我打开了该CommonDialog窗口后,再单击任务栏其他程式,会导致该CommonDialog窗口消失。也就是失去焦点后它会消失,造成之前开的其他窗口也被锁定。程式无响应。
害的
程序没编完就别处理错误
否则你永远不知道错误在哪里
那还编啥编?
Dim sTableName As String
Dim dbDataBase As Database
Dim rsRecordset As Recordset
Dim rsRecordset1 As Recordset
Dim lngRow As Long
Dim lngCol As Long
Dim sql As String
Dim lngCodeNotFind As Long
Dim lngVendorNotFind As Long
Dim strMsg As String
Dim intMemoNum As Integer
Dim SalChkDep As String
Dim chkField As String
chkField = ""
chkPer = True cmdImport.Enabled = False
Command1.Enabled = False
Command2.Enabled = False
cmdclean.Enabled = False
Conn.Enabled = False
' 汇入档案
CommonDialog1.DialogTitle = "选取要汇入之 Excel 档案"
CommonDialog1.DefaultExt = "xls"
CommonDialog1.Filter = "Excel档案 (*.xls)|*.xls"
On Error GoTo subImport_Cancel
CommonDialog1.ShowOpen '打开Excel选取窗口
'On Error GoTo subImport_Err strImportFileName = CommonDialog1.FileName
txtFilePathName.Text = CommonDialog1.FileTitle
FileName = CommonDialog1.FileName
'检查是有传回汇入之档案名称
If strImportFileName = "" Then '检查该文档是否存在
MsgBox "请选择Excel汇入资料.."
Exit Sub
End If
intStrNum = InStr(txtFilePathName.Text, ".") '第一次出现点的位置
TableName = Mid(txtFilePathName.Text, 1, intStrNum - 1) '截取点之前字符串
txtFilePathName.Text = FileName
DoEvents
' 汇入档案至ACCESS档案
Screen.MousePointer = vbHourglass
If Not funXls2Mdb(strImportFileName, intOpt) Then
MsgBox "汇入档案不成功!", vbCritical, "汇入档案"
Exit Sub
End If
' 将ACCESS资料汇入至Spread
'1.决定Spread的header
SpreadHeaderShow intOpt
'2.将资料show再Spread
Set dbDataBase = OpenDatabase(sAccessFile)
sTableName = "select * from MgtLSalMidTb" + CStr(intOpt)
Set rsRecordset = dbDataBase.OpenRecordset(sTableName)
'此处省略一段验证资料正确性代码
'除了说明其他不可edit
For I = 1 To spdView.MaxCols
spdView.Row = -1
spdView.Col = I If (intOpt <> 2 And intOpt <> 3) And I = spdView.MaxCols Then
spdView.Lock = False
Else
spdView.Lock = True
End If
Next I
'******汇入资料数目的统计 Modified by Len 2010/11/01
' Dim TotInt As Long
Dim TotInt As Double '2010/10/10
If intOpt = 1 Then
Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!"
ElseIf intOpt = 2 Then
Set dbDataBase = OpenDatabase(sAccessFile)
sTableName = "select * from MgtLSalMidTb" + CStr(intOpt)
Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
If Not rsRecordset1.EOF Then
Do While Not rsRecordset1.EOF
TotInt = TotInt + rsRecordset1(2)
rsRecordset1.MoveNext
Loop
End If
Screen.MousePointer = vbDefault
'Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!合计为" & TotInt & "元"
Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!"
'********下面的3、5、6暂时未用到
' ElseIf intOpt = 3 Then
' Set dbDataBase = OpenDatabase(sAccessFile)
' sTableName = "select * from MgtLSalMidTb" + CStr(intOpt)
' Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
' If Not rsRecordset1.EOF Then
' Do While Not rsRecordset1.EOF
' TotInt = TotInt + rsRecordset1(2)
' rsRecordset1.MoveNext
' Loop
' End If
' Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
' Screen.MousePointer = vbDefault
' Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!合计为" & TotInt & "元"
ElseIf intOpt = 4 Then '成本中心资料数目统计
Set dbDataBase = OpenDatabase(sAccessFile)
sTableName = "select * from MgtLSalMidTb" + CStr(intOpt)
Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
If Not rsRecordset1.EOF Then
Do While Not rsRecordset1.EOF
TotInt = TotInt + rsRecordset1(2)
rsRecordset1.MoveNext
Loop
End If
Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
Screen.MousePointer = vbDefault
Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!"
' ElseIf intOpt = 5 Then
' Set dbDataBase = OpenDatabase(sAccessFile)
' sTableName = "select * from MgtLSalMidTb" + CStr(intOpt)
' Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
' If Not rsRecordset1.EOF Then
' Do While Not rsRecordset1.EOF
' TotInt = TotInt + rsRecordset1(1)
' rsRecordset1.MoveNext
' Loop
' End If
' Set rsRecordset1 = dbDataBase.OpenRecordset(sTableName)
' Screen.MousePointer = vbDefault
' Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!合计为" & TotInt & "天"
' ElseIf intOpt = 6 Then
' Label5.Caption = "此次共汇入 " & rsRecordset.RecordCount & " 笔有效资料!"
End If
'**************************************************************************** Set rsRecordset1 = Nothing
Set rsRecordset = Nothing
Set dbDataBase = Nothing
Command2.Enabled = True
cmdclean.Enabled = True
Conn.Enabled = True Command1.Enabled = True
cmdImport.Enabled = True
SSFrame3.Visible = TruesubImport_Cancel: Command2.Enabled = True
cmdclean.Enabled = True
Conn.Enabled = True Command1.Enabled = True
cmdImport.Enabled = True
' SSFrame3.Visible = True Screen.MousePointer = vbDefault
Set rsRecordset = Nothing
Set dbDataBase = Nothing
Set rstINVBASIC = Nothing
Set SnpItem = Nothing
Exit Sub
subImport_Err:
Set rsRecordset = Nothing
Set dbDataBase = Nothing
Set rstINVBASIC = Nothing
Screen.MousePointer = vbDefault
MsgBox "错误代码:" & Err.Number & vbCrLf & "错误说明:" & Err.Description, 16, "执行中断"
Command2.Enabled = True
cmdclean.Enabled = True
Conn.Enabled = True Command1.Enabled = True
cmdImport.Enabled = True
End Sub
解决的办法是:将对话框控件所在的父窗口用setwindowspos置为顶级窗口,这样弹出的对话框在父窗口前面,当然就在所有窗口前面。
此时按住键盘上的Alt+Tab键即可调出来。
不调出来,会误以为程式死掉了,点其他窗口没反应。