Делать пока L oop с условным копированием / вставкой - Excel VBA - Код не работает - PullRequest
0 голосов
/ 29 апреля 2020

У меня сложный набор требований, и я пытаюсь разработать соответствующий фрагмент кода Excel VBA. Я новичок, поэтому любые советы по этому вопросу будут высоко оценены.

КОНТЕКСТ: на листе «Компания А» перечислены Департамент, шкала заработной платы и название должности (столбцы А- C). В листе «Компания B» перечислены все вышеперечисленные для их заданий, но также в столбцах D и E указано, соответствует ли каждое задание заданию компании A (столбец D), и если да, то для какого задания (столбец E), или нет ли совпадения, и тогда ячейка столбца E пуста.

AIM: я хочу сопоставить задания в компании B с работами в компании A и скопировать / вставить эти совпадающие задания компании B на лист "Company A" в виде ссылок в столбцах DF, но есть ПРОБЛЕМА!

ПРОБЛЕМА: В каждой компании есть несколько вакансий с одинаковым списком должностей Department-Pay Grade-Job, и эти цифры не совпадают в разных компаниях, например, в компании A есть 4 вакансии, а в компании B - только 3. Я хотел бы, чтобы мой код знал, чтобы копировать задания компании B только три раза и оставить четвертый ряд пустым (чтобы визуально указать три совпадающих задания и четвертое без совпадения). Чтобы добиться этого, у меня есть количество рабочих мест с одинаковым уровнем оплаты труда в каждом отделе в каждой компании, и я хочу использовать эти числа в качестве счетчиков для моего дела «Пока я» l oop.

Код, который я написал:

 Private Sub CommandButton6_Click()

    Dim counter As Integer
    Dim myNum As Integer

    a = Worksheets("COMPANYB").Range("A" & Rows.Count).End(xlUp).Row
    Worksheets("JobNumbers").Range("D:D").Value = counter
    Worksheets("JobNumbers").Range("C:C").Value = myNum

    Do While counter < myNum
        For i = 2 To a
            If Worksheets("COMPANYB").Range("D" & i).Value = "Match" And _
            Worksheets("COMAPNYB").Range("E" & i).Value = Worksheets("COMPANYA").Range("C" & i).Value Then
            Worksheets("COMPANYB").Range("A" & i & ":C" & i).Copy
            Worksheets("COMPANYA").Activate
            b = Worksheets("COMPANYA").Range("D" & Rows.Count).End(xlUp).Offset(0, 3).Row
            Worksheets("COMPANYA").Range("D" & b + 1).Select
            ActiveSheet.Paste Link:=True
        End If
        Next i
        counter = counter + 1
        myNum = myNum - 1
    Loop
End Sub

... но вместо того, чтобы работать, он просто помещает все 0 на моем листе "JobNumbers" в столбцы, откуда я хочу, чтобы он взял мой счетчик и myNum, чтобы установить тест для Do Пока l oop. Как вы можете видеть, я даже не дошёл до того, что «хочу оставить пустыми строки при копировании», что я хочу сделать, потому что я зациклен на этом. Я также начинаю задаваться вопросом, не жду ли я слишком многого от VBA ...

Я понимаю, что это много текста, и я прошу прощения - я был бы признателен за любые отзывы / помощь, спасибо !

1 Ответ

0 голосов
/ 29 апреля 2020

= является оператором присваивания. Причина, по которой он записывает «0» в каждую ячейку столбца, заключается в том, что Worksheets("JobNumbers").Range("D:D").Value относится к каждой ячейке во всем столбце D. Затем вы присвоили = вашу переменную counter всем этим ячейкам, написав Worksheets("JobNumbers").Range("D:D").Value = counter

Кроме того, вы определили counter как целое число, но не присвоили ему = значение, поэтому оно началось пустым и не изменилось. И пустое целое число, присвоенное значению ячейки, оставит эту ячейку в 0.

...