Jak napisać makro Excela, aby skopiować wybrany wiersz danych między dwoma arkuszami?

-1

Nie jestem naprawdę doświadczony w całym obszarze VBA, rozumiem, jak działają makra, ale to jest poza moim zasięgiem. Zasadniczo, jak powiedziałem w tytule, muszę napisać makro, które skopiuje wybrany wiersz lub komórki z jednego arkusza do drugiego.

Na przykład. Pierwszy arkusz zawiera tabelę z niektórymi danymi. Użytkownik wybiera wiersz lub żądane komórki, uruchamia makro za pomocą skrótu klawiaturowego, makro kopiuje wybrane dane do arkusza 2 i wkleja je w żądanym wierszu (zróbmy to wiersz 22). Ponadto, jeśli wiersz 22 (A: 22) zawiera pewne dane, wklej dane w następnym wierszu (23).

Mam nadzieję, że wyjaśniłem to wystarczająco jasno.

Doceniam każdą wskazówkę lub pomoc, jaką mogę uzyskać.

Escape.
źródło
Co masz do tej pory? Gdzie utkniesz?
Ƭᴇcʜιᴇ007
1
Tylko myśl, ale czy próbowałeś rejestratora makr. Możesz rozpocząć nagrywanie i wykonać następujące czynności. Następnie zatrzymaj nagrywanie i możesz zapisać je jako makro. Następnie możesz edytować to makro i zobaczyć, jak te polecenia są rejestrowane. Być może musisz ulepszyć polecenia, ale dobrze wiesz, jak działa VBA.
Rik

Odpowiedzi:

0

W obszarze Developer - & gt; Visual Basic, umieść następujące elementy w nowym module:

Sub CopySelection()
  Dim xlSel As Excel.Range
  Set xlSel = Excel.Application.Selection

  xlSel.Copy Excel.Application.Sheets("Sheet2").Range("A1")
End Sub

Następnie w obszarze Developer - & gt; Makra, wybierz sub, kliknij Opcje i przypisz klucz.

DarkMoon
źródło
Mam to, działa jak urok. Dzięki! Teraz się zastanawiałem. Jeśli żądany wiersz jest pełny, czy mogę go wkleić do następnego? Przeszedłem przez kilka odpowiedzi tutaj na SU i myślę, że coś w tych liniach może zadziałać (ale tak nie jest) Sub CopySelection() Dim xlSel As Excel.Range Set xlSel = Excel.Application.Selection Set Rng = Sheet2.Range("A1") If IsEmpty(Rng) Then xlSel.Copy Excel.Aplication.Sheets("Sheet2").Range("A1") Else xlSel.Copy Excel.Aplication.Sheets("Sheet2").Range("A2") End If End Sub
Escape.
Cóż, jeśli chcesz po prostu dodać go do następnego dostępnego wiersza po wszystkich istniejących wierszach, możesz użyć xlSel.Copy Excel.Application.Cells(Excel.Application.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1).
DarkMoon
Przepraszam, chyba nie zrozumiałeś mnie dobrze. Przepraszam za bycie PITA, staram się to zrobić. Dodaj możliwość opublikowania makra, aby sprawdzić, czy A: 22 jest puste. Jeśli to prawda, wklej go, w przeciwnym razie przejdź do A: 23 i wklej tam. W przypadku A: 23 jest pełny ... masz to, gdzie idę z tym ..
Escape.
Miało to zastąpić kopię w oryginalnej odpowiedzi. Zamiast kopiować tylko do A1, skopiuje go do komórki, która ma 1 wiersz pod ostatnią komórką z danymi w niej, w kolumnie 1. Jeśli to nie zadziała, ponieważ pusta komórka może gdzieś znajdować się w środku, a następnie możesz coś takiego: Dim row jako Integer row = 22 'to jest wiersz początkowy do sprawdzenia pustych komórek Do While Excel.Application.Cells (wiersz, 1) .Value & lt; & gt; "" wiersz = wiersz + 1 pętla xlSel.Copy Excel.Application.Sheets ("Arkusz2"). Komórki (wiersz, 1) Nie jestem teraz przed komputerem z systemem Windows, ale powinien działać.
DarkMoon