2011-12-01 113 views
0

我有這個VBA下面,是設計循環通過每個WS,並插入每個數據集的前4行。。細胞VBA參考問題

這可以很好地與一個,但只能讓我指定一張,而不是通過他們所有。我帶走了,並得到「無效或不合格的參考」。在此之後,我添加了ActiveSheet。到「細胞」方法。

現在我得到下面這個錯誤:

「ODBC驅動程序不支持請求的屬性」

我怎麼有資格.Cells現在?還是有其他選擇嗎?我使用Excel 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你對'WS'而不是ActiveSheet.Cells正確,但會導致'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中是受限制的,如果這就是你控制值的含義。 基於我從微軟收集的信息,.Cells本身不能在with語句之外工作。我可以用什麼方法來引用它? 感謝您的幫助。 – JoshG

+0

謝謝,我會看看這種方法。 – JoshG

+0

我的意思是控制電子表格的值是你可以確保一個單元格不包含');刪除表格工作流指標; - ' –