![Excel 2013 VBA 编程](https://linux22.com/image/1445659/Excel%202013%20VBA%20%E7%BC%96%E7%A8%8B.png)
首先我要说的是,我正在尝试为手动执行此程序的家庭成员节省时间。
第 1 页
- A 列是开始日期
- B 列是预计开始日期
- E列是任务名称。
第 2 页是手工制作的日历。
- 任务的预计开始日期位于 B8:B17,实际开始日期位于 B20:B29
- 周数为 C5:AK5,月数为 C6:AK6,日数为 C7:AK7
我想要做的是:
IF cell change in sheet_1(range a2:a999)
Find in sheet 3 (C6:AK7) the location of value entered in sheet 2(active.cell)
Store column number as Actual_Date_y
Active.Cell
move active.cell to Location (R,C+4)
Find in sheet 3 (B20:B29)the String from new active.cell
Store Row Number as Actual_Date_x
print ("X"), in (Actual_Date_x,Actual_Date_y)
当谈到 VBA 时,我就像一条离开水的鱼。
@jcbermu - 该项目为期 35 周(C:AK 为 35 列)。第 5 行(单元格 C5:AK5)中有一个周数(1-35),然后他在 C6:AK6 中输入月份,最后他在 C7:AK7 中输入日历星期日日期,如下所示:
编辑:@Raystafarian,谢谢,这正是我需要的。我要试一试,看看会发生什么。
- @Raystafarian,每次都是“未找到”。我要说这是他的日期格式,因为表格之间没有连续性。我要调整他的表格,看看是否能解决这个问题。
答案1
从字面上看,您想要的内容在工作表 1 的工作表模块中转换为如下内容 -
Sub worksheet_change(ByVal target As Range)
Dim actdatex As Integer
Dim actdatey As Integer
Dim newcell As Range
Dim rngdate As Range
If Not Intersect(target, Range("A2:A999")) Is Nothing Then
On Error GoTo handler
For Each c In Range("Sheet3!C6:AK7")
If c = Worksheets("Sheet2").Range(target.Address) Then
actdatex = c.Column
Exit For
End If
Next
Set newcell = Range(target).Offset(, 4)
For Each d In Range("Sheet3!B20:B29")
If d = newcell Then
actdatey = d.Row
Exit For
End If
Next
Set rngdate = Cells(actdatex, actdatey)
rngdate = "X"
End If
handler:
MsgBox ("not found")
End Sub
答案2
尝试这个:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wkb As Workbook
Dim wks As Worksheet
Dim wks1 As Worksheet
Dim cell1, cell2, myrange As Range
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(1)
Set wks1 = wkb.Sheets(2)
targetrow = Target.Row
targetcolumn = Target.Column
task = wks.Cells(targetrow, 3)
For i = 3 To 300
a = wks1.Cells(6, i)
If a = "" Then
i = 301
End If
If a = Target.Value Then
initialrow = 20
If targetcolumn = 2 Then
initialrow = initialrow - 12
End If
realrow = initialrow + targetrow - 2
For j = 3 To 300
wks1.Cells(realrow, j) = ""
If wks1.Cells(6, j) = "" Then
j = 301
End If
Next j
wks1.Cells(realrow, i) = "X"
End If
Next i
End Sub
它仅在某些条件下有效:
在工作表1各列必须按以下顺序排列:
Start Date | Projected Date | Task Name
。在工作表2和
month
Sunday date
必须是相同的。我给你举个例子:在单元格
C6
和单元格中c7
输入 01/03/2015 并使用你选择的单元格格式风俗mmm
并在 c6 和dd
C7 上使用。任务顺序必须相同工作表1和工作表2。
在工作表2首要任务必须是细胞
B8
和B20
。
VBA 代码必须放在第 1 页。您需要打开宏,在左侧栏中双击工作表,然后将代码粘贴到右侧。每当日期发生变化时,Sheet1
它都会在 上更新Sheet2
。