我刚写的一些代码有问题。基本上,此代码位于由主窗体打开的对话框样式窗体内。
此代码有两个子项:
第一个是OnLoad
谨慎打开 Excel 工作簿以构建其工作表列表的方法。
第二个 sub 是该OnClick()
对话框上一个按钮的方法,它返回两个值并进行一些错误检查。
由于某种原因,该Sheets()
方法有时会失败,并且在失败后立即执行完全相同的步骤实际上可能有效。我已经使用“局部变量”窗口以及间谍工具来观察这些值是否真的有意义并且它们确实有意义。
关于为什么会发生这种情况的任何提示?
此外,如果该数据库掌握在有经验的用户手中,这也没什么大不了的,但在这种情况下,我们不能假设用户完全了解 Access(甚至不关闭和重新打开表单)。
Option Compare Database
Option Explicit
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Private Sub Form_Open(Cancel As Integer)
Dim xl_sub_ws As Excel.Worksheet
Set xlApp = New Excel.Application
With xlApp
.Visible = False
Set xlWb = .Workbooks.Open(Forms("MenuGeneral")("CheminFichierImport").Value)
End With
For Each xl_sub_ws In xlWb.Worksheets
lst_sheets.AddItem (xl_sub_ws.Name)
Next xl_sub_ws
End Sub
Private Sub renvoyer_valeur_Click()
Dim ret As VbMsgBoxResult
If lst_sheets.Value <> "" Then
Forms("MenuGeneral")("worksheet_name").Value = lst_sheets.Value
Forms("MenuGeneral")("nb_colonnes").Value = Sheets(lst_sheets.Value).UsedRange.Columns.Count
If Forms("MenuGeneral")("nb_colonnes") < 4 Then
ret = MsgBox("La feuille à importer contient moins de 4 champs de la clé comptable." & _
"Souhaitez-vous procéder ainsi (oui) ou choisir une autre feuille (non) ?", vbYesNo)
If ret = vbNo Then
Forms("MenuGeneral")("nb_colonnes").Value = ""
Exit Sub
End If
End If
xlWb.Close
xlApp.Quit
DoCmd.Close acForm, "dlg_modal_feuille", acSaveNo
Else
MsgBox "S'il-vous-plaît choisir la feuille source"
End If
End Sub
提前谢谢了。