У меня есть две таблицы, одна называется база данных, а другая - карта проекта.

Вся информация для каждого проекта находится в одной строке на листе базы данных, идентифицируемой конкретным номером проекта. Лист Project Card содержит всю информацию для отдельного проекта, указанного пользователем. Пользователь вводит номер проекта, и информация, относящаяся к этому проекту, представляется с помощью Vlookup.

Моя проблема в том, что пользователю иногда нужно добавить заметку для конкретного проекта на листе «Карточка проекта», и я хочу, чтобы эта заметка также была указана на листе базы данных.

Например: пользователь вводит 304 (номер проекта) на листе «Карточка проекта» и, прочитав подробности, добавляет заметку о проекте 304. Я хотел бы, чтобы это примечание было перенесено на лист базы данных в строке для проекта № 304.

1 ответ1

0

Поскольку примечания, введенные на листе карты проекта, являются только временными, вам придется использовать VBA для этого. И это немного сложно, потому что вы хотите сохранить заметку на листе базы данных даже после того, как заметка на карточке проекта исчезнет.

Для этого вам понадобится столбец "Примечания" на листе "Карточка проекта", заполненный VLOOKUP(), и другой столбец, например "Новая заметка", где пользователь может ввести или изменить существующую заметку.

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

Эта подпрограмма отслеживает любые изменения в столбце «Новая заметка» на листе «Карточка проекта» и копирует измененную ячейку в правильную строку номера проекта на листе «База данных».

Private Sub Worksheet_Change(ByVal Target As Range)

    'Setup variables
    'KeyCells contains the cells that will trigger the action when changed.
    Dim KeyCells As Range
    Dim ProjectNum As Integer
    Dim DBProjectCell As Range

    Set KeyCells = Range("E2:E8")   'Change "E2:E8" to your Project Card column where user enters a New Note.
    ProjectNum = Range("A2").Value  'Change "A2" to your Project Card cell containing the Project Number.

    'Check to see if anything changed in the New Note column
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then   
        'Don't delete an existing Note when the Target goes blank
        If Target.Value <> "" Then
           'Get the Database worksheet cell containing this project number
           'Change "A11:A21 to the Database column containing the project numbers
           Set DBProjectCell = Worksheets("Database").Range("A11:A21").Find(What:=ProjectNum)

           'Copy the new Note to the Database sheet.
           'Change "J" to the Database column where the Notes will go:
           Worksheets("Database").Range("J" & DBProjectCell.Row).Value = Target.Value
        End If
    End If

End Sub

Надеюсь это поможет. Если вы новичок в VBA, следуйте инструкциям на этой странице справки, чтобы скопировать код Excel VBA в: Модуль рабочего листа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .