teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コード修正

2019/10/21 04:41

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -17,7 +17,7 @@
17
17
  > Stringフィールドのみにしております。
18
18
 
19
19
  これの仕様でのコード例
20
- オートナンバー型のフィールドは1列目とする
20
+ IDフィールドは無しとする
21
21
 
22
22
  ```vb
23
23
  'Web上のテーブルデータをAccessテーブルに書き出す関数
@@ -29,14 +29,21 @@
29
29
 
30
30
  Dim tr As HTMLTableRow
31
31
  For Each tr In table.getElementsByTagName("tr")
32
- If tr.getElementsByTagName("td").Count > 0 Then
32
+ If tr.getElementsByTagName("td").length > 0 Then
33
- Dim i As Long: i = 1 'テーブルの列目から代入
33
+ Dim i As Long: i = 0 'テーブルの1列目から代入
34
34
  Dim td As HTMLTableCell
35
35
  RsData.AddNew
36
+ On Error Resume Next
36
37
  For Each td In tr.getElementsByTagName("td")
37
38
  RsData.Fields(i) = td.innerText
38
39
  i = i + 1
39
40
  Next td
41
+ If Err.Number <> 0 Then
42
+ 'エラー内容をイミディエイトウィンドウへ出力
43
+ Debug.Print Err.Number & ": " & Err.Description
44
+ Err.Clear
45
+ End If
46
+ On Error GoTo 0 'エラー処理を解除
40
47
  RsData.Update
41
48
  End If
42
49
  Next tr

2

コード追記

2019/10/21 04:41

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -8,4 +8,41 @@
8
8
 
9
9
  [DAO・ADOでのデータの追加~マイクロソフトアクセス(Access)活用法(メルマガ)](https://www.sk-access.com/mailmaga/vol208.html)
10
10
 
11
- 上記のヒントを参考に、ExcelのコードをAccess用に書き換えてください。不明な点がでたら、どこまでできて、どこが不明なのか質問に追記してください。
11
+ 上記のヒントを参考に、ExcelのコードをAccess用に書き換えてください。不明な点がでたら、どこまでできて、どこが不明なのか質問に追記してください。
12
+
13
+ ---
14
+
15
+ > Web上の目的のTableデータはすべてString型なので、
16
+ > Access側ではIDのオートナンバーを省いて
17
+ > Stringフィールドのみにしております。
18
+
19
+ これの仕様でのコード例
20
+ オートナンバー型のフィールドは1列目とする。
21
+
22
+ ```vb
23
+ 'Web上のテーブルデータをAccessテーブルに書き出す関数
24
+ Public Sub WriteTableData(ByVal table As HTMLTable, ByVal tblName As String)
25
+ Dim mydb As Database
26
+ Set mydb = CurrentDb
27
+ Dim RsData As Recordset
28
+ Set RsData = mydb.OpenRecordset(tblName)
29
+
30
+ Dim tr As HTMLTableRow
31
+ For Each tr In table.getElementsByTagName("tr")
32
+ If tr.getElementsByTagName("td").Count > 0 Then
33
+ Dim i As Long: i = 1 'テーブルの2列目から代入
34
+ Dim td As HTMLTableCell
35
+ RsData.AddNew
36
+ For Each td In tr.getElementsByTagName("td")
37
+ RsData.Fields(i) = td.innerText
38
+ i = i + 1
39
+ Next td
40
+ RsData.Update
41
+ End If
42
+ Next tr
43
+
44
+ RsData.Close
45
+ End Sub
46
+ ```
47
+
48
+ 直書きなのでミスがあるかも。ロジックを参考にしてください。

1

追記

2019/10/21 02:49

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,8 +1,8 @@
1
1
  Excelのセルは何でも代入できますが、Accessの場合はフィールドにはデータ型があり、データ型が異なるデータは基本的には代入できません。
2
2
  Accessのテーブルのフィールド数・フィールドのデータ型は、HTMLのテーブルのデータと合うように設計されているか確認してください。
3
3
 
4
- 次にVBAでAccessのテーブルのデータ操作をするには、DAOを使用する場合と、ADOを使用する場合があります。それをどちらにするか決めてください。
4
+ 次にVBAでAccessのテーブルのデータ操作をするには、DAOを使用する場合と、ADOを使用する場合があります。それをどちらにするか決めてください。AccessのVBAならば、DAOの方が扱いやすいと思います。
5
- AccessVBAならば、DAOの方が扱いと思います。
5
+ (追記: 質問コードではDAOを使ってるようでのでそれでOKで
6
6
 
7
7
  次に、DAO(またはADO)でデータを追加するコードを調べてください。WEB検索すればサンプルコードはいくらでも見つかります。例えば、下記ではDAOとADOのコード例があります。
8
8