2011-12-01 2 views
0

각 WS를 반복하고 각 데이터 집합의 상위 4 개 행을 삽입하도록 설계된이 VBA는 아래에 있습니다..Cells VBA 참조 문제

이 코드는 with의 내부에서 잘 작동하지만, 모든 코드를 처리하는 대신 하나의 시트 만 지정할 수 있습니다. 나는 그걸 가지고 나가서 "유효하지 않거나 부적합한 참조"를 얻었다. 이 후 ActiveSheet를 추가했습니다. '세포'방법.

지금 나는 아래이 오류를 받고 있어요 :

어떻게 .Cells 지금 자격 않는

을 "ODBC 드라이버가 요청한 속성을 지원하지 않습니다"? 아니면 대안이 있습니까? 나는 2010 및 mysql을 사용하고 있습니다.

Public Function InsertData() 

Dim rs As ADODB.Recordset 
Dim oConn As ADODB.Connection 
Dim WS As Worksheet 
Dim strsql As String 

Set rs = New ADODB.Recordset 
    Set oConn = New ADODB.Connection 
oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _ 
    "SERVER=server.host.com;" & _ 
    "DATABASE=datatime;" & _ 
    "USER=boulders;" & _ 
    "PASSWORD=rocks;" & _ 
    "Option=3" 


For Each WS In ActiveWorkbook.Worksheets 

    For rowcursor = 4 To 8 
     strsql = "INSERT INTO workflow_metrics (id, code) " & _ 
      "VALUES (" & (ActiveSheet.Cells(rowcursor, 1)) & "," & _ 
      "'" & (ActiveSheet.Cells(rowcursor, 2)) & "')" 

     rs.Open strsql, oConn, adOpenDynamic, adLockOptimistic 

    Next 
Next WS 


End Function 

답변

5

난 당신이 원하는 생각 :

Param1.Value = WS.Cells(rowcursor, 1) 

+0

+1 ActiveSheet.Cells 대신 'WS'가 맞지만 'ODBC 드라이버가 요청한 속성을 지원하지 않습니다.' –

+0

ActiveSheet를 스왑했습니다. . WS를 위해. 그리고 그것은 잘 작동합니다! – JoshG

+0

@ConradFrix, 나는 그것이 ODBC 오류를 고칠 수 있을지 모르겠다. –

1

어떻게 지금 .Cells을 수혜 자격을 얻을 수 있나? 아니면 대안이 있습니까?

이것은 문제가되지 않습니다. 문제는 데이터 수정 쿼리 (INSERT)를 사용하여 레코드 세트 (rs.open)를 여는 것입니다.

DML의 경우 ADODB.Command.Execute을 사용하려고합니다.

또한 스프레드 시트에서 값을 제어 할 수없는 경우 SQL 인젝션 공격까지 실행 중입니다. 대신 매개 변수화 된 쿼리를 사용해야합니다.

Dim Cmd As ADODB.Command 
Set Cmd = New ADODB.Command 
Cmd.ActiveConnection = oConn 
Cmd.CommandText = "INSERT INTO workflow_metrics (id, code) VALUES (?,?)" 

Set Param1 = Cmd.CreateParameter(, adInteger, adParamInput, 5) 
Set Param2 = Cmd.CreateParameter(, adInteger, adParamInput, 5) 


For Each WS In ActiveWorkbook.Worksheets 


    For rowcursor = 4 To 8 
     Param1.Value = WS.Cells(rowcursor, 1) 'As Doug Glancy this should be WS not ActiveSheet' 
     Param2.Value = WS.Cells(rowcursor, 2) 
     cmd1.Execute 
    Next 
Next WS 
+0

는 음, 잘 잠시 동안, 우리는 몇 가지에이 모델을 사용하고 문장과의 큰 내부를 작동 . 데이터 형은 mysql에서 값을 제어한다는 의미라면 제한적이다. Microsoft에서 수집 한 내용을 기반으로 .Cell은 with 문을 사용하지 않고 자체적으로 작동하지 않습니다. 내가 그것을 참조하는 데 사용할 수있는 최선의 방법은 무엇입니까? 도움 주셔서 감사합니다. – JoshG

+0

감사합니다.이 방법을 살펴 보겠습니다. – JoshG

+0

스프레드 시트 값을 제어한다는 것은 셀에'); 드롭 테이블 워크 플로 메트릭. - ' –