2014-12-23 245 views
0

我一直在努力與此一段時間沒有成功。我編寫了一個代碼來從數據庫導入一些數據,並增加了他們有不同格式的問題。所以我寫了一個部分,其將經過其他基地,並把數據傳回正確的順序(即不是整個代碼,我已經做了所有正確的一組語句的對象。):VBA運行時錯誤91「對象變量或塊變量未設置」

Dim wb_atual, wb_verificar As Workbook 
Dim sheet_atual, sheet_verificar As Worksheet 
Dim choice, lin_max, lin_b_max, col, col_id, col_max, i, j, k As Integer 
Dim is_equal As Boolean 

     For i = 1 To col_max 
      col = wb_verificar.Sheets(sheet_verificar.Name).Range("1:1").Find(wb_atual.Sheets(sheet_atual.Name).Cells(2, i).Value, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns, searchdirection:=xlNext).Column 
      sheet_atual.Cells(j, i).Value = sheet_verificar.Range(sheet_verificar.Cells(j - 1, col), sheet_verificar.Cells(j - 1, col)).Value 
      lin_b_max = lin_b_max + 1 
     Next i  

也就是說導致錯誤的塊,特別是「col」變量行。該行的功能是從另一個工作表中查找列標題,並存儲該列的編號。 該循環適用於i = 1和2,但在第三次迭代時出現錯誤。

預先感謝任何幫助

+0

我假設,這不是所有的代碼和某處有工作簿和工作表對象的「設置」語句。該錯誤消息將指出這些對象中的一個未被「設置」的事實。所以它看起來像是缺少一個set語句,或者「set」失敗,因爲你試圖分配給它的對象不存在,儘管如果是這樣的話,我會預期它會在set語句本身中出錯。完整的代碼是否需要大量發佈,您是否可以確認Set語句發生的位置,是否還有其他可能影響它們的相關邏輯? –

+0

是的,完整的代碼確實有點長。但是,所有的工作簿和工作表變量都已經在之前設置好了,這可以通過前兩次迭代的循環工作證實。其餘的代碼是非常模塊化的,沒有什麼影響這個循環。由於循環之間發生錯誤,所有其他變量都是常量。 –

+0

你應該嘗試隔離你的問題,併產生一個最小的工作示例。發佈代碼片段,不重現錯誤通常不會吸引很多人協助解決您的問題。根據您提供的信息,最好的猜測是您缺少'set'關鍵字,在代碼* unseen *中的某處,或者您的'Find'語句沒有找到您要求的內容。 –

回答

0

問題出在.find方法。我無法弄清楚爲什麼它失敗了,因爲工作表函數vlookup和匹配在該單元格上工作正常。我通過編寫一個基本的自定義搜索功能找到「col」來解決這個問題。另一種方法是使用application.worksheetfunction.match 方法,但它比自定義函數慢,這在給定初始數據庫大小的情況下會產生顯着差異。

0

需要設置wb_verificar昏暗聲明和使用對象的任何語句之間的值。

可能存在其他錯誤。

相關問題