Programowanie w programie Excel 2013 VBA

3

Zacznę od tego, że próbuję zaoszczędzić czas członkowi rodziny, który robi ten program ręcznie.

Arkusz 1

  1. Kolumna A jest datą początkową
  2. Kolumna B to przewidywana data rozpoczęcia
  3. Kolumna E to nazwa zadania.

Arkusz 2 to ręcznie robiony kalendarz.

  1. Zadania są w B8: B17 dla przewidywanej daty rozpoczęcia i B20: B29 dla rzeczywistej daty rozpoczęcia
  2. Tydzień to C5: AK5, miesiąc to C6: AK6, dzień to C7: AK7

Próbuję to zrobić:

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)

Jestem rybą pozbawioną wody, jeśli chodzi o VBA.

@jcbermu - Projekt ma 35 tygodni (C: AK ma 35 kolumn). W wierszu 5 znajduje się numer tygodnia (1-35) (komórki C5: AK5), a następnie miesiąc w C6: AK6, a na koniec kalendarz niedziela w C7: AK7, jak widać tutaj:
spreadsheet screenshot

EDYCJA: @ Raystafarian, DZIĘKI, to czyta dokładnie to, czego potrzebuję. Spróbuję tego i zobaczę, co się stanie.

  • @Raystafarian, „nie znaleziono” za każdym razem. Powiem, że to jego format na daty, ponieważ nie ma ciągłości między arkuszami. Zamierzam poprawić jego prześcieradła i sprawdzić, czy to rozwiązuje problem.
James
źródło
Nie rozumiem danych w zakresie C5: AK7. Czy możesz podać nam przykład?
jcbermu
James: (1) Wyjaśnienia do pytania należeć w edycjach, a nie w komentarzach, więc nie martw się. (Tak, „Dzięki” i kolejne „nie, dziękuję” powinny być prawdopodobnie w komentarzach) W jaki sposób można połączyć / połączyć / połączyć / skojarzyć dwa konta / użytkowników? i / lub Przypadkowo stworzyłem dwa konta; jak je połączyć? wskazówki dotyczące łączenia kont. Następnie możesz edytować swoje własne pytanie bez przechodzenia przez recenzję. (3) Nice gravatar.
G-Man

Odpowiedzi:

0

Dosłownie to, co chcesz przetłumaczyć na coś takiego w module arkusza roboczego dla arkusza 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
Raystafarian
źródło
0

Spróbuj tego:

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

Działa tylko w pewnych warunkach:

  1. Na Arkusz1 kolumny muszą być w następującej kolejności: Start Date | Projected Date | Task Name.
  2. Na Arkusz2 month i Sunday date musi być takim samym.

    Podam ci przykład: Na komórce C6 i komórka c7 umieściłeś 01.03.2015 i wybrałeś format komórki zwyczaj I użyć mmm na c6 i dd na C7.

  3. Kolejność zadań musi bądź taki sam Arkusz1 i Arkusz2 .

  4. Na Arkusz2 pierwsze zadanie musi dotyczyć komórek B8 i B20.

Kod VBA musi być włączony Arkusz 1 . Musisz otworzyć Makra iw lewej kolumnie kliknij dwukrotnie arkusz, a następnie wklej kod po prawej stronie. Ilekroć zmienia się data Sheet1 jest aktualizowany Sheet2.

jcbermu
źródło