回答編集履歴
3
コード修正
answer
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
> Stringフィールドのみにしております。
|
18
18
|
|
19
19
|
これの仕様でのコード例
|
20
|
-
|
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").
|
32
|
+
If tr.getElementsByTagName("td").length > 0 Then
|
33
|
-
Dim i As Long: i =
|
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
コード追記
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
追記
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
|
-
|
5
|
+
(追記: 質問のコードではDAOを使っているようですのでそれでOKですね。)
|
6
6
|
|
7
7
|
次に、DAO(またはADO)でデータを追加するコードを調べてください。WEB検索すればサンプルコードはいくらでも見つかります。例えば、下記ではDAOとADOのコード例があります。
|
8
8
|
|