MS Access

Accessでファイル選択ダイアログを開いて選択したExcelファイルの先頭シートを読み込み番号が一致するデータの配送日を本日日付で消し込む処理

投稿日:2018年8月13日 更新日:

ファイル選択ダイアログを開いて、選択したExcelファイルの先頭シートを読み込み、番号が一致するデータの配送日を本日日付で消し込む処理(楽天販売DB.mdb)

ダイアログを表示する際には、事前にMicrosoft Office x.x bject Libraryに参照設定しておく。
ダイアログ表示と、Excelの先頭シート名を取得するときに、苦労。

参考リンク:
必要な列と行だけEXCELからインポートしたい –Access Club 超初心者 FORUM–

Private Sub cmd楽天伝票消込_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim fi As Long, foi As Long, fno As String
    Dim wsName As String
    Dim intRet As Integer         'ダイアログ用変数
    Dim ImPass As String     'フルパスの値
 
    With Application.FileDialog(msoFileDialogOpen)
        'ダイアログのタイトルを設定
        .Title = "ファイルを開くダイアログ"
        .Filters.Clear
        .Filters.Add "Microsoft Office Excelファイル", "*.xls,*.csv"
        .FilterIndex = 1
        .AllowMultiSelect = False '複数ファイル選択を許可しない
        .InitialFileName = "\\FileServer\share\ '初期パスを設定
        intRet = .Show 'ダイアログを表示
        If intRet <> 0 Then
          ImPass = Trim(.SelectedItems.Item(1))
        Else
          ImPass = ""
          MsgBox "ファイルが選択されませんでした"
          Exit Sub
        End If
    End With
    
' *** Excelのシート名を取得する処理
' ms access - Read Excel file sheet names - Stack Overflow
' https://stackoverflow.com/questions/18412697/read-excel-file-sheet-names
    Dim objExc As Object ' late
    Dim objWbk As Object ' late
    Dim objWsh As Object ' late

    'Set objExc = New Excel.Application ' early
    Set objExc = CreateObject("Excel.Application") ' late
    Set objWbk = objExc.Workbooks.Open(ImPass)
    For Each objWsh In objWbk.Worksheets
        wsName = objWsh.Name
    Next
    Set objWsh = Nothing
    objWbk.Close
    Set objWbk = Nothing
    objExc.Quit
    Set objExc = Nothing
'***

Set dbs = Application.CurrentData
Set db = CurrentDb()
mySQL = "SELECT お客様管理番号 FROM [" & wsName & "$] IN '" & ImPass & "' 'Excel 8.0;';"
    Set rs = db.OpenRecordset(mySQL, dbOpenDynaset, dbSeeChanges)
    If rs.EOF = False Then rs.MoveLast
    ProgBarCnt = rs.RecordCount
    If rs.EOF = True Then
        MsgBox "楽天テーブルにデータはありませんでした"
        Exit Sub
    Else
        rs.MoveFirst
        Do Until rs.EOF
            strSQL = "SELECT ID FROM Zaiko楽天販売TBL WHERE 受注番号 = '" & rs!お客様管理番号 & "';"
            Set rst = db.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
            If rst.EOF Then
            Else
                CurrentDb.Execute "UPDATE zaiko楽天販売TBL SET 配送日 = #" & Date & "# WHERE [受注番号] = '" & rs!お客様管理番号 & "';"
                fi = fi + 1
            End If
            rst.Close
            rs.MoveNext
        Loop
    End If
    
    MsgBox "楽天" & fi & "件のレコードを更新しました。"

    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
    
Exit_cmd楽天伝票消込_Click:
    Exit Sub

Err_cmd楽天伝票消込_Click:
    MsgBox Err.Description
End Sub

-MS Access

執筆者:

関連記事

no image

Accessで指定テーブル内を全文検索

今まで、特定のフィールド内でしか検索できないものだと思っていた・・・。 Accessのリボンの検索ボタンをクリックして表示されるダイアログボックス内の「探す場所」で特定のテーブル/クエリ/フォーム名か …

no image

Accessでフォームフィルタの結果をExcelにエクスポートする

ちょっと、苦労した。 Private Sub cmdDMデータ作成_Click() On Error GoTo Err_cmdDMデータ作成_Click Dim rstf As String Dim …

no image

Accessの複雑な処理のレポート帳票で1ページのみ出力されるはずが2ページ目になぜかページヘッダーが出るトラブルに見舞われ

レポートのデザインビューでいうと上から、レポートヘッダー、ページヘッダー、グループヘッダー、詳細、グループフッター、ページフッター、レポートフッター・・・というような、結構細かいレポートを作っている。 …

Accessのフォームをデザインしようとすると固まる

タイミングとしては、フォームをデザインビューにした直後、プロパティシートをクリックしたとき。それだけで数十秒待たされる。 原因は、なんとなく、気が付いている。 ついさっき、フォームで使っているクエリに …

no image

SqlServerにAccessでいうオートナンバー型をつける

テストデータを作るために、Accessで2万件ほどのデータを用意し、別途追加クエリを作って、ODBC接続したSqlServerに追加しようとしたところ、「型変換エラーがどうのこうので追加出来ない」との …