2012-02-26 4 views
6

Я немного смущен клеткой и диапазоном в vba (excel). Логично, я мог бы думать, что ячейка как диапазон с размером = 1; и я думаю, что легко сделать диапазон из ячейки.Excel vba: диапазон типов и ячейка

Если я прочитал api свойства EntireRow here , он работает в диапазоне. Но, приведенная ниже код работа, указывающая «cell'variable внутри цикла является диапазоном

Set import = Sheets("import") 
    Set spRange = import.Range("A2") 
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.EntireRow 
    Next cell 

В то же время, следующий код возвращает ошибку, указывающую, когда несоответствие типов вызовите removecell функции. Каким должен быть тип targetCell в определении функции?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell (cell) 
Next cell 


Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Вы правы. Ячейка - это диапазон с 1 элементом. Является ли 'val', типа' Boolean'? – shahkalpesh

+0

да. этот метод ранее работал, когда я передавал «cell.Text» и принимал его в методе remove cellVal As String. Теперь я пытаюсь передать ячейку (диапазон), передавая ячейку вместо cell.Text – bsr

ответ

4

компилируется и работает:

Sub Tester() 
Dim spRange As Excel.Range 
Dim cell As Excel.Range 
Dim mySheet As Excel.Worksheet 
Dim val As Boolean 

Set mySheet = ActiveSheet 
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell(cell) 
Next cell 

End Sub 

Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Спасибо. «Dim cell As Excel.Range» дал мне ключ, потому что я раньше не декларировал ячейку. Как я уже упоминал, я просто преобразовал метод, и ранее мне не нужно явно объявлять ядро. Ошибка, которую я получил, немного вводила в заблуждение. – bsr

+2

Значением по умолчанию для объекта Range является значение, поэтому, если ячейка не объявлена ​​как диапазон, ячейка считалась значением, которое, что достаточно разумно, вызвало «несоответствие типа». Очень хорошая практика объявлять все переменные. Чтобы принудительно это сделать, в VBE выберите «Инструменты»> «Параметры»> «Редактор»> «Требовать переменную». Это добавит Option Explicit в начало всех новых модулей и даст вам ошибку компилятора «Variable not Defined» для незаявленных переменных. Вы также можете просто набрать Option Explicit в верхней части существующих модулей. –

+0

+1 на хорошем совете, чтобы объявить переменные! –

Смежные вопросы