Код выполняется даже тогда, когда новая строка не была добавлена ​​в таблицу - Excel VBA - PullRequest
0 голосов
/ 07 мая 2018

Мой код должен быть простой проверкой длины таблицы.
Если длина таблицы увеличивается, запускается макрос.
К сожалению, он запускается, когда я изменяю какие-либо данные в существующей записи. Но это происходит только один раз!
Это происходит, когда я сначала открываю книгу, а затем пытаюсь что-то изменить в книге.После чего он запускается как должен, только когда вы добавили новую запись.Sub находится на рабочем листе, который содержит статическую ячейку A1.Это проблема макроса.Кажется, он ведет себя так, как будто есть разница между количеством строк и статическим диапазоном.Но опять же, только при первом открытии рабочей книги!

Private Sub Worksheet_Calculate()


    Dim n As Long

    n = GetTableSize()
    If n > LastRowNumber Then NewDatabaseEntry
    ' Always set LastRowNumber so that even after entries are deleted (n < NumRows),
    ' adding new entries will work correctly.
    LastRowNumber = n

End Sub

Поддержка макроса в отдельном модуле:

Option Explicit

Public LastRowNumber As Long
'This will be used to monitor the number of rows in the
'Projects worksheet. This will then be compared to the
'Value of the formula in the TableSize worksheet.
'The value in TableSize will have a variable 'n'.
Public Function GetTableSize() As Long

  GetTableSize = Worksheets("TableSize").Range("A1").Value2
End Function

Эта подпрограмма находится на рабочем листе, где находится отслеживаемая таблица:

Private Sub Workbook_Open()

  LastRowNumber = GetTableSize()
End Sub

NewDatabaseEntry - это модуль, который предупредил меня о том, что возникла проблема, поскольку он показывает всплывающее окно перед запуском.В противном случае, я бы не знал о существовании проблемы в первую очередь.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 мая 2018

Если ваша подпрограмма Workbook_Open находится в модуле листа, она не вызывается при открытии рабочей книги. Ваша переменная LastRowNumber по умолчанию имеет значение ноль - 0. Затем, когда вы вносите какие-либо изменения в данные, начиная с n > 0, он вызывает NewDatabaseEntry. После первого раза переменная LastRowNumber имеет значение, которое должно иметь, и все работает как положено (если я правильно понял ваше объяснение).

Вместо этого в модуле рабочей книги должен быть вложенный элемент Workbook_Open - ThisWorkbook. Код события должен быть в ожидаемом месте для правильного вызова.


(я чуть не добавил это как комментарий, потом понял, что это, вероятно, причина проблемы ...)

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