投稿者 るきお  (社会人) 投稿日時 2020/3/7 14:56:28
問題解決につながるかはわかりませんが、修正すべき点がいくつかあるのはわかりました。
現在のプログラムをできるだけ変更しないで書き換えると次のようになります。
'追加するテーブルの設定 
Dim NewTable As String = "CREATE TABLE NewTable(ID INT, NAME STRING・・・・)"

'全個人データファイルにNewTableを追加する 
For i As Integer = 0 To PersonalFileList.Count - 1
    Try
        Using Cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PersonalFileList(i))
            Using SQLCm As OleDbCommand = Cn.CreateCommand
                Cn.Open()
                SQLCm.CommandText = NewTable
                SQLCm.ExecuteNonQuery()
                Cn.Close()
            End Using
        End Using

    Catch ex As Exception
        MsgBox(Err.Description)
    End Try
Next i
MsgBox("終了しました")


ポイント1
SQLCm を Cn.CreateCommand で作成した後、もう1回 New OleDbCommand で作成しています。
SQLCm.Dispose() はその後で呼ばれるので、DisposeされるのはNewで作成された方のOleDbCommandとなり、CreateCommandされた方のSQLCmは残ります。
※残った場合、.NET Frameworkが頃合いを見計らって自動的に開放してくれますが、この「頃合い」は自動制御なのですぐかもしれませんし、1時間後かもしれません。

ポイント2
DispoeをUsing ~ End Usingに置き換えました。
Using ~ End Usingを使うと必ず解放されるので、VB2005以降ではこの書き方が推奨されています。
還暦さんのプログラムの場合、例外が発生するとDisposeされずにCatchに流れる可能性がありますが、Using ~ End Usingで囲んで小谷、Catchに流れた場合でも、(他のどこか別の場所にジャンプした場合でも)ブロックから抜けるときに必ずDisposeが呼ばれます。