访问VBA:Sheet方法不规则地失败

时间:2012-08-06 15:49:58

标签: vba ms-access ms-access-2007 access-vba

我刚刚写了一些代码有问题。基本上,此代码位于由主窗体打开的对话框样式窗体内。

此代码有两个子:
第一种是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

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

我建议Worksheets而不是Sheets

Worksheets是一个存在于工作簿中的集合。使用对象变量(Worksheets?)为工作簿限定xlWb

Forms("MenuGeneral")("nb_colonnes").Value = _
    xlWb.Worksheets(lst_sheets.Value).UsedRange.Columns.Count