書いたばかりのコードに問題があります。基本的に、このコードはメインフォームによって開かれるダイアログボックススタイルのフォーム内にあります。
このコードには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
よろしくお願いします。