Gdy masz tabelę danych w programie Excel, część standardowej funkcjonalności polega na tym, że naciśnięcie zakładki w ostatniej komórce powoduje dodanie nowego wiersza u dołu tabeli. Chcę automatycznie wypełnić ten nowy wiersz użytecznymi wartościami domyślnymi. W szczególności chcę umieścić aktualną datę-czas w jednej komórce i skopiować wartości do innych komórek z poprzedniego wiersza tabeli.Domyślne wartości dla pól w nowym wierszu tabeli danych
Nie można tego zrobić przy użyciu formuł - np. używanie =now()
dla znacznika daty i czasu jest niewystarczające, ponieważ będzie automatycznie aktualizowane za każdym razem, gdy arkusz kalkulacyjny zostanie ponownie obliczony, podczas gdy chcę, aby zachował datę i godzinę w momencie dodania wiersza.
Tak więc próbuję napisać VBA, aby był uruchamiany przez zdarzenie dodawanego wiersza, oraz w tym kodzie, aby zapisać wartości w komórkach nowego wiersza. Od MS documentation myślałem, że DataTable.TableNewRow
będzie odpowiednim wydarzeniem. Ale kiedy próbuję napisać dowolny kod dla tego zdarzenia, nie jest on wykonywany. Podczas wyszukiwania w przeglądarce obiektów VBA DataTable
zdarzenie TableNewRow
nie jest wyświetlane.
Wersje:
- VBA for Applications 7.1
- Excel 2013
Więc moje pytania:
- jest kierunek mojego prawa myślenia, czy można zaproponować lepsze podejście?
- Czy możesz zaoferować działający kod, który robi coś takiego?
- Czy
DataTable.TableNewRow
to wydarzenie, z którym powinienem pracować? - Co muszę zrobić, aby wydarzenie było dostępne w moim kodzie VBA?
+1 Zdarzenie WorkSheet_Change jest wywoływane podczas wstawiania wierszy, więc może to być sposób na uzyskanie w razie potrzeby. –
Nie próbowałem Twojego kodu (przepraszam), ale nie widzę, jak liczba wierszy w tabelach będzie większa niż jego liczba wierszy. Wygląda na to, że musisz przechowywać liczbę wierszy w publicznej zmiennej, a nie w tabeli.Pewnie po prostu czegoś brakuje. –
@DougGlancy Ah, przechowuję zakres tabeli, a następnie oceniam liczbę wierszy za pomocą właściwości * Rows.Count *. Przy okazji nauczyłem się czegoś nowego. Zazwyczaj używam nazwanego zakresu do śledzenia wstawiania wierszy lub kolumn. * Zdarzenie Worksheet_Change * ułatwi. – L42