Excel VBA質問箱 IV

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

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


5448 / 13644 ツリー ←次へ | 前へ→

【50699】SQLの質問 KENG 07/8/10(金) 17:54 質問[未読]
【50710】Re:SQLの質問 neptune 07/8/11(土) 17:36 回答[未読]

【50699】SQLの質問
質問  KENG  - 07/8/10(金) 17:54 -

引用なし
パスワード
   以前、同じようなし質問で、データの範囲を設定したら問題はなくなりました。

それで質問なんですが、

エクセルのシート内の
A1:Q200
までのデータ範囲内で

SQLをつかってエクセルVBAに挑戦中です。
そこで、
フィールド名の変更時、
select 2007 as test,部署、氏名、年齢 from [DATA]としていますが、
エラーになります。
なぜかご存知の方おしえていただけませんでしょうか?

テーブルレイアウトは
部署 氏名 年齢 

となっており、TESTというフィールドに固定で2007をSQLの結果に反映したいのですが、エラーとなります。


また、エクセルのSQLリファレンス(JETだと思いますが。。。現在、ACCESS97
です。)
でTransformの使い方など乗っているサイト、説明があればおしえていただけませんでしょうか?

どうぞ宜しくお願い致します。


Sub Test()
  Dim rs As Object
  Dim mysql As String
  If open_ado_excel(ThisWorkbook.FullName) = 0 Then


    mysql = "Select 2007 AS TEST,部署名,RNK,CD1,F1,社員CODE,氏名,F48,F49,F50,F51,F52,F53,F54,F55 " & _
        "FROM [DATA] WHERE 社員CODE<> 0 ORDER BY TEST,部署名,RNK,CD1,F1,社員CODE ;"

    Worksheets("Sheet1").Range("B8:N1010").ClearContents
   
    If get_exec_sql(mysql, rs) = 0 Then
     With Worksheets("Sheet1")
      '.Cells.ClearContents
      'データ開始位置
      .Range("B6").CopyFromRecordset rs
      For idx = 0 To rs.fields.Count - 1
        Debug.Print idx
      'フィールド
       .Cells(5, idx + 2).Value = rs.fields(idx).Name
       
       Next
      End With
     Call rs_close(rs)
    Else
    MsgBox "rs error"
     End If
    Call close_ado
  Else
    MsgBox "cn error"
    End If
End Sub

'=========================================================
Public cn As Object
'=========================================================
Function open_ado_excel(book_fullname As String) As Long
  On Error Resume Next
  link_opt = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & book_fullname & ";" & _
       "Extended Properties=Excel 8.0;"
  Set cn = CreateObject("ADODB.Connection")
  cn.Open link_opt
  open_ado_excel = Err.Number
  On Error GoTo 0
End Function
'=========================================================
Sub close_ado()
  On Error Resume Next
  cn.Close
  On Error GoTo 0
End Sub
'=========================================================
Function get_exec_sql(sql_str, rs As Object) As Long
  On Error Resume Next
  Set rs = cn.Execute(sql_str)
  get_exec_sql = Err.Number
  On Error GoTo 0
End Function
'=========================================================
Sub rs_close(rs As Object)
  On Error Resume Next
  rs.Close
  On Error GoTo 0
End Sub

【50710】Re:SQLの質問
回答  neptune  - 07/8/11(土) 17:36 -

引用なし
パスワード
   ▼KENG さん:
こんにちは

>フィールド名の変更時、
>select 2007 as test,部署、氏名、年齢 from [DATA]としていますが、
>エラーになります。
取りあえず、本来「,」である所を「、」と書いています。

>なぜかご存知の方おしえていただけませんでしょうか?
まぁこれは書き間違いでしょうが、シート名が「DATA」の場合、`DATA$`
と書くのが、以前はMSでの書き方でした。今は知りませんが。

私の検証では、
mysql = "SELECT 受注コード AS JCode,得意先 FROM [Sheet1];"
ではエラーになり
mysql = "SELECT 受注コード AS JCode,得意先 FROM `Sheet1$`;"
では、正常の処理されました。

>また、エクセルのSQLリファレンス(JETだと思いますが。。。現在、ACCESS97
>です。)
>でTransformの使い方など乗っているサイト、説明があればおしえていただけませんでしょうか?
>
エクセルのSQLリファレンスはありませんが、JetSQLなら
「SQL Transform」 でweb検索するとAccessのものが沢山ヒットします。

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