Programação Excel 2013 VBA

3

Vou começar dizendo que estou tentando economizar tempo para um membro da família que esteja fazendo esse programa manualmente.

Folha 1

  1. A coluna A é uma data de início
  2. A coluna B é uma data de início projetada
  3. A coluna E é um nome de tarefa.

A folha 2 é um calendário feito à mão.

  1. As tarefas estão em B8: B17 para a data de início prevista e B20: B29 para a data de início real
  2. A semana é C5: AK5, o mês é C6: AK6, o dia é C7: AK7

O que estou tentando fazer é:

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)

Eu sou um peixe fora d'água quando se trata de VBA.

@jcbermu - O projeto tem 35 semanas de duração (C: AK é de 35 colunas). Há um número de semana (1-35) na linha 5 (células C5: AK5), então ele tem o mês em C6: AK6, por último ele tem a data de domingo do calendário em C7: AK7, como visto aqui:

EDIT:@Raystafarian,OBRIGADO,issoéexatamenteoqueeupreciso.Euvoutentareveroqueacontece.

  • @Raystafarian,"não encontrado" todas as vezes. Eu vou dizer que é o formato dele para as datas, já que não há continuidade entre as folhas. Vou ajustar suas folhas e ver se isso resolve o problema.
por James 01.04.2015 / 03:58

2 respostas

0

Literalmente, o que você quer se traduz em algo como isto no módulo de planilha para a folha 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
    
por 01.04.2015 / 17:24
0

Tente isto:

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

Funciona apenas sob algumas condições:

  1. Em Folha1 , as colunas devem estar nesta ordem: Start Date | Projected Date | Task Name .
  2. Em Folha2 , o month e o Sunday date devem ser os mesmos.

    Vou dar um exemplo: na célula C6 e na célula c7 que você colocou em 01/03/2015 e usando o formato de célula, selecione personalizado e use mmm em c6 e dd em C7.

  3. A ordem das tarefas deve ser a mesma em Folha1 e Folha2 .

  4. Em Folha2 , a primeira tarefa deve estar nas células B8 e B20 .

O código do VBA deve ser colocado na Folha 1 . Você precisa abrir macros e na coluna da esquerda, clique duas vezes na planilha e cole o código no lado direito. Sempre que uma data é alterada em Sheet1 , ela é atualizada em Sheet2 .

    
por 08.04.2015 / 11:52