我刚刚写了一些代码有问题。基本上,此代码位于由主窗体打开的对话框样式窗体内。
此代码有两个子:
第一种是OnLoad
方法,它谨慎地打开Excel工作簿以构建其工作表列表。
第二个子是该对话框上按钮的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
非常感谢提前。
答案 0 :(得分:3)
我建议Worksheets
而不是Sheets
。
Worksheets
是一个存在于工作簿中的集合。使用对象变量(Worksheets
?)为工作簿限定xlWb
。
Forms("MenuGeneral")("nb_colonnes").Value = _
xlWb.Worksheets(lst_sheets.Value).UsedRange.Columns.Count