Excel / VBA – Пользовательская форма, переписывающая существующие данные
Я написал пользовательскую форму для сотрудников, чтобы вводить данные о конфискованных предметах, распечатывать копии указанной формы и сохранять все введенные данные.
Это хорошо работает уже 2 года, но вселенная теперь предоставила мне больше и лучшего идиота. По-видимому, строки были удалены с листа, чтобы кто-то мог вернуть предметы человеку, не оставив никаких записей.
Теперь – любые данные, вводимые в форму, перезаписывают предыдущие строки. Каждый новый вход перезаписывает другую строку выше (старше). Я использую следующие строки, чтобы найти следующую пустую строку и ввести данные на рабочий лист. Он записывал 5 строк одних и тех же данных, так как следующий код был написан 5 раз подряд.
- Использование VBA для создания формулы, которая изменяется на основе отмеченных галочек
- Отключить VBA UserForm 'x', но все же разрешить Unload Me
- Как выделить содержимое элемента управления TextBox / RefEdit и настроить фокус одновременно?
- Пользователь из кнопки X останавливает код
- Заполнение пользовательской формы записями из текущей строки
Я не вижу, где ошибка – или понять, как удалять строки на листе будет иметь эффект или изменить код в пользовательской форме?
' WRITE DATA TO SPREADSHEET emptyRow = WorksheetFunction.CountA(Range("F:F")) + 1 RowCount = Worksheets("Sheet1").Range("A2").CurrentRegion.Rows.Count With Worksheets("Sheet1").Range("A2") .Offset(emptyRow, 0).Value = Me.txtSurname.Value .Offset(emptyRow, 1).Value = Me.numCRN.Value .Offset(emptyRow, 2).Value = Me.cboUnit.Value .Offset(emptyRow, 3).Value = DateValue(Me.txtDateConf.Value) .Offset(emptyRow, 4).Value = Me.numBoxnum.Value .Offset(emptyRow, 5).Value = Me.txtItem6.Value .Offset(emptyRow, 6).Value = Me.txtItemDesc6.Value .Offset(emptyRow, 7).Value = Me.numQTY6.Value .Offset(emptyRow, 8).Value = Me.cboCondition6.Value .Offset(emptyRow, 9).Value = Me.cboReason6.Value If Me.chkHistCheck6.Value = True Then .Offset(emptyRow, 10).Value = "Yes" Else .Offset(emptyRow, 10).Value = "No" End If If Me.chkHistCheck6.Value = "" Then .Offset(emptyRow, 10).Value = "No" End If .Offset(emptyRow, 11).Value = Format(Now, "dd/mm/yyyy hh:nn:ss") End With
- В VBA почему класть значение текстового поля в ячейку запускает цикл for в другой подпрограмме userform?
- Использование VBA для изменения ссылок на источник в листах вместо рабочей книги
- Разница между двумя датами для заполнения текстового поля в VBA
- VBA не будет вызывать UserForm из своей собственной книги
- экспорт данных из Excel для отображения на пользовательской форме
- как исправить ошибку несоответствия типа?
- Глобально определить и инициализировать пользовательские формы
- Excel VBA - получить слово с двойным щелчком в многострочном текстовом поле userform
Извините Все за задержку ответа. Мы поняли, что код, хотя и неуклюжий, был все еще в порядке, но в игре была проблема с памятью.
Рабочий лист, который был написан, был в 1400 строк, с 2 годами ввода данных. Обнаружено, что если мы просто архивируем (вырезаем и вставляем), чтобы все в новый файл, форма и рабочий лист выполнялись безупречно снова.
Конечно, кто-то здесь задумался бы через несколько секунд, глядя на весь файл, но поделившись данными или вечером весь код был не-нет. Спасибо за ваше время.