1

書いたばかりのコードに問題があります。基本的に、このコードはメインフォームによって開かれるダイアログボックススタイルのフォーム内にあります。

このコードには2つのサブがあります。1つ
OnLoad、Excelワークブックを慎重に開いて、ワークシートのリストを作成するメソッドです。
2番目のサブは、OnClick()2つの値を返し、少しのエラーチェックを行うダイアログボックスのボタンのメソッドです。

何らかの理由でSheets()メソッドが失敗することがあり、失敗した直後にまったく同じ手順を実行すると、実際に機能する場合があります。「ローカル変数」ウィンドウとスパイ機能を使用して、値が実際に意味をなし、実際に意味があることを確認しました。
なぜこれが起こるのかについてのヒントはありますか?

また、このデータベースが経験豊富なユーザーの手に渡っていれば、これは大したことではありませんが、この場合、ユーザーによるアクセスについての知識をまったく想定できません(フォームを閉じて再度開くことさえできません)。

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

よろしくお願いします。

4

1 に答える 1

3

Worksheetsの代わりに提案しますSheets

Worksheetsブックに存在するコレクションです。ブックWorksheetsのオブジェクト変数( ?)で修飾します。xlWb

Forms("MenuGeneral")("nb_colonnes").Value = _
    xlWb.Worksheets(lst_sheets.Value).UsedRange.Columns.Count
于 2012-08-06T16:11:42.807 に答える