Как найти в рабочей книге значение, чтобы определить, следует ли обновлять страницу - PullRequest
0 голосов
/ 22 октября 2019

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

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

Я уже пытался использовать статические / жестко запрограммированные операторы If для проверки значений, используемых в записях. Однако, когда я пытаюсь обновить проекты, которые находятся в одном отчете, но не в другом, я получаю сообщение об ошибке.

Dim aa As Worksheet
Set aa = ThisWorkbook.Sheets("Project Log")
Dim x As Long

If Me.proj_stat_combo.Value = "OPEN PROJECTS (No Current Open SLA)" Then
 y = Application.Match(VBA.CLng(Me.srnew_combo.Value), ak.Range("C:C"), 0)

    aa.Range("B" & xx).Value = Me.fd_reqnum_txt.Value
    aa.Range("C" & xx).Value = Me.srnew_combo.Value
    aa.Range("D" & xx).Value = Me.projdes_txt.Value
    aa.Range("E" & xx).Value = Me.fd_contact_combo.Value
    aa.Range("F" & xx).Value = Me.targetstart.Value
    aa.Range("G" & xx).Value = Me.target_impdate_txt.Value
    aa.Range("H" & xx).Value = Me.load_txt.Value
    aa.Range("I" & xx).Value = Me.irc.Value
    aa.Range("J" & xx).Value = Me.busdays.Value
    aa.Range("K" & xx).Value = Me.priorcomment.Value

End If

Я надеюсь, что следующее:

  1. Обновление окна VBA новой информацией о проекте
  2. Когда я нажимаю кнопку обновления, код будет искать каждый отчетрабочая книга для идентификатора
  3. Если идентификатор найден, соответствующая запись обновляется
  4. Если идентификатор не найден, «Оператор If» будет нажимать код для поиска следующего отчета и повторяться добольше нет отчетов для поиска идентификатора

1 Ответ

0 голосов
/ 22 октября 2019

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

Вы можете только обновлять / извлекать информацию из Журнала проекта. Если данные существуют на другом листе;вы ошибетесь. Похоже, что сначала вам нужно выполнить поиск по всей книге и всем листам;и в зависимости от того, где вы находите информацию, динамически «захватывает» этот лист.

В данный момент вы смотрите на 1 статический лист. Это твое намерение?

Я написал пример ниже. У меня есть 2 рабочих листа (Sheet1, Sheet2). Sheet1 не имеет заголовков. В первой колонке есть имена, во второй - то, что им нравится. Sheet2 аналогичен без заголовков, но в столбце 1 - цвета, в столбце 2 - объекты (грузовик, автомобиль и т. Д.).

Public Sub main()
Dim bk As Workbook
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim size As Long
Dim counter As Long
Dim counter2 As Long
Dim find As String
Dim found As String

Dim shtName(1) As String
size = 3
shtName(0) = "Sheet1"
shtName(1) = "Sheet2"

Set bk = ThisWorkbook

find = "John"

For counter2 = 0 To 1

    For counter = 1 To size
        If bk.Sheets(shtName(counter2)).Cells(counter, 1).Value2 = find Then
            found = bk.Sheets(shtName(counter2)).Cells(1, 2).Value2
        End If
    Next counter
Next counter2



End Sub

Есть много способов сделать это, в зависимости от ваших знаний VBA. Я создал массив строк из 2 элементов и сохранил имена моих рабочих листов. Затем я просмотрел эти таблицы и каждую строку столбца 1 этих таблиц.

Этот код с моей настройкой делает found = Jazz.

Это должно помочь вам начать динамический поиск таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...