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ć.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.