我有點被這個任務困住了。我有一個宏,它可以從兩個不同的工作簿中檢索兩個數據範圍,並將它們填充到兩個Variant中。收集是成功的,因爲我可以在本地窗口調試和檢查它們,一個是data1(變體1到79)和其他數據2(變體1到10)。這是我如何得到數據1錯誤1004無法從WorksheetFunction獲取索引屬性
With wbExterno.Sheets(1)
data1 = .Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
End With
現在我想從數據1相關的元素複製到一個新的數組,命名爲Dim newData as Variant
。我已經checkedin SO這件事,這是我得到
Dim filterCount As Integer
counter = 0
filterCount = 1
' Para cada elemento en el array...
For i = 1 To UBound(data1)
'Comparar el campo fecha...
tmpTest = data1(i, 1)
' ...con la fecha del ejercicio
If (comparacionActual.FechaEjercicio = tmpTest) Then
'MsgBox "iguales!"
'se crea un array filtrado con los elementos pertinentes
filter1(filterCount) = Application.WorksheetFunction.Index(data1, 0, i)
PlusOne filterCount 'this is a custom function that increments in 1
End If
Next
' se informa el resultado del filtrado
MsgBox "Copied: " & filterCount & " rows."
它提出了一個錯誤1004無法從worksheetfunction獲得索引屬性。我在這裏做錯了什麼?我應該過濾輸入到data1嗎?這樣更簡單嗎?更快?
編輯:我試過的方法,以相同的數據(沒有VBA),它僅與翻譯方法名(=指數()在西班牙語中是=工作指數之工作表() )。除此之外,它的工作。但是,嘗試將data1設置爲範圍和變體,並且...它不起作用。 另外,我具有斷點檢查和DATA1是一個變量/變體(78),並且每個元件(DATA1(I))是包含每一行
編輯2一個Variant(1至8):後在回答提出一個測試,我嘗試了更多的老派做法:
With wbInterno.Sheets(1)
data1 = .Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
filter1 = wbMe.Worksheets.Add.Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
End With
'... some other stuff
' Field by field
For j = LBound(data1, 2) To UBound(data1, 2)
'MsgBox "check" & data1(i, j)
filter1(filterCount, j) = data1(i, j)
Next
,它實際上由字段設置字段,行,我需要新的陣列英寸我不會回答這個問題。也許我們可以找到更好的方法。
解決方案我到底使用的代碼,這是一個:
' Define array with a range. Initialize destination array with the same size.
data1 = .Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
filter1 = wbMe.Sheets("tmp").Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
...更多的代碼本不相關的,然後
Dim tmpTest As Variant
Dim filterCount As Integer
filterCount = 1
' integer used for presentation only
conteoRegistros = 0
' for each element in array...
For i = 1 To UBound(data1)
'Compare a certain field...
tmpTest = data1(i, 1)
' ...with some other variable. If so...
If (comparacionActual.FechaEjercicio = tmpTest) Then
'...copy column by column into new
For j = LBound(data1, 2) To UBound(data1, 2)
'MsgBox "check" & data1(i, j)
filter1(filterCount, j) = data1(i, j)
Next
PlusOne filterCount
PlusOne conteoRegistros
End If
Next
那麼你的變量filter1的尺寸爲? – Jon49 2011-12-16 20:17:49
我將filter1設置爲Variant()。我應該給它維嗎?像設置一個範圍一樣大但空白? – Alfabravo 2011-12-16 20:19:18
當然,上面的索引的第一個參數應該是一個數組(範圍),但data1是您定義的值。請參閱http://msdn.microsoft.com/en-us/library/ff197581.aspx – Fionnuala 2011-12-16 20:37:42