Excel 2013 VBA 编程

Excel 2013 VBA 编程

首先我要说的是,我正在尝试为手动执行此程序的家庭成员节省时间。

第 1 页

  1. A 列是开始日期
  2. B 列是预计开始日期
  3. E列是任务名称。

第 2 页是手工制作的日历。

  1. 任务的预计开始日期位于 B8:B17,实际开始日期位于 B20:B29
  2. 周数为 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. 工作表1各列必须按以下顺序排列:Start Date | Projected Date | Task Name

  2. 工作表2monthSunday date 必须是相同的。

    我给你举个例子:在单元格C6和单元格中c7输入 01/03/2015 并使用你选择的单元格格式风俗mmm并在 c6 和ddC7 上使用。

  3. 任务顺序必须相同工作表1工作表2

  4. 工作表2首要任务必须是细胞B8B20

VBA 代码必须放在第 1 页。您需要打开宏,在左侧栏中双击工作表,然后将代码粘贴到右侧。每当日期发生变化时,Sheet1它都会在 上更新Sheet2

相关内容