Excel VBA質問箱 IV

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

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


24790 / 76738 ←次へ | 前へ→

【57295】構造体およびEnumの使い方
質問  satsuki  - 08/8/5(火) 14:54 -

引用なし
パスワード
   スレッド57227のところで教えて頂いたコードの一部を研究中です。
いろいろご指摘頂いた点、まだ対応できていないかもしれませんが、
ネットで調べてみても見つからず、前に進めません。
どなたかご教示お願いいたします。

Private Enum TargetTableName
  店別来店数
  店別製品別売上数
  店別個人別売上数
End Enum

Private Type RecordData
  日付 As Date
  店名 As String
  人数 As Long
  製品名 As String
  担当名 As String
  台数 As Long
End Type

Private Sub InsertMain()
Dim Cn As ADODB.Connection
Dim cnString As String
Dim typData() As RecordData
Dim fNum As Long
Dim Ret As Boolean
Const csvpath As String = "E:\Data\Office\Access\TestData.csv"

Dim Title(2) As String
Dim TitleName As String
Dim TableName(2) As String
Dim InputTable As String
Dim i As long
Dim j As long

Title(0) = "1.店別来店数"
Title(1) = "2.店別製品別売上数"
Title(2) = "3.店別個人別売上数"

TableName(0) = 店別来店数
TableName(1) = 店別製品別売上数
TableName(2) = 店別個人別売上数

TitleName = Title(0)
InputTable = TableName(0)
i = 0

On Error GoTo ErrTrap
  Set Cn = New ADODB.Connection
  cnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data   
  Source=C:\hogehogeDirctory\Test.mdb;"
  Cn.ConnectionString = cnString
  Cn.Open
 
Dim objsheet As Worksheet
  Set objsheet = Worksheets("sheet1")
  
objsheet.Range("A1").Select

ReDim typData(6 To objsheet.Cells(Rows.Count, 1).End(xlUp).Row)

For j = 6 To objsheet.Cells(Rows.Count, 1).End(xlUp).Row
  If objsheet.Cells(j, 1).Value = Title(i) Then
    TitleName = Title(i)
    InputTable = TableName(i) 3.
    i = i + 1
    j = j + 1
  End If

    typData(j).日付 = Cells(2, 1)
    typData(j).店名 = Cells(j, 1)
    typData(j).人数 = Cells(j, 2)
    
  Ret = InSertData(TargetTableName.店別来店数, typData, Cn)2.
 
Next j
  Cn.Close
  Set Cn = Nothing
  Exit Sub
ErrTrap:
  MsgBox "Err No: " & Err.Number & vbTab & Err.Description
End Sub

Private Function InSertData(ptbl As TargetTableName, pRec() As RecordData, pCn As ADODB.Connection) As Boolean
  Dim sSQL As String
  Dim Cmd As ADODB.Command

  sSQL = "INSERT INTO "
  'SQL生成
  Select Case ptbl
    Case TargetTableName.店別来店数
      '個別のSQL生成 1.
      sSQL = sSQL & ptbl & "(日付,店名,人数)" & _
          " VALUES(#" & pRecpRec(j).日付 & "#,'" &
          pRecpRec(j).店名 & "'," &
          pRecpRec(j).人数 & ")"
    Case TargetTableName.店別個人別売上数
    Case TargetTableName.店別製品別売上数
  End Select
'  Commandオブジェクト生成
  'command実行
  
End Function


1.sSQL = sSQL & ptbl & "(日付,店名,人数)" & _
   " VALUES(#" & pRec(j).日付 & "#,'" & pRec(j).店名 & "'," &           pRec(j).人数 & ")"
のところで「インデックスが有効範囲にありません」というエラーがでます。
どこを直したらよいでしょうか?

2.Ret = InSertData(TargetTableName.店別来店数, typData, Cn)
後、上記のコードのところで、Enumの値を動的に変える方法はありますでしょうか?
3.InputTable = TableName(i)で、テーブル名をデータの内容ごとに変えるようにしてありますが、Enumで列挙されているテーブル名をまた配列で列挙しているのもムダな気がします。Enumの上手な使い方をどなたかご教示お願いいたします。

0 hits

【57295】構造体およびEnumの使い方 satsuki 08/8/5(火) 14:54 質問
【57298】Re:構造体およびEnumの使い方 mizunu 08/8/5(火) 16:22 回答
【57306】Re:構造体およびEnumの使い方 satsuki 08/8/5(火) 23:13 質問
【57299】Re:構造体およびEnumの使い方 neptune 08/8/5(火) 16:22 発言
【57305】Re:構造体およびEnumの使い方 satsuki 08/8/5(火) 20:50 発言

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