Excel VBA質問箱 IV

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

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


10250 / 13646 ツリー ←次へ | 前へ→

【22619】mdbファイルについて mickeypapa 05/2/24(木) 21:14 質問[未読]
【22623】Re:mdbファイルについて ichinose 05/2/24(木) 22:07 発言[未読]
【22636】Re:mdbファイルについて mickeypapa 05/2/25(金) 8:13 質問[未読]
【22639】Re:mdbファイルについて ichinose 05/2/25(金) 9:22 発言[未読]
【22648】Re:mdbファイルについて mickeypapa 05/2/25(金) 14:08 質問[未読]
【22657】Re:mdbファイルについて ichinose 05/2/25(金) 18:34 発言[未読]
【22658】Re:mdbファイルについて mickeypapa 05/2/25(金) 21:07 お礼[未読]
【22662】Re:mdbファイルについて ichinose 05/2/26(土) 0:18 発言[未読]
【22674】Re:mdbファイルについて mickeypapa 05/2/27(日) 17:33 質問[未読]
【22676】Re:mdbファイルについて ichinose 05/2/27(日) 22:44 発言[未読]
【22851】Re:mdbファイルについて mickeypapa 05/3/4(金) 22:52 お礼[未読]
【22899】Re:mdbファイルについて mickeypapa 05/3/6(日) 19:31 質問[未読]
【22904】Re:mdbファイルについて ichinose 05/3/6(日) 22:18 発言[未読]
【22912】Re:mdbファイルについて mickeypapa 05/3/7(月) 13:40 お礼[未読]
【22913】Re:mdbファイルについて mickeypapa 05/3/7(月) 13:43 発言[未読]
【22659】Re:mdbファイルについて mickeypapa 05/2/25(金) 21:13 お礼[未読]

【22619】mdbファイルについて
質問  mickeypapa WEB  - 05/2/24(木) 21:14 -

引用なし
パスワード
   こんにちは、宜しくお願いいたします。
作成中のファイルのサイズが大きくなってきたので、データとマクロを分けて
データのファイルが300KBほどになったのですが、データを1000件ほど
打ち込んでいくと、600KBを超えてしまいました。起動時や保存の時を考えると、なるべくファイルサイズを抑えたいと思い、行き当たったのがデータを
mdbファイルに保存するという方法です。ネットや本で調べて、どうにか
mdbファイルから呼び出すことは出来る様になったのですが、それ以上先には進むことが出来ません。
アドバイス宜しくお願い致します。

1.mdbファイルを呼び出すときに2004/10/1〜現在日までのデータというように
  数ヶ月前までのデータを呼び出せる様にしたい。
2.更新したデータをmdbファイルに書き込み(保存)できる様にしたい。

mdbファイルからデータを呼び出すコードは下記の通りです。
mdbファイルのテーブルと同じ項目が、呼び出すシートのA1〜T1にあります。

Sub DAO()
  'Microsoft DAO 3.6 Object Library 参照設定
  Dim myDb    As DAO.Database
  Dim myRst   As DAO.Recordset
  Dim myFileName As String
  Dim myTblName As String

  myFileName = "運送.mdb"      '読み込むファイル
  myTblName = "運送DATA"       '読み込むテーブル
  
  Set myDb = OpenDatabase(ThisWorkbook.Path & "\" & myFileName)
  Set myRst = myDb.OpenRecordset(myTblName)
  With myRst

    'レコード
    Range("A2").CopyFromRecordset myRst
    .Close
  End With
  myDb.Close
  Set myRst = Nothing       'オブジェクトの解放
  Set myDb = Nothing
  Range("A65536").End(xlUp).Offset(1, 1).Select
End Sub

【22623】Re:mdbファイルについて
発言  ichinose  - 05/2/24(木) 22:07 -

引用なし
パスワード
   ▼mickeypapa さん:
こんばんは。

>こんにちは、宜しくお願いいたします。
>作成中のファイルのサイズが大きくなってきたので、データとマクロを分けて
>データのファイルが300KBほどになったのですが、データを1000件ほど
>打ち込んでいくと、600KBを超えてしまいました。起動時や保存の時を考えると、なるべくファイルサイズを抑えたいと思い、行き当たったのがデータを
>mdbファイルに保存するという方法です。ネットや本で調べて、どうにか
>mdbファイルから呼び出すことは出来る様になったのですが、それ以上先には進むことが出来ません。
>アドバイス宜しくお願い致します。
>
>1.mdbファイルを呼び出すときに2004/10/1〜現在日までのデータというように
>  数ヶ月前までのデータを呼び出せる様にしたい。
>2.更新したデータをmdbファイルに書き込み(保存)できる様にしたい。
>
>mdbファイルからデータを呼び出すコードは下記の通りです。
>mdbファイルのテーブルと同じ項目が、呼び出すシートのA1〜T1にあります。

>
>Sub DAO()
>  'Microsoft DAO 3.6 Object Library 参照設定
>  Dim myDb    As DAO.Database
>  Dim myRst   As DAO.Recordset
>  Dim myFileName As String
>  Dim myTblName As String
>
>  myFileName = "運送.mdb"      '読み込むファイル
'  myTblName = "運送DATA"       '読み込むテーブル
   myTblName = "select * from 運送DATA where 日付 between #2004/10/1# and #" & Format(Date, "yyyy/m/d") & "#" 
'これで試してみてください
'コピーする際、空白が全角になっているとエラーになってしまうので注意してネ
'上の例で言うと select * from ←×
'コピー後、再確認して下さい
'尚、日付は、日付という名前が付けられたフィールドです。差し替えて下さい
>  
>  Set myDb = OpenDatabase(ThisWorkbook.Path & "\" & myFileName)
>  Set myRst = myDb.OpenRecordset(myTblName)
>  With myRst
>
>    'レコード
>    Range("A2").CopyFromRecordset myRst
>    .Close
>  End With
>  myDb.Close
>  Set myRst = Nothing       'オブジェクトの解放
>  Set myDb = Nothing
>  Range("A65536").End(xlUp).Offset(1, 1).Select
>End Sub

【22636】Re:mdbファイルについて
質問  mickeypapa E-MAILWEB  - 05/2/25(金) 8:13 -

引用なし
パスワード
   ▼ichinose さん:
こんにちは、ご回答有り難うございます。
myTblNameを以下のコードに書き換えて実行したところ

myTblName = "select * from 運送DATA where 月 日 between #2004/10/1# and #" & Format(Date, "yyyy/m/d") & "#" 

実行時エラー 3075
クエリ式 '月 日 between #2004/10/1# and #2005/2/25#'の 構文エラー:演算子がありません。 と出てしまいます。

アドバイス宜しくお願い致します。

【22639】Re:mdbファイルについて
発言  ichinose  - 05/2/25(金) 9:22 -

引用なし
パスワード
   ▼mickeypapa さん:
おはようございます。

>▼ichinose さん:
>こんにちは、ご回答有り難うございます。
>myTblNameを以下のコードに書き換えて実行したところ
>
>myTblName = "select * from 運送DATA where 月 日 between #2004/10/1# and #" & Format(Date, "yyyy/m/d") & "#" 
>
>実行時エラー 3075
>クエリ式 '月 日 between #2004/10/1# and #2005/2/25#'の 構文エラー:演算子がありません。 と出てしまいます。
フィールド名が「月 日」と言う事ですね?
名前に空白が入っていたりした場合は、[月 日]とないとエラーになっしまいます。

   myTblName = "SELECT * FROM 運送DATA WHERE [月 日] Between #2004/10/1# And #" & Format(Date, "yyyy/m/d") & "#;"

これで試してみてください。

【22648】Re:mdbファイルについて
質問  mickeypapa E-MAILWEB  - 05/2/25(金) 14:08 -

引用なし
パスワード
   ▼ichinose さん:
有り難うございます。おかげでデータが呼び出すことが出来ました。

次の問題なのですが、最初にmdbファイルを作るときにAccessで、
外部データの取り込みで作ったので、見当も付かないのですが、
元データの途中から呼び出したデータを追加、削除、修正した後、
mdbファイルに書き込むには、果たしてどうするのでしょうか?
mdbファイルのテーブルには、No 月 日 業者CD となっておりますが、
そのNoを利用して書き込むことは出来るでしょうか?
宜しくお願い致します。

【22657】Re:mdbファイルについて
発言  ichinose  - 05/2/25(金) 18:34 -

引用なし
パスワード
   ▼mickeypapa さん:
こんばんは。

>有り難うございます。おかげでデータが呼び出すことが出来ました。
>
>次の問題なのですが、最初にmdbファイルを作るときにAccessで、
>外部データの取り込みで作ったので、見当も付かないのですが、
>元データの途中から呼び出したデータを追加、削除、修正した後、
>mdbファイルに書き込むには、果たしてどうするのでしょうか?

Accessが入っている環境なのですか?

指定日付範囲内のデータを抽出し、そのデータの追加・更新・削除を行う

という事でしたら、Accessのみで可能ですよ!!
しかもパラメータクエリを手動操作で一つ作成するだけです。
それともExcelを使用しなければならない理由が他にありますか?

Accessなら、上記の内容ならVBAは、要りません。

Excelからでも出来ますけど・・・。
Accessのサイトで聞いてもらえば比較的簡単な操作で実現できますが・・・。
一応、箇条書きにしておきます。

・「運送.mdb」をAccessで開いて下さい。

・「データベース」ダイアログのオブジェクトとして、クエリを選択。

・この時点では何もクエリがないはずです。

・「新規作成」ボタンをクリックします。

・「クエリ新規作成」ダイアログで「デザインビュー」を選択して「OK」クリック。

・「テーブル表示」ダイアログでは、「閉じる」クリック。

・「表示」----「SQLビュー」とクリック。SQL入力ウインドウが表示されます。

・SELECT; と表示されているでしょうが、これは、削除。

・代わりに
PARAMETERS 開始日 DateTime;
SELECT * FROM 運送DATA WHERE [月 日] Between 開始日 And date();

と入力して下さい。
・入力後、ウインドウを閉じて下さい。保存するか否かのを聞いてきます。

・保存を選択してください。クエリ名入力を促されますから、名前を付けてください。

設定完了です。

・作成したクエリをダブルクリック(又は、開く)

・開始日の入力ダイアログが表示されます。

・日付を入力して下さい。

・データが抽出されるはずです。

このウインドウで追加・削除・変更が可能になります。

更新後、保存アイコン(FDのボタン)をクリックすれば終了です。
ウインドウを閉じて元テーブルの更新を確認して下さい。

という手順で可能です。

どうしてもExcelがいい場合なら、また、考えます。
いくつも方法はありそうなので・・。

取りあえず、ACCで確認してみて下さい。


>mdbファイルのテーブルには、No 月 日 業者CD となっておりますが、
>そのNoを利用して書き込むことは出来るでしょうか?
>宜しくお願い致します。

【22658】Re:mdbファイルについて
お礼  mickeypapa WEB  - 05/2/25(金) 21:07 -

引用なし
パスワード
   ▼ichinose さん:
丁寧にご回答いただき有り難うございます。
ichinoseさんの仰るとおりAccessを使うのがいいかと思い昨年末から
Accessの本を購入して少しずつ勉強を始めております。
しかしながら、今までExcelのVBAを覚えはじめ、入力フォーム作成から始まり
品名一覧、運賃表、日報、請求書などExcelVBAでなんとか作り込んできました。
ExcelVBAで仕事で使うのに充分なモノが出来たら次のステップでAccessに移行しようと思いながらも、日常の業務を行いながらAccessに移行するのには、Excelを覚えるのに2年ほど掛かっているので、ある程度Accessが出来る様になるのに1年以上は掛かるかと思い、先ずデータを移行しておけば後が楽かと思っておりました。
その様なわけで、当面は、Excelからmdbファイルのデータを呼び出すことを思いついた次第です。宜しくお願い致します。

【22659】Re:mdbファイルについて
お礼  mickeypapa WEB  - 05/2/25(金) 21:13 -

引用なし
パスワード
   ▼ichinose さん:
前の投稿で書き忘れましたが、ichinoseさんの言う様に、Accessのクエリ作成でデータを抽出することが出来ました。

【22662】Re:mdbファイルについて
発言  ichinose  - 05/2/26(土) 0:18 -

引用なし
パスワード
   ▼mickeypapa さん:
こんばんは。
>ichinoseさんの仰るとおりAccessを使うのがいいかと思い昨年末から
>Accessの本を購入して少しずつ勉強を始めております。
>しかしながら、今までExcelのVBAを覚えはじめ、入力フォーム作成から始まり
>品名一覧、運賃表、日報、請求書などExcelVBAでなんとか作り込んできました。
なるほど、ではExcelでのVBAということで・・・。
実は、私は普段、mdbファイルの接続にDAOは使っていません(ADOを使っています)。ADOの方を先だったという理由なんですが。
で、あまりDAOオブジェクトそのものを操作しない方法で考えました。
mdbからExcelへの出力も整理して記述します(ちょっと変更もあるので)。

尚、DAOの参照設定は前回と同様です。

'============================================================
Sub DAO_read()
  'Microsoft DAO 3.6 Object Library 参照設定
  Dim myDb    As DAO.Database
  Dim myRst   As DAO.Recordset
  Dim myFileName As String
  Dim myTblsql As String
  myFileName = "運送.mdb"      '読み込むファイル
  myTblsql = "SELECT * FROM 運送DATA WHERE [月 日] Between #2004/10/1# And date();"
' mytblnameではおかしいので変数名変えました
' それから、Sqlもちょっと簡単にしました
' 実際には Sql中の2004/10/1は、変数を使わなくてはなりませんね!!

  Set myDb = OpenDatabase(ThisWorkbook.Path & "\" & myFileName)
  Set myRst = myDb.OpenRecordset(myTblsql)
  With myRst
    For idx = 0 To .Fields.Count - 1
     Cells(1, idx + 1).Value = .Fields(idx).Name
     Next
    '↑フィールド名をセルA1、B1、・・・と書き込んでいます
    '不要なら取ってください
    Range("A2").CopyFromRecordset myRst
    .Close
  End With
  myDb.Close
  Set myRst = Nothing       'オブジェクトの解放
  Set myDb = Nothing
  Range("A65536").End(xlUp).Offset(1, 1).Select
End Sub

このコードの実行でデータがシートに表示されます。
このシートのデータを追加や値の変更、又は、削除を行った後に
以下のコードで書き込みます。


'================================================================
Sub DAO_write()
'最初に読み込んだレコードをMDBファイルから削除して後、
'シートの内容をMDBファイルに挿入するというロジックです。

  'Microsoft DAO 3.6 Object Library 参照設定
  Dim myDb    As DAO.Database
  Dim myRst   As DAO.Recordset
  Dim myFileName As String
  Dim myTblsql As String
  myFileName = "運送.mdb"      '読み込むファイル
  myTblsql = "delete * FROM 運送DATA WHERE [月 日] Between #2004/10/1# And date();"
'  ↑シートに表示したレコードは一度削除する

  Set myDb = OpenDatabase(ThisWorkbook.Path & "\" & myFileName)
  myDb.Execute myTblsql
  myTblsql = "insert INTO 運送DATA select * FROM [Excel 8.0;Database=" & ThisWorkbook.Path & "\sqltest.xls]" & _
    ".[" & ActiveSheet.Name & "$" & Range("a1", Cells(Rows.Count, 1).End(xlUp)).Resize(, 3).Address(False, flase) & "];"

'Sqltest.Xlsは、このマクロを記述しているExcelブック名です
'.Resize(,3)となっていますが、私のテストでは3つフィールドで行ったためです。
'実際のフィールド数に合わせてください。
'尚、mdbファイルとこのブックは同じフォルダ内にあります。
'また、mdbファイルへの書き込みはアクティブシートを対象としています。

  myDb.Execute myTblsql
  myDb.Close
  Set myRst = Nothing       'オブジェクトの解放
  Set myDb = Nothing
End Sub

以上です。

繰り返しになりますが、SQL中の「2004/10/1」は、実際には、変数化にしなければ
なりません。また、DAO_readで使用した変数(例えば、2004/10/1が入っているとすると)は、DAO_writeでも使用します。実際には、日付変数をどこかに保存しておく必要があります(セルに保存しておくのがよいかなあ)。

以上です。提示したコードを実際のMDBファイルの規格に変更して
確認して下さい。

私がテストした限りでは、追加・変更・削除がMDBファイルのテーブルに
反映されています。

【22674】Re:mdbファイルについて
質問  mickeypapa WEB  - 05/2/27(日) 17:33 -

引用なし
パスワード
   ▼ichinose さん:
有り難うございます。おかげで何とか呼出と保存が出来ました。
以下の3カ所を変更しました。

>Sub DAO_read()
>  'Microsoft DAO 3.6 Object Library 参照設定
>  Dim myDb    As DAO.Database
>  Dim myRst   As DAO.Recordset
>  Dim myFileName As String
>  Dim myTblsql As String
   Dim idx As Long'---------------------←追加

>Sub DAO_write()
>  myTblsql = "insert INTO 運送DATA select * FROM [Excel 8.0;Database=" & ThisWorkbook.Path & "\sqltest.xls]" & _
>    ".[" & ActiveSheet.Name & "$" & Range("a1", Cells(Rows.Count, 1).End(xlUp)).Resize(, 3).Address(False, flase) & "];"

sqltest.xlsを運送test.xls
Address(False, flase)をAddress(False, False)にしました。

そこで質問ですが、一度書込をしたあとに再度呼び出すとデータの並びがおかしくなってしまいます。
このような状態です。

#2004/10/1#の時   #2004/12/1#の時
101 2004/10/1    101 2004/10/1
102 2004/10/1    102 2004/10/1
118 2004/10/7    103 2004/10/1
119 2004/10/8    104 2004/10/2
120 2004/10/9    120 2004/10/9
121 2004/10/9    121 2004/10/9
.          .
.          .
.          .
.          .
150 2004/11/30   240 2005/2/25
103 2004/10/1    105 2004/10/2
104 2004/10/2    106 2004/10/3
105 2004/10/3    107 2004/10/3
.          .
115 2004/10/6    .
.          .
151 2004/11/30   119 2004/10/8
.          .
240 2005/2/25
Accessでデータを見ると順番に並んでいます。
上記以外に変更した箇所はないのですが、
面倒かと思いますが、宜しくお願い致します。
目下、日付の変数の代入に苦しんでおります。

【22676】Re:mdbファイルについて
発言  ichinose  - 05/2/27(日) 22:44 -

引用なし
パスワード
   ▼mickeypapa さん:
こんばんは。

>
>>Sub DAO_read()
>>  'Microsoft DAO 3.6 Object Library 参照設定
>>  Dim myDb    As DAO.Database
>>  Dim myRst   As DAO.Recordset
>>  Dim myFileName As String
>>  Dim myTblsql As String
>   Dim idx As Long'---------------------←追加
'   ↑ちゃんと宣言する方がいいですね!!
>
>>Sub DAO_write()
>>  myTblsql = "insert INTO 運送DATA select * FROM [Excel 8.0;Database=" & ThisWorkbook.Path & "\sqltest.xls]" & _
>>    ".[" & ActiveSheet.Name & "$" & Range("a1", Cells(Rows.Count, 1).End(xlUp)).Resize(, 3).Address(False, flase) & "];"
>
>sqltest.xlsを運送test.xls
>Address(False, flase)をAddress(False, False)にしました。
' あらっ、ではたまたま動いていたんですねえ!!、失礼しました。

>
>そこで質問ですが、一度書込をしたあとに再度呼び出すとデータの並びがおかしくなってしまいます。
>このような状態です。
>
>#2004/10/1#の時   #2004/12/1#の時
>101 2004/10/1    101 2004/10/1
>102 2004/10/1    102 2004/10/1
>118 2004/10/7    103 2004/10/1
>119 2004/10/8    104 2004/10/2
>120 2004/10/9    120 2004/10/9
>121 2004/10/9    121 2004/10/9
>.          .
>.          .
>.          .
>.          .
>150 2004/11/30   240 2005/2/25
>103 2004/10/1    105 2004/10/2
>104 2004/10/2    106 2004/10/3
>105 2004/10/3    107 2004/10/3
>.          .
>115 2004/10/6    .
>.          .
>151 2004/11/30   119 2004/10/8
>.          .
>240 2005/2/25
>Accessでデータを見ると順番に並んでいます。

Accでは、デフォルトで並べ替えを行ってくれますからねえ・・・。

読み込むときにA列で並べ替えをしましょう。
シートを並べ替えてもいいんですが、せっかくmdbからの読込みなのでSQLで・・。

DAO_readのSQLの箇所を以下のように変更して下さい。

  myTblsql = "SELECT * FROM tbl1 WHERE [月 日] Between #2004/1/1# And date() order by [id];"

尚、上記の id は、シートのA列に対応するフィールド名です。
この id というフィールドは、数値型としてAccのテーブルは設定して確認しました。


>目下、日付の変数の代入に苦しんでおります。

あくまでもSQLは、文字列ですから・・。

  dim 検索開始日 as string
  検索開始日="2004/1/1"
  myTblsql = "SELECT * FROM tbl1 WHERE [月 日] Between #" & _
        検索開始日 & "# And date() order by [id];"

で良いと思いますが、別の事で悩んでおられたなら、余計なお世話でした。

【22851】Re:mdbファイルについて
お礼  mickeypapa WEB  - 05/3/4(金) 22:52 -

引用なし
パスワード
   ▼ichinose さん:
お礼が大変遅れまして申し訳ありありません
末締め請求書打ち合わせと大雪で、すっかりパソコンに向かう暇が無く
やっと今、変数の代入と保存データの呼び出しに成功しました。

変数で悩んでいたのは、ご指摘の通り書式です。
Between Value And Value
までは調べたのですが、
Dim myDate As String
myDate = Sheets("DATA").Range("Z1").Value
・・・・・・・Between myDate And date();"
・・・・・・・Between & myDate & And date();"
・・・・・・・Between " & myDate & " And date();"
と迄は、コードを書いたのですが、指定した日付から呼び出せず、最初から呼び出されてしまいました。

Between #" & 検索開始日 & "# And date() order by [id];"
お陰様で、呼び出しに成功しました。

書き込みが上手くいかなかった点では、EXCELのセルの書式設定が同じ列で、標準であったり、文字列であったことが原因のようです。
それとAccessのデータの最左列のデータNoに主キーを設定していたのが、災いして
いた様でした。どうにか問題をクリアでき、データファイルからの呼び出しにより
EXCELファイルサイズも小さくすることが出来ました。誠に有り難うございました。今後ともご指導宜しくお願い致します。

【22899】Re:mdbファイルについて
質問  mickeypapa WEB  - 05/3/6(日) 19:31 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは、その後いろいろテストを繰り返した結果
書き込み時の問題としまして、テーブルの最左列のid(No)フィールドデザインで
数値型として、フィールドサイズを整数型、インデックスをはい(重複なし)
とすると書き込みが実行されてもテーブルには反映されず、変更が保存されません。インデックスの設定をはい(重複あり)だと書き込みが実行されテーブルにも保存されるのですが、同じid、新しいデータと同じ番号の空白行が挿入されます。
ただし、Excelから呼び出すと空白行の番号は呼び出しされません。
新しいデータを保存するたびに、同じ番号の空白行が出来るのは他の設定によるものなのでしょうか?勉強不足で申し訳ありませんが、よろしくお願いいたします。

No  月 日   業 者  現 場    客 先 名   現 場 名
1244 2005/03/04 09089  7123    ○○建設       △大橋    
1245
1245 2005/03/06 A0065  9159    北海道建設   △宅造
1246
1246 2005/03/06 20007  4181    ○○土建    ○○公園

上記の様なテーブルのデータになっております。

【22904】Re:mdbファイルについて
発言  ichinose  - 05/3/6(日) 22:18 -

引用なし
パスワード
   ▼mickeypapa さん:
こんばんは。

>こんばんは、その後いろいろテストを繰り返した結果
>書き込み時の問題としまして、テーブルの最左列のid(No)フィールドデザインで
>数値型として、フィールドサイズを整数型、インデックスをはい(重複なし)
>とすると書き込みが実行されてもテーブルには反映されず、変更が保存されません。インデックスの設定をはい(重複あり)だと書き込みが実行されテーブルにも保存されるのですが、同じid、新しいデータと同じ番号の空白行が挿入されます。
空白行があったとして、日付範囲に引っかからないので呼び出されないにしても

うーん、重複ありの時の書き込みでは私の方でのテストでは正常に同じID番号が
二つでも三つでも書き込まれますが・・・・。


>ただし、Excelから呼び出すと空白行の番号は呼び出しされません。
>新しいデータを保存するたびに、同じ番号の空白行が出来るのは他の設定によるものなのでしょうか?勉強不足で申し訳ありませんが、よろしくお願いいたします。
>
>No  月 日   業 者  現 場    客 先 名   現 場 名
>1244 2005/03/04 09089  7123    ○○建設       △大橋    
>1245
>1245 2005/03/06 A0065  9159    北海道建設   △宅造
>1246
>1246 2005/03/06 20007  4181    ○○土建    ○○公園
>
>上記の様なテーブルのデータになっております。

こうなると、再現できないと何とも言えません。
上記の現象が再現するテーブル内容(簡単なフィールド)と
Excelに読み込んだ後、書き込んだ内容等の全ての手順を説明して下さい。
(他にも全てのフィールドの属性、及び、Excelの列の書式なども)。

それとidは、件数が大きくなる可能性があるのなら、長整数にしておいた方がよいですよ!

【22912】Re:mdbファイルについて
お礼  mickeypapa E-MAILWEB  - 05/3/7(月) 13:40 -

引用なし
パスワード
   ▼ichinose さん:
こんにちは、
大変ご迷惑をおかけしました。
ほぼ原因と思われる箇所を突き止めました。
AccessのテーブルのNoを重複ありにすると保存されず、重複無しにすると同じNoの
空白行が挿入される原因はExcelのデータにあったようです。

Excelでデータ入力のユーザーフォームが起動したときに、最終行の次の行に
連番を入力するようにしていたのが原因のようです。データを入力する度に
空白データ行に連番が入るので、
Excelの画面上のデータが以下のようになっていたときに
No    月 日   業 者  現 場    客 先 名   現 場 名
1244 2005/03/04 09089  7123    ○○建設    △大橋    
1245 2005/03/06 A0065  9159    北海道建設   △宅造
1246 2005/03/06 20007  4181    ○○土建    ○○公園
1247

DAO_Writeを実行すると上記のような現象が出ていたので、以下の部分
Sheets("運送DATA").Range("A1", Cells(Rows.Count, 1).End(xlUp)) _
.Resize(, 20).Address(False, False) & "];"

Cells(Rows.Count, 2)に変更して実行すると問題なく保存されました。
最終的にデータ入力のユーザーフォームが閉じるときに空白行の連番を削除する
ことにしまして、テストの結果は、テーブルのNoを重複あり、無しに関わらず
正常に保存されるようになりました。大変お手数をおかけ致しました。

フィールドサイズを長整数にしました。有り難うございます。

【22913】Re:mdbファイルについて
発言  mickeypapa E-MAILWEB  - 05/3/7(月) 13:43 -

引用なし
パスワード
   ▼ichinose さん:
すみません。前回の投稿の重複あり、重複無しは逆の現象でした。
訂正致します。

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