Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1440 / 2272 ツリー ←次へ | 前へ→

【7167】EXCELに出力の際のエラーについて タロウ 06/1/27(金) 14:47 質問[未読]
【7168】Re:EXCELに出力の際のエラーについて Gin_II 06/1/27(金) 15:00 回答[未読]
【7169】Re:EXCELに出力の際のエラーについて タロウ 06/1/27(金) 15:22 お礼[未読]
【7170】Re:EXCELに出力の際のエラーについて 06/1/27(金) 15:40 発言[未読]
【7171】Re:EXCELに出力の際のエラーについて タロウ 06/1/27(金) 15:57 発言[未読]
【7172】Re:EXCELに出力の際のエラーについて たん 06/1/27(金) 16:14 回答[未読]
【7173】Re:EXCELに出力の際のエラーについて タロウ 06/1/27(金) 16:30 お礼[未読]

【7167】EXCELに出力の際のエラーについて
質問  タロウ  - 06/1/27(金) 14:47 -

引用なし
パスワード
   初心者なもので、ご指導お願いします。
環境 WindowsXP SP2 ACCESS2003 SP2

今までACCESSよりDAOで既存のEXCELファイルに出力していました
ところが Office2003 ServicePack2をインストールしたところ
「データベースまたはオブジェクトは読み取り専用なので、更新できません」
というエラーが出るようになりました。
調べた所下記URLの
http://support.microsoft.com/kb/904953
「Office Access2003またはAccess2002でExcelブックにリンクされている
テーブル内のデータを変更、追加、削除できない」という所の問題かと思い
回避策を確認したのですが、DAOの際の回避策がよくわかりません
どなたか教えて頂けるでしょうか
よろしくお願いします。

ソースの抜粋です

Dim XlsDb As Database, MyDb As Database
Dim XlsRs As Recordset, MyRs As Recordset
Dim EndFlg As Integer, I As Integer

Set XlsDb = OpenDatabase(Path & "\" & ExcelName, False, False, ExcelType)
Set XlsRs = XlsDb.OpenRecordset(SheetName & ExcelRange)

Set MyDb = CurrentDb
Set MyRs = MyDb.OpenRecordset(TblSql, dbOpenSnapshot)

ToExcel = 1
EndFlg = 0

If MyRs.EOF = False Then
 MyRs.MoveFirst
Else
 ToExcel = 0 '出力データナシ
 DoCmd.Hourglass False
 Exit Function
End If
 
If XlsRs.EOF = False Then
 
   XlsRs.MoveFirst
   Do Until XlsRs.EOF
  
    If EndFlg = 0 Then
     With XlsRs
      .Edit              ←ここでエラーが出ます
       For I = 0 To FieldCount - 1
       XlsRs.Fields(I) = MyRs(FieldArray(I))
       Next I
      .Update
     End With
    Else
     With XlsRs
      .Edit
       For I = 0 To FieldCount - 1
       XlsRs.Fields(I) = Null
       Next I
      .Update
     End With
    End If
  
    If EndFlg = 0 Then
     MyRs.MoveNext
     If MyRs.EOF = True Then
      EndFlg = 1
     End If
    End If
   
   XlsRs.MoveNext
   Loop
  
   If EndFlg = 0 Then
   ToExcel = -2   'エクセルデータ格納セル不足
   End If
  
Else

  ToExcel = -3     'エクセルデータ格納セル0
End If
XlsRs.Close
XlsDb.Close

【7168】Re:EXCELに出力の際のエラーについて
回答  Gin_II  - 06/1/27(金) 15:00 -

引用なし
パスワード
   > DAOの際の回避策がよくわかりません

DAO で、Excelファイルのデータ更新はムリですね。

Excel VBA で、Accessのデータを見に行くように変更するか、
Excel を オートメーション機能を使って操作してやるかになると
思います。

【7169】Re:EXCELに出力の際のエラーについて
お礼  タロウ  - 06/1/27(金) 15:22 -

引用なし
パスワード
   ▼Gin_II さん:
>> DAOの際の回避策がよくわかりません
>
>DAO で、Excelファイルのデータ更新はムリですね。
>
>Excel VBA で、Accessのデータを見に行くように変更するか、
>Excel を オートメーション機能を使って操作してやるかになると
>思います。

回答ありがとうございます。
ムリですか、でもご意見を聞けてよかったです。
オートメーション機能を使っての操作に変更してみます。
また何かありましたらよろしくお願いします。

【7170】Re:EXCELに出力の際のエラーについて
発言    - 06/1/27(金) 15:40 -

引用なし
パスワード
   ▼タロウ さん:
>初心者なもので、ご指導お願いします。
>環境 WindowsXP SP2 ACCESS2003 SP2
>
>今までACCESSよりDAOで既存のEXCELファイルに出力していました
>ところが Office2003 ServicePack2をインストールしたところ
>「データベースまたはオブジェクトは読み取り専用なので、更新できません」
>というエラーが出るようになりました。
>調べた所下記URLの
>http://support.microsoft.com/kb/904953
>「Office Access2003またはAccess2002でExcelブックにリンクされている
>テーブル内のデータを変更、追加、削除できない」という所の問題かと思い
>回避策を確認したのですが、DAOの際の回避策がよくわかりません
>どなたか教えて頂けるでしょうか
>よろしくお願いします。
>
>ソースの抜粋です
>
> Dim XlsDb As Database, MyDb As Database
> Dim XlsRs As Recordset, MyRs As Recordset
> Dim EndFlg As Integer, I As Integer
>
> Set XlsDb = OpenDatabase(Path & "\" & ExcelName, False, False, ExcelType)
> Set XlsRs = XlsDb.OpenRecordset(SheetName & ExcelRange)
>
> Set MyDb = CurrentDb
> Set MyRs = MyDb.OpenRecordset(TblSql, dbOpenSnapshot)

「dbOpenSnapshot」を「dbOpenDynaset」にしたら、どうなりますか?


>
> ToExcel = 1
> EndFlg = 0
>
> If MyRs.EOF = False Then
> MyRs.MoveFirst
> Else
> ToExcel = 0 '出力データナシ
> DoCmd.Hourglass False
> Exit Function
> End If
> 
> If XlsRs.EOF = False Then
> 
>   XlsRs.MoveFirst
>   Do Until XlsRs.EOF
>  
>    If EndFlg = 0 Then
>     With XlsRs
>      .Edit              ←ここでエラーが出ます
>       For I = 0 To FieldCount - 1
>       XlsRs.Fields(I) = MyRs(FieldArray(I))
>       Next I
>      .Update
>     End With
>    Else
>     With XlsRs
>      .Edit
>       For I = 0 To FieldCount - 1
>       XlsRs.Fields(I) = Null
>       Next I
>      .Update
>     End With
>    End If
>  
>    If EndFlg = 0 Then
>     MyRs.MoveNext
>     If MyRs.EOF = True Then
>      EndFlg = 1
>     End If
>    End If
>   
>   XlsRs.MoveNext
>   Loop
>  
>   If EndFlg = 0 Then
>   ToExcel = -2   'エクセルデータ格納セル不足
>   End If
>  
> Else
>
>  ToExcel = -3     'エクセルデータ格納セル0
> End If
> XlsRs.Close
> XlsDb.Close

【7171】Re:EXCELに出力の際のエラーについて
発言  タロウ  - 06/1/27(金) 15:57 -

引用なし
パスワード
   ▼T さん:ありがとうございます

>「dbOpenSnapshot」を「dbOpenDynaset」にしたら、どうなりますか?

変更してやってみましたが、
かわらず同じエラーが出ます。

できればこのままソースを使えればと思っていたのですが
またなにかお気づきならば教えてください

【7172】Re:EXCELに出力の際のエラーについて
回答  たん  - 06/1/27(金) 16:14 -

引用なし
パスワード
   >>「dbOpenSnapshot」を「dbOpenDynaset」にしたら、どうなりますか?
>
>変更してやってみましたが、
>かわらず同じエラーが出ます。

データセットの開き方を変えた所で、開いたデータセットは更新出来ないのは
かわりがないので、変更する意味はありません。

リンクテーブルとして書き込むことは、仕様変更により無理なので、
オートメーションでExcelシートを操作する以外に手法は無いと思えます。

【7173】Re:EXCELに出力の際のエラーについて
お礼  タロウ  - 06/1/27(金) 16:30 -

引用なし
パスワード
   ▼たん さん:

>リンクテーブルとして書き込むことは、仕様変更により無理なので、
>オートメーションでExcelシートを操作する以外に手法は無いと思えます。

そうですかやはりムリですか、
仕様変更とわりきって
オートメーションでExcelシートを操作するという
やり方に変えたいと思います。

回答ありがとうございました。

1440 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free