質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

2437閲覧

VBScriptでAccess (Accdb) ファイルの修復と最適化をする

mnbwqz

総合スコア74

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2022/08/23 09:58

編集2022/08/23 11:09

VBSでAccdbファイルを最適化と修復するファイルを作っています。
フォルダのドラッグ&ドロップとAccdbファイルのリスト化までは
うまくいくのですが、最適化がうまくいきません。
どのようにすればよいでしょうか。
Accessは2013、DAO3.6です。
よろしくお願いします。

VBScript

1' ドラッグ&ドロップしたフォルダ内にあるAccdbファイルの最適化を実行するスクリプト 2' Accdbファイルが入ったフォルダをスクリプトにドラッグ&ドロップして実行 3Option Explicit 4 5Dim Excel 6Set Excel = WScript.CreateObject("Excel.Application") 7 8 9' ArrayList作成 10Dim ary 11Set ary = CreateObject("System.Collections.ArrayList") 12 13Dim Args 14Set Args = WScript.Arguments 15 16'パラメータ数チェック 17If Args.Count < 1 Then 18 WScript.Echo "当スクリプトにフォルダをドラッグ&ドロップして処理を実行してください。" 19 WScript.Quit 20End If 21 22'フォルダ判別 23With CreateObject("Scripting.FileSystemObject") 24 If .FolderExists(Args(0)) = False Then 25 WScript.Echo "フォルダが見つかりません。" & vbCrLf & "あるいはフォルダではありません。" 26 WScript.Quit 27 End If 28End With 29 30'Excelファイルの有無チェック 31If IsExistsParticularFile(Args(0), "accdb") = False Then 32 WScript.Echo "指定したフォルダ内にxlsmファイルが見つかりませんでした。" 33 WScript.Quit 34End If 35 36 37Dim item 38Dim DBE2 39Set DBE2 = CreateObject("DAO.DBEngine.120") 40 41For Each item In ary 42 DBE2.CompactDatabase item, "new" & item ★★★ エラー行 ★★★ 43Next 44Call MsgBox("Optimization complete.", vbInformation) 45 46 47Private Function IsExistsParticularFile(ByVal FolderPath, ByVal FileExtension) 48'指定したフォルダ内に特定の拡張子のファイルがあるかを調べる 49 Dim ret 50 Dim f 51 52 ret = False '初期化 53 With CreateObject("Scripting.FileSystemObject") 54 For Each f In .GetFolder(FolderPath).Files 55 Select Case LCase(.GetExtensionName(f)) 56 Case LCase(FileExtension) 57 ret = True 58 ary.add .GetFile(f).Path 59 Exit For 60 End Select 61 Next 62 End With 63 IsExistsParticularFile = ret 64End Function

参考にしたURL
https://answers.microsoft.com/ja-jp/msoffice/forum/all/vba%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4/f49e8ed9-fc2a-4425-ada3-812461455ec2

https://www.excel-pitin.net/single-post/2019/04/12/access%E3%82%84access-runtime%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%ABmdb%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%80%81accdb%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%99%E3%82%8B

エラーメッセージ

Windows Script Host

スクリプト:C:\Users(ユーザー名)\Desktop\aaaa.vbs
行: 42
文字: 3
エラー:Not a valid file name.
コード:800A0BEF
ソース:DAO.DbEngine

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DAO3.6ではRepairDatabaseメソッドは使用できなくなったそうです。

注 RepairDatabaseメソッドは使用できなくなりましたが、下位互換性のためにリストされています。代わりにCompactDatabaseメソッドを使用してください。

https://documentation.help/DAO360/damthrepairdatabase.htm

投稿2022/08/23 10:11

RiaFeed

総合スコア2701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnbwqz

2022/08/23 11:11

ありがとうございます。 RepairDatabase を削除しましたが、再度エラーがでました。
RiaFeed

2022/08/23 11:28

その使い方だとitemにはフルパスが入っているので頭にnewを付けるとnewC:\~となって存在しないパスを指していることになっているからじゃないでしょうか?
mnbwqz

2022/08/23 13:24

その通りでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問