Excel VBA質問箱 IV

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

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


1110 / 13645 ツリー ←次へ | 前へ→

【76266】Excel VBA ODBを使った時のinsertについて ゆうぞう 14/10/22(水) 18:39 質問[未読]
【76267】Re:Excel VBA ODBを使った時のinsertについ... calen 14/10/22(水) 19:22 発言[未読]
【76286】Re:Excel VBA ODBを使った時のinsertについ... ゆうぞう 14/10/28(火) 0:56 お礼[未読]

【76266】Excel VBA ODBを使った時のinsertについて
質問  ゆうぞう  - 14/10/22(水) 18:39 -

引用なし
パスワード
   現在Excel VBAでータ登録・更新・参照を行うフォームを作っています。
データはDBは使わず、Excel内の1シートに記載されています。
フォームから登録する際には、"Microsoft.Jet.OLEDB.4.0"を使用してSQL文を実行しています。

[DBオープン関数]
Public Sub OpenDB()

  Dim DBName As String
  DBName = ThisWorkbook.name

  ' Connection生成
  Set dbCon = New ADODB.Connection
  With dbCon
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties(cnsExtProp) = "Excel 8.0"
    .Open ThisWorkbook.Path & "\" & DBName
  End With
End Sub

[SQL実行関数]
Public Sub ExecuteSQL(ByVal sql As String)
  dbCon.Execute (sql)
End Sub

◎質問事項
上記関数を使って1件Insert文でレコードを追加した際、データ最終行+1ではなく、かなり下のほうにレコードが追加される場合があります。
現在は、追加後にソートをして事なきを得ていますが、なぜこのようなことが起きるのでしょうか?
ご存知の方がいれば教えてください。
#可能であればソートはしたくないので。

【76267】Re:Excel VBA ODBを使った時のinsertにつ...
発言  calen  - 14/10/22(水) 19:22 -

引用なし
パスワード
   自ブックにデータを追加するだけなのになぜSQLなのかとても理解に苦しみます。
まあ、それは趣味嗜好の問題なのかもしれないので置いときます。


かなり下に追加されたとき実際に最終セルがある認識している行との間が
すべて完全にEmptyなのかを調べてみてはいかがでしょうか?
長さ0の文字列とか入ってませんか?


なお
Thisworkbook.path & Thisworkbook.name
というのは
Thisworkbook.FullName
と書けます。

そしてこのようなDB接続をエクセルで行う場合は自ブックに接続することは
あまりよろしくないという説があります。
また、エクセルVBAでエクセルへのDB接続自体が不安定という説も。
(注、WordVBAやAccessVBA、またVB6などからのエクセルへのDB接続は問題ない。)

【76286】Re:Excel VBA ODBを使った時のinsertにつ...
お礼  ゆうぞう  - 14/10/28(火) 0:56 -

引用なし
パスワード
   calen さん:
ご回答ありがとうございます。
現在はデータが少なく試験的に運用しようと思っているので、自ブックのデータを使用していますが、将来的にはDBを分離したいと考えています。
その時に、出来る限り修正せずにそのまま利用できればと思い、SQLを使っていました。
飛ばされる行をすべて行削除しても、Emptyとなっていませんでした。
なぜこのようになるのかはわかりませんが、とりあえずはExcelでソートして対処し、データが大きくなったらDBを別にしようと思います。
ありがとうございました。

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