【发布时间】:2020-08-12 18:23:50
【问题描述】:
我正在为与我合作的团队创建一个项目跟踪器,并且我想将单个项目的所有项目信息复制到一行中。然后该行中的 2 列将是“任务完成”和“完成日期”。
目前我正在使用数据验证列表在任务完成单元格中选择“完成”。列出“完成”时,“完成日期”将自动填充“今天”日期。我只是用excel中的简单函数来实现这一点。
然后我创建了 VBA 代码,以便单击命令按钮,它将突出显示行中的特定单元格,复制这些单元格,将它们粘贴到空工作表中,然后清除任务和日期完成单元格。
我已经让这些功能中的大部分都可以使用,但我遇到了障碍,让 excel 仅将空白工作表中的数据复制到空行中(A1、A2、A3 行等)。我不确定如何让代码将数据复制到空行中。我知道它可以通过使用变量(i)和循环来实现。
我的另一个问题是,我最初想使用复选框而不是经过验证的列表,但似乎在使用复选框的格式方面存在问题。如果我的行大小必须更改以适合文本,复选框将挤满其他单元格。这只是 excel 中表单/activeX 的缺陷,还是我错过了大局的一部分?
我尝试使用数组来检查“任务完成”列,而不是使用单独的 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
【问题讨论】:
-
您是否尝试在单元格 K4 到 K20 中检查“完成”一词?
-
查看 Range.Offest 和 Range.End 命令。我认为他们是你正在寻找的东西。此外,您还可以设置范围变量而不是使用数组或(更重要的是)而不是选择范围。你似乎是那种重视自我提升的人,所以继续吧。如果您发现任何困难或希望获得完整的示例,请直接说。我很乐意为您编写完整的注释代码。
-
您能否阐明“代码将数据复制到空行中”的意思?顺便说一句,您可以在一行中为数组分配一个范围。
-
@dwirony - Yes 检查 K4-K20 Complete 然后用当前日期填充它旁边的单元格。
-
@evilbluemonkey 感谢您的提示,我一定会研究这些命令。我不反对一些我可以用作参考的示例代码。我确实觉得阅读代码比编写代码更容易。
标签: excel vba checkbox activex