| 
    
     |  | いつもとても勉強にさせて頂いてます。 今回初の投稿になりますが、何卒よろしくお願いいたします。
 
 ■状況
 (スペック)
 WinXP
 Access2003
 Excel2003
 
 (目的)
 複数のExcelファイル(任意指定、複数指定可)のシート(固有名指定)をアクセスにインポートする。
 
 (経過)
 1.[GetOpenFileName]を呼び出し、ダイアログからファイルパスを任意・複数取得
 2.Excel.Application.WorkBook.Openでエクセルファイルをオープン
 3.DAOでAccessTableへ保存
 *2.でエクセルの保護をしているため[TransferSpreadSheet]メソッドは使用不可
 
 (問題?困っていること)
 1.のダイアログから複数のファイルを選択した場合、なぜか『8188』Byte以上になるとそれ以降が削除されます。
 
 以下記述内容です。*エラー処理は省いてます。
 
 
 ■[GetOpenFileName]の標準モジュール
 
 Public Enum enmGetFileNameView
 gfnViewDetail
 gfnViewPreview
 gfnViewPropewty
 gfnViewList
 gfnViewLargeIcons
 gfnViewSmallIcons
 gfnViewTiles = 8
 End Enum
 
 Public Enum enmGetFileNameFlags
 gfnFlagsoverWritePrompt = &H1
 gfnFlagsSetCurDir = &H4
 gfnFlagsAllowMultiSelect = &H8
 gfnFlagsSelectFolder = &H20
 gfnFlagsEnableView = &H40
 End Enum
 
 Public Enum enmGetFileNameFOpen
 gfnFOpenOpen = -1
 gfnFOpenSaveAs = 0
 End Enum
 
 Function wh_GetFileName( _
 Optional hwndOner As Long, _
 Optional AppName As String, _
 Optional DlgTitle As String, _
 Optional OpenTitle As String, _
 Optional FILE As String, _
 Optional InitialDir As String, _
 Optional FILTER As String, _
 Optional FilterIndex As Long, _
 Optional View As enmGetFileNameView, _
 Optional flags As enmGetFileNameFlags, _
 Optional fOpen As enmGetFileNameFOpen _
 ) As String
 
 Const ENABLE_WIZHOOK = 51488399
 Const DISABLE_WIZHOOK = 0
 Dim strFILE As String
 Dim lngResult As Long
 
 If (hwndOwner = 0) Then hwndOwner = Application.hWndAccessApp
 If (AppName = "") Then AppName = Application.Name
 strFILE = FILE
 If (FILTER = "") Then FILTER = "すべてのファイル(*.*)|*.*"
 WizHook.Key = ENABLE_WIZHOOK
 
 lngResult = WizHook.GetFileName( _
 hwndOwner, _
 AppName, _
 DlgTitle, _
 OpenTitle, _
 strFILE, _
 InitialDir, _
 FILTER, _
 FilterIndex, _
 View, _
 flags, _
 fOpen)
 
 WizHook.Key = DISABLE_WIZHOOK
 
 wh_GetFileName = strFILE
 
 End Function
 
 
 ■実行プロシージャ
 Sub sample()
 
 '---ファイルの取得処理---
 Const DLG_TITLE = "データインポート"
 Const FILTER_ = "Excelファイル(*.xls)|*.xls"
 Dim INITIAL_DIR As String
 
 INITIAL_DIR = CurrentProject.Path
 
 Dim strFILE As String
 strFILE = wh_GetFileName(, , _
 DLG_TITLE, , , INITIAL_DIR, FILTER_, _
 , , gfnFlagsAllowMultiSelect, _
 gfnFOpenOpen)
 If strFILE = vbNullString Then
 Exit Sub
 End If
 
 MsgBox LenB(strFILE) '←ここで問題であろうByte数を調べました。
 Debug.Print strFILE '←一応表示もしてみました。
 
 DoCmd.Hourglass True
 
 '---データの保存処理---
 Dim dbs As DAO.Database
 Dim rst As DAO.Recordset
 Dim xls As Excel.Application
 Dim wkb As Excel.Workbook
 Dim vntList As Variant
 Dim CNT As Long
 Dim IDX As Long
 
 ''---保存先の設定---
 Set dbs = CurrentDb
 Set rst = dbs.OpenRecordset(Name:="T_Test", Type:=dbOpenTable)
 Set xls = CreateObject("Excel.Application")
 
 ''---ファイル取得情報を区切る---
 Dim ret, myFILE
 ret = Split(strFILE, vbTab)
 
 For Each myFILE In ret
 
 ''---エクセルファイルオープン---
 Set wkb = xls.Workbooks.Open(FileName:=myFILE, ReadOnly:=True _
 , Password:="pass", WriteResPassword:="pass")
 
 With wkb.Worksheets("Sheet1").Range("A1").CurrentRegion
 
 ''---データが1行でない場合---
 If Not (.Rows.Count = 1) Then
 
 Let vntList = .Resize(.Rows.Count - 1).offset(1, 0).Value
 
 '''---レコードの保存(選択範囲内ループ)---
 For CNT = LBound(vntList, 1) To UBound(vntList, 1)
 rst.AddNew
 
 For IDX = LBound(vntList, 2) To UBound(vntList, 2)
 Let rst.Fields(IDX - 1).Value = vntList(CNT, IDX)
 Next
 
 rst.Update
 Next
 End If
 
 End With
 
 Next myFILE
 
 ''---解放処理---
 wkb.Close SaveChanges:=False
 xls.Quit
 Set wkb = Nothing
 Set xls = Nothing
 
 rst.Close
 dbs.Close
 Set rst = Nothing
 Set dbs = Nothing
 
 DoCmd.Hourglass False
 
 MsgBox "正常にインポートされました。"
 
 End Sub
 
 以上です。
 
 ヘルプを見てみましたが、String型で2.0GB以上の格納が可能とあるので「?」です。
 恐れ入りますがよろしくお願いいたします。
 
 |  |