@ti_zh_vrach
Бывший аптекарь.

Почему не работает часть кода?

Добрый день.
Я уже несколько часов не могу найти какую-то простую ошибку в коде. Часть кода просто не работает: данные в ячейки вообще не записываются. Где именно не работает - пометил комментариями.
spoiler

row_abc_end = abc.Cells(Rows.Count, 1).End(xlUp).Row
row_dist_end = district.Cells(Rows.Count, 1).End(xlUp).Row
part_of_path = ThisWorkbook.Path
For row_port = 2 To row_port_end
    If portion.Cells(row_port, 9) <> "обработано" Then
        index = Left(portion.Cells(row_port, 7), 6)
        For row_dist = 2 To row_dist_end
            If index >= district.Cells(row_dist, 3) And index <= district.Cells(row_dist, 4) And district.Cells(row_dist, 5) = "Да" Then
                portion.Cells(row_port, 9) = "обработано"
                archive.Cells(row_arc, 1) = portion.Cells(row_port, 1)
                archive.Cells(row_arc, 2) = portion.Cells(row_port, 2)
                archive.Cells(row_arc, 3) = portion.Cells(row_port, 8)
                archive.Cells(row_arc, 4) = portion.Cells(row_port, 6)
                archive.Cells(row_arc, 8) = Str(Date)
                archive.Cells(row_arc, 9) = "1"
                'здесь код не работает
                For row_abc = 2 To row_abc_end
                    If abc.Cells(row_abc, 1) = district.Cells(row_dist, 6) Then
                        archive.Cells(row_arc, 10) = abc.Cells(row_abc, 2)
                        archive.Cells(row_arc, 11) = abc.Cells(row_abc, 4)
                        archive.Cells(row_arc, 12) = abc.Cells(row_abc, 5)
                        archive.Cells(row_arc, 13) = abc.Cells(row_abc, 6)
                        archive.Cells(row_arc, 14) = abc.Cells(row_abc, 7)
                        archive.Cells(row_arc, 15) = abc.Cells(row_abc, 8)
                        archive.Cells(row_arc, 16) = abc.Cells(row_abc, 9)
                        archive.Cells(row_arc, 17) = Str(abc.Cells(row_abc, 13)) & ", " _
                        & abc.Cells(row_abc, 12)
                        Exit For
                    End If
                Next row_abc
                'здесь снова работает
                'но далее на месте abc.Cells(row_abc, 2) пусто
                If Dir(part_of_path & "\" & abc.Cells(row_abc, 2) & " " & Date & ".xlsx") = "" Then
                    Workbooks.Add
                    ActiveWorkbook.SaveAs Filename:=part_of_path & "\" & abc.Cells(row_abc, 2) & " " & Date & ".xlsx"
                    Call file_formatting
                    ActiveWorkbook.Close SaveChanges:=True
                End If
                Set output_data = Workbooks.Open(Filename:=part_of_path & "\" & abc.Cells(row_abc, 2) & " " & Date & ".xlsx").Sheets(1)
                row_out = output_data.Cells(Rows.Count, 1).End(xlUp).Row + 1
                output_data.Cells(row_out, 1) = archive.Cells(row_arc, 1)
                output_data.Cells(row_out, 2) = archive.Cells(row_arc, 2)
                output_data.Cells(row_out, 3) = archive.Cells(row_arc, 3)
                output_data.Cells(row_out, 4) = archive.Cells(row_arc, 4)
                ActiveWorkbook.Close SaveChanges:=True
                row_arc = row_arc + 1
            End If
        Next row_dist
    End If
Next row_port


Помогите разобраться, в чём дело.

UPD: пошагам выполнил код в проблемном месте. Когда выполняется условие abc.Cells(row_abc, 1) = district.Cells(row_dist, 6) - просто ничего не происходит. Код под If Then не выполняется. Код идёт в Next row_abc. Почему так может быть?
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@ti_zh_vrach Автор вопроса
Бывший аптекарь.
UPD2: Решение найдено. В abc.Cells(row_abc, 1) = district.Cells(row_dist, 6) приходят данные разных типов: string и integer соответственно. В соответствующих ячейках Excel тип данных указан "Текстовый". Почему всё равно приходят разные типы - не знаю. В дебагере сразу не обратил внимания на отсутствие кавычек в district. Использовал Int() в обеих частях равенства (Str() почему-то не помог).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
У вас скорее всего row_abc_end - nothing.
Приучайтесь использовать Option Explicit (плюс строгая типизация) и тогда многие ошибки будут выявляться на более ранних стадиях обработки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы