重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

「Excel VBA ADODB」の本を手元にして、Excelのデータ処理を勉強しております。
以下の2つの例では、旨くいきますが、次の3番目では、エラーとなります。delete
は、使えないのでしょうか?

Const DATA_SOURCE = "Data Source=人事データ.xls;"
Const DATA_SOURCE販売管理データ = "Data Source=販売管理データ.xls;"
Const DATA_SOURCE商品マスタ = "Data Source=商品マスタ.xls;"
Const ExProperties = "Extended Properties=Excel 8.0;"

Sub SELECT文によるテーブル結合() ' 570
Dim myConn As New ADODB.Connection
Dim myRS As New ADODB.Recordset
Dim myField As Field, i As Long

myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _
DATA_SOURCE販売管理データ & ExProperties

ThisWorkbook.Activate
Worksheets("570").Activate
myRS.Open Source:="SELECT 売上No, 売上.商品コード, 商品名, 単価, 数量 FROM 売上 INNER JOIN 商品マスタ ON 売上.商品コード=商品マスタ.商品コード;", _
ActiveConnection:=myConn
i = 1
For Each myField In myRS.Fields
Cells(1, i).Value = myField.Name
i = i + 1
Next myField
Range(Cells(1, 1), Cells(1, i - 1)).Interior.ColorIndex = 35
Range("A2").CopyFromRecordset Data:=myRS
myRS.Close: Set myRS = Nothing
myConn.Close: Set myConn = Nothing
End Sub

Sub INSERT文によるレコード追加() ' 571
Dim myConn As New ADODB.Connection
Dim myCmd As New ADODB.Command
Dim myField As Field, i As Long

myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _
DATA_SOURCE & ExProperties

ThisWorkbook.Activate
With myCmd
.ActiveConnection = myConn
.CommandText = "INSERT INTO 社員マスタ VALUES(11, '石川俊介', '大阪', 25);"
.Execute
''' 追加は、範囲の下にデータがあってはいけない。
''' 追加後、範囲名は広がらない。
' .CommandText = "UPDATE 社員マスタ SET 所属支店='東京' WHERE 社員No=5;"
End With
Set myCmd = Nothing
myConn.Close: Set myConn = Nothing
End Sub

Sub DELETE文によるレコード削除() ' 573
Dim myConn As New ADODB.Connection
Dim myCmd As New ADODB.Command

myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _
DATA_SOURCE & ExProperties

ThisWorkbook.Activate
With myCmd
.ActiveConnection = myConn
.CommandText = "DELETE FROM 社員マスタ WHERE 社員No=6;"
.Execute
End With
Set myCmd = Nothing
myConn.Close: Set myConn = Nothing
End Sub

A 回答 (1件)

多分できないと思います。

下記はVB.NET & ADO.NETの場合ですが
http://support.microsoft.com/kb/316934/ja
抜粋
『レコードの削除

Jet OLE DB プロバイダを使用すると、Excel ブックのレコードの挿入および更新はできますが、DELETE の操作を行うことはできません。1 件以上のレコードに対して DELETE 操作を実行しようとすると、次のエラー メッセージが表示されます。
この ISAM では、リンク テーブル内のデータを削除することはできません。
この制限事項は、Excel ブックをデータベースとして扱う場合に固有のものです。 』

当方、Excel2010なので、XLS(JET)、XLSX(ACE)で試しましたが、
『この ISAM では、リンク テーブル内のデータを削除することはできません。』
です。
JET/ACEを使っている時点でダメっぽい?ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!