2014-11-08 5 views
0

У меня есть цикл For, который выполняет итерацию по каждой строке, мне нужно вывести значение из столбца D для каждой строки, которая будет использоваться в цикле.Ошибка несоответствия типа # 13

Я пытался использовать следующее, чтобы вытащить значение, используя значение счетчика в качестве номера строки.

X = Worksheets("Test").Cells(4, Counter).Value 

Я постоянно сталкиваясь с Type mismatch error #13

+0

Д столбца и номер строки счетчиком клетки (счетчик, D) –

ответ

2

Эти два сценария, я могу думать о том, когда вы получите эту ошибку

A Вы определили X в качестве конкретного типа данных, но назначая разные типа к нему. Например. Вы определили X как Long, но ячейка содержит String. Предположим, что ваша ячейка A1, и она имеет excelSU. Для того, чтобы повторить ошибки см этого примера

Sub Sample() 
    Dim x As Long 
    x = ThisWorkbook.Sheets("Sheet1").Range("A1").Value 
End Sub 

Точно так же вы могли бы объявленная Counter определенного типа, но с использованием в качестве других. Например

Sub Sample() 
    Dim counter As Excel.Application 

    For counter = 1 To 20 
     x = ThisWorkbook.Sheets("Sheet1").Range("A" & counter).Value 
    Next 
End Sub 

B Давайте снова рассмотрим пример клетки A1. У вашей ячейки есть ошибка формулы, например #N/A или #DIV/0! или какая-либо другая ошибка. Для того, чтобы повторить ошибки используют тот же самый код, что и выше, и вы получите Type Mismatch Error

РЕДАКТИРОВАНИЕ

, используя значение счетчика, как номер строки

BTV, Counter является не используется как , а как Column. Синтаксис: Cells(Row,Column)

0

Возможно, вы потянете строки в массив Integer или что-то подобное.

Что касается вашего для цикла: I just answered someone's question on a somewhat similar problems.

Я предлагаю идти по полнофункциональному примеру кода я дал ему.

А именно потому, что:

  1. Вы используете жестко закодированные значения (4rth столбцов). В конечном итоге вы столкнетесь с проблемами обслуживания. Пользователь, который добавляет столбец, легко испортит ваш код.

  2. Ваш код не будет говорить сам за себя. Если вы замените ваши закодированные значения на правильно названные переменные, они будут.

ПРИМЕЧАНИЕ. Это может быть более трудоемким для процессора из-за количества пересечений. Вы всегда можете приспособить свою стратегию, если когда-нибудь придумаете таблицы с более чем 10 000 строк.

Проверьте ссылку и ответ, но пока вот короткая версия о том, как я хотел бы сделать это с таблицами/ListObjects:

dim listO as ListObject 
set listO = Worksheets("Test").ListObjects(1) 

dim listC as ListColumn 
set listC = ListO.ListColumns("ColumnTitle") 

dim listR as ListRow 
dim anArrayX() as Variant 
ReDim anArrayX (1 to listO.ListRows.Count) 
dim intersectedRange as Range 
for i = 1 to listO.ListRows.count 
    set rowRange = ListO.ListRows(i).Range 
    set intersectedRange = Application.Intersect(rowRange, listC.Range) 
    anArrayX(i) = intersectedRange.Value 
    Debug.Print anArrayX(i) 
next i 
Смежные вопросы