EXCEL VBA에서 워크시트에 CREATE TABLE(ADO)

4329 단어 VBA

거동



・커넥션은 보통으로
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Execute "Provider=Microsoft.ACE.OLEDB.12.0;" & _
               "Data Source=[fullpath];" & _
               "Extended Properties=""Excel 12.0;HDR=Yes;"""

· 존재하지 않는 시트에 테이블을 작성할 수 없다 (시트는 자동 삽입되지 않는다. 뒤에 $ 를 붙여도 동일)
'「オブジェクト 'Sheet2' が見つかりませんでした...」エラーが返る
    cn.Execute "CREATE TABLE [Sheet2] (fieldname datatype)"   

・존재하는 시트에서도, 뒤에 $ 를 붙이지 않으면 시트로서 인식하지 않는다
'「オブジェクト 'Sheet1' が見つかりませんでした...」エラーが返る
    cn.Execute "CREATE TABLE [Sheet1] (fieldname datatype)" 

· 시트 이름에 $를 붙인 경우에만 A1 셀에서 필드가 생성됩니다.
    cn.Execute "CREATE TABLE [Sheet1$] (test LONG)"



· 신규 시트의 경우 SQL 문에서 필드를 하나만 정의 할 수 있습니다.
'「定義されているフィールドが多過ぎます」エラーが返る
    cn.Execute "CREATE TABLE [Sheet1$] (foo LONG, bar VARCHAR)"

· 이것은 $ 다음에 범위를 지정해도 피할 수 없습니다.
'やはり「定義されているフィールドが多過ぎます」エラーが返る
    cn.Execute "CREATE TABLE [Sheet1$A1:B1] (foo LONG, bar VARCHAR)"

・필드명을 시트에 미리 입력해 두면, SQL문으로 복수 필드를 정의해도 통과한다

'通る
    cn.Execute "CREATE TABLE [Sheet1$A1:C1] (foo LONG, bar VARCHAR, hoge DATETIME)"

· 필드 이름을 미리 입력하면 테이블의 위치는 자유
'通る
    cn.Execute "CREATE TABLE [Sheet1$C5:D5] (poyo LONG, peyo VARCHAR)"



・일단 정의된 필드 영역은 기억되어 모든 영역의 「상하의 끝」과 「좌우의 끝」을 포함한 레인지 모든 범위(위의 예에서는 A1:D5)로, 필드명의 사전 입력 없이 SQL문으로부터 필드 정의할 수 있게 된다(라고 하는지, 정의할 수 있어 버리기 때문에 혼란한다)
'通る
    cn.Execute "CREATE TABLE [Sheet1$B3:D3] (a LONG, b VARCHAR, c VARCHAR)"

보충


  • SQL문에 기술하는 시트의 string는, 시트의 오브젝트명이 아니고 Name 프로퍼티.
  • 위의 예에서는 모두 레인지를 1행(=필드명의 행만)으로 했지만, 레코드 영역을 상정한 복수행을 설정하는 것도 가능. 다만, 그 경우에도, 기억되는 영역(정확하게는, 기억되는 영역의 기준점이 될 수 있는 셀 범위)은 필드명의 셀만.
  • 기억되는 것은 UsedRange 적인 사각형 영역이지만, 워크시트상의 입력을 클리어해도 영역이 바뀌지는 않는다.
  • Microsoft Office Professional 2016 Excel 버전 2006에서 작동합니다.
  • 좋은 웹페이지 즐겨찾기