- 締切済み
Excel VBA ADODB
「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
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- nicotinism
- ベストアンサー率70% (1019/1452)
多分できないと思います。下記は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を使っている時点でダメっぽい?ですね。