Страницы: 1
RSS
Не сравнивает или не присваивает значение в ячейку, Не сравнивает или не присваивает значение в ячейку
 
Есть два листа, которые оба связаны через стобцы табельного номера. Есть макрос, по нажатию на кнопку  -если табельный номер листа1 совпал с табномером листа2, то присваивает значение в ячейку листа1...но почему то , некоторые ячейки остаются пустыми хотя табельный этот есть  и ва листе1 и в листе2. Тип данных ячейки совпадает..может что в коде не так?

Код
Sub ЗаполняемПрофессияИДолжность()
AllRecs = Application.WorksheetFunction.CountA(Sheets("выходная форма 2 ").Range("C:C"))
cAllRecs = Application.WorksheetFunction.CountA(Sheets("оперзапрос на 19.07.22").Range("A:A"))
    For CurRec = 2 To cAllRecs
    AllCrit = Sheets("оперзапрос на 19.07.22").Cells(CurRec, 1)

        For cRecs = 10 To AllRecs
            CheckKrit = Sheets("выходная форма 2 ").Cells(cRecs, 3)
            If CheckKrit = AllCrit Then
            Sheets("выходная форма 2 ").Cells(cRecs, 4) = Sheets("оперзапрос на 19.07.22").Cells(CurRec, 5)
            Sheets("выходная форма 2 ").Cells(cRecs, 5) = Sheets("оперзапрос на 19.07.22").Cells(CurRec, 3)
            End If
        Next cRecs
    Next CurRec




End Sub
 
масло масляное, файл
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Тип данных ячейки совпадает
ну одним типом нельзя оперировать :) А что со значениями? Пробелы, переносы, иные невидимые символы? Регистр, в конце концов.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, ещё, возможно, просто число<>"число"
А в целом, конечно, на словарях в сотни и тысячи раз быстрее будет и кода меньше
Изменено: Jack Famous - 31.08.2022 14:02:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А если перед сравнением у ячеек, которые сравниваются, убрать лишние пробелы.. Как такое сделать?  
 
масло масляное, приложите файл, в котором идёт не так и получите нормальный ответ…
Вы сейчас всё свалите в одну кучу.
Изменено: Jack Famous - 31.08.2022 14:27:30
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
DEL
Изменено: МатросНаЗебре - 31.08.2022 14:39:50
 
Там по середине в двух этих листах строки лежат...посмотри плиз внимательно(
 
кстати Trim не помог...скрипт vba находится в кнопке  - Заполнить "профессия и должность"
 
Цитата
Trim не помог
WorksheetFunction.Trim
 
Дело не в данных, а в циклах похоже
 
Цитата
масло масляное написал:
Там по середине в двух этих листах строки лежат...посмотри плиз внимательно(
Так строи все лежат. А столбцы стоят.
Но одно не понятно, зачем сюда пустой файл выкладывать?
 
RAN, есть там данные они в середине листов
 
Цитата
Дело не в данных, а в циклах похоже
Используйте Option Explicit и посмотрите какие переменные не определены
 
Вы всерьёз считаете, что кому-то интересно искать грязное пятнышко на вашей чистой простыне?
 
масло масляное,
Пробуйте
Удалите автора из свойств, если не хотите разглашать (я удалил в этом файле).
Изменено: Jack Famous - 31.08.2022 16:12:57 (Забыл про вывод на лист))))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
скрипт vba находится
при исходных данных, которые Вы приложили, Ваш скрипт вообще нерабочий, т.к. даже первая строка с данными(на обоих листах) расположена гораздо ниже, чем определено Вашим кодом. Но даже если исправить этот момент - у меня все находится без проблем в приложенном файле. Обе строки из обоих листов идентичны.
Код я изменил следующим образом:
Код
Sub ЗаполняемПрофессияИДолжность()

    With Sheets("выходная форма 2 ")
        AllRecs = .Cells(.Rows.Count, 3).End(xlUp).Row
    End With
    With Sheets("оперзапрос на 19.07.22")
        cAllRecs = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With
    For CurRec = 2 To cAllRecs
        AllCrit = WorksheetFunction.Trim(Sheets("оперзапрос на 19.07.22").Cells(CurRec, 1))
        If Len(AllCrit) Then
            For cRecs = 10 To AllRecs
                CheckKrit = WorksheetFunction.Trim(Sheets("выходная форма 2 ").Cells(cRecs, 3))
                If Len(CheckKrit) Then
                    If CheckKrit = WorksheetFunction.Trim(AllCrit) Then
                        Sheets("выходная форма 2 ").Cells(cRecs, 4) = Sheets("оперзапрос на 19.07.22").Cells(CurRec, 5)
                        Sheets("выходная форма 2 ").Cells(cRecs, 5) = Sheets("оперзапрос на 19.07.22").Cells(CurRec, 3)
                    End If
                End If
            Next cRecs
        End If
    Next CurRec
    MsgBox ("Заполнение закончилось!")
End Sub
это не оптимально ни по скорости, ни по части выполнения, ни по части написания кода вообще. Но старался внести минимум правок, чтобы у Вас хоть какое-то понимание возникло.
.Cells(.Rows.Count, 3).End(xlUp).Row - это определение последней заполненной строки в конкретном столбце. При этом даже если в этом столбце будут внутри пустые ячейки - последняя будет определена корректно. Если, конечно, нижние строки не скрыты фильтром или через меню. Подробнее: Как определить последнюю ячейку на листе через VBA?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Код действительно рабочий! Спасибо! теперь заполняет)
Страницы: 1
Наверх