Temat: problem z wczoraj
Oto przykładowa procedura, rozwiązująca ten konkretny problem.
Napisana w taki sposób dlatego, żeby można ją było modyfikować w zależności od potrzeb.
Działa następująco:
sprawdza kolejno wiersze do końca arkusza (65356), czy w w danym wierszu w kolumnie A jest jakaś wartość.
Jeśli nie ma, wkleja zawartość pamięci - dlatego na początku kopiowany jest odpowiedni fragment (siedem kolumn) wiersza A.
Jeśli w komórce A(n) jest jakaś wartość, to procedura kopiuje zawartość wiersza od kolumny A do G i przechodzi sprawdzić następny wiersz, z opisanym skutkiem.
Dzieje się tak do końca arkusza, lub do napotkania w ktorejś ze sprawdzanych komórek tekstu "koniec" .
Dlatego trzeba słowo "koniec" (pisane bez znaków cudzysłowu) wpisać za ostatnim wierszem naszej tabeli.
Po napotkaniu słowa "koniec" procedura opuszcza pętlę For..Next i przechodzi do zakończenia:
likwiduje zaznaczenie wokół ostanio kopiowanego zakresu, wywołuje dźwięk systemowy i wyświetla komunikat "Skończyłem".
W razie wystąpienia błędu procedura wyświetla komunikat "Coś się porąbało", nie powodując zawieszenia aplikacji.
Powodzenia w korzystaniu..
Sub kopista()
On Error GoTo blad
Dim wiersz As Long
Range(Cells(1, 1), Cells(1, 7)).Select
Selection.Copy
For wiersz = 2 To 65536
Cells(wiersz, 1).Select
If Selection.Value = "" Then
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ElseIf Selection.Value = "koniec" Then Exit For
Else
Range(Cells(wiersz, 1), Cells(wiersz, 7)).Select
Selection.Copy
End If
Next
Application.CutCopyMode = False
Range("A1").Select
Beep
MsgBox "Skończyłem", vbOKOnly, "Kopista"
Exit Sub
blad:
MsgBox "Coś jest porąbane", , "Kopista"
Beep
End Sub