Я создаю средство отслеживания проектов для команды, с которой работаю, и хочу скопировать всю информацию о проекте для одного проекта в одну строку. Тогда 2 столбца в строке будут «Завершение задачи» и «Дата завершения».
В настоящее время я использую список проверки данных, чтобы выбрать «Завершить» в ячейке завершения задачи. Когда в списке указано «Завершено», в поле «Дата завершения» автоматически будет указана «сегодняшняя» дата. Я достигаю этого с помощью простых функций в Excel.
Затем я создал код VBA, чтобы при нажатии кнопки команды он выделял определенные ячейки в строке, копировал эти ячейки, вставлял их в пустой рабочий лист, а затем очищал задачи и дату завершения ячеек.
Я получил большинство этих функций для работы, но я столкнулся с препятствием, когда Excel скопировал данные на пустой рабочий лист только в пустые строки (строка A1, A2, A3 и т. д.). Я не уверен, как заставить код копировать данные в пустые строки. Я знаю, что это может быть достигнуто с помощью переменной (i) и циклов.
Мой другой вопрос заключался в том, что я изначально хотел использовать флажки вместо проверенного списка, но, похоже, у меня возникли проблемы с форматированием флажков. Если мой размер строки должен измениться, чтобы соответствовать тексту, флажки будут переполнять другие ячейки. Это просто недостаток форм/activeX в Excel или я упускаю часть более широкой картины?
Я попытался использовать массив, чтобы проверить столбец «Задача завершена», а не отдельные операторы If, чтобы добавить дату. Прикреплен пример моего кода:
Dim pjt As Worksheet
Dim datawks As Worksheet
Dim myBook As Workbook 'define worksheets and workboook
Set myBook = Excel.ActiveWorkbook
Set pjt = myBook.Sheets("Project Tracker")
Set datawks = myBook.Sheets("DATA")
Dim tskarray(16) As String
tskarray(0) = Range("K4")
tskarray(1) = Range("k5")
tskarray(2) = Range("k6")
tskarray(3) = Range("k7")
tskarray(4) = Range("k8")
tskarray(5) = Range("k9")
tskarray(6) = Range("k10")
tskarray(7) = Range("k11")
tskarray(8) = Range("k12")
tskarray(9) = Range("k13")
tskarray(10) = Range("k14")
tskarray(11) = Range("k15")
tskarray(12) = Range("k16")
tskarray(13) = Range("k17")
tskarray(14) = Range("k18")
tskarray(15) = Range("k19")
tskarray(16) = Range("k20")
If tskarray(0) = "Complete" Then
Range("A4,B4,D4,F4,G4,J4,L4").Select
Selection.Copy
datawks.Select
datawks.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, skipblanks _
:=False, Transpose:=False
Sheets("Project Tracker").Select
Application.CutCopyMode = False
pjt.Range("J4,K4").Select
Selection.ClearContents
Else
Debug.Print ("No Task to Complete")
End If
.Cells(1, LastCol).Value = TargetCell.Value
для достижения этой цели. Затем я хочу перейти к следующей строке, например, как функционировал.Cells(LastRow, 1).Value
, но только после того, как будут введены все данные из строки рабочего листа pjt. Так, например, строка 4 с исключенными ячейками получает входные данные для строки 2 данных. Затем строка 5 pjt получает вход в строку 3 datawks. 29.04.2020.Cells(LastRow, LastCol).Value = TargetCell.Value
. Если вы записываете значения вдоль строки, и она всегда будет иметь одинаковую длину ячеек (например, это означает, что столбец G всегда является последним), вы можете установить последнюю строку на основе этого столбца, а не столбца A. , таким образом, вы все еще можете присвоить его значение в том же месте, что и мой код, но он не приведет к пропуску целой строки после того, как вы поместите значение в столбец A. 29.04.2020