... chyba je v Range(x).Select ...
Samozřejmě, protože v "x" máš číslo (prvního prázdného řádku), nikoli objekt typu Range:
x = Range("B1").End(xlDown).Row + 1 ' PrvníPrázdnýŘádek
Takže zkus
Cells(x,2).Select
... jak mi to vybírá Rows(i).Select, tak bych ten selektovaný řádek potřeboval BEZ první buňky zleva...
A proč vůbec vybíráš celý řádek? To tam máš tolik údajů? Určitě ne, že. Takže zkus vybrat oblast od druhého třeba do 20. sloupce:
Range(Cells(x,2),Cells(x,20)).Select
Anebo rovnou bez Selektu:
Range(Cells(x,2),Cells(x,20)).Copy
Dále - místo té spousty ElseIfů využij strukturu Select Case.
A ještě jeden tip - učit se VBA přes záznamy maker není až tak špatné, ale ty makra jsou často hodně nepřehledné a zabordelené, takže je vhodné je trochu pročistit a učesat. Například ten tvůj záznam uvedený na začátku dotazu (sub makro_kopirovani) lze upravit a zjednodušit několika možnými způsoby:
sub makro_kopirovani_uprava1()
Sheets("Přehled").Rows("12:12").Copy
Sheets("KKY").Activate
Range("A4").Select
ActiveSheet.Paste
end sub
sub makro_kopirovani_uprava2()
Worksheets("Přehled").Rows("12:12").Copy Destination:=Worksheets("KKY").Range("A4")
end sub
Edit: Než jsem odeslal odpověď, koukám, že už jsi na ten první bod přišel...