Excel VBA - Для / Если вставить несколько примеров, соответствующих ключевому слову, в одну ячейку, разделенную запятыми - PullRequest
1 голос
/ 18 июня 2020

Я работаю над созданием «Библиотеки доказательств» для своей работы. Он состоит из книги с двумя листами: «Определения», который включает столбец B для термина, столбец C для определения и столбец D для соответствующих примеров. Столбец D Я пытаюсь заполнить сценарий VBA для каждого указанного c термина.

Для этого я попытался написать сценарий, который считывает столбец «Ключевые слова» (столбец I) моего второго листа , «Библиотека вещественных доказательств». Когда он находит соответствие по ключевому слову, которое я ищу, он копирует гиперссылку на рассматриваемое свидетельство (в столбце B).

Мне удалось написать базовый c скрипт, который до некоторой степени достигает этого. Моя проблема двоякая: во-первых, сценарий перезапишет предыдущие примеры гиперссылок при прохождении l oop и вставке, поэтому будет отображаться только последнее возвращенное значение, и два: столбец ключевых слов имеет несколько записей, и я не уверен как заставить код понимать, что ключевые слова в ячейках для каждой записи разделяются точкой с запятой (";") - это работает только тогда, когда рассматриваемое ключевое слово является единственным присутствующим в ячейке.

Я чувствую, что мне нужно, чтобы код сохранял гиперссылки в массиве, разделенном запятыми, и вставлял только в конец l oop после того, как все они были сохранены, но я не уверен, как лучше всего достичь это потому, что у меня очень элементарное понимание кодирования.

Для справки, вот что у меня сейчас:

    Private Sub CommandButton1_Click()

a = Worksheets("Evidence Library").Cells(Rows.Count, 1).End(xlUp).Row

For i = 4 To a

    If Worksheets("Evidence Library").Cells(i, 9).Value = "Keyword" Then

        Worksheets("Evidence Library").Cells(i, 2).Copy
        Worksheets("Definitions").Activate
        ActiveSheet.Range("D4").Select
        ActiveSheet.Paste
        Worksheets("Evidence Library").Activate

    End If

Next

Application.CutCopyMode = False

End Sub
...