Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Uprava makra tak, aby sa pri kopirovani nezmenilo formatovanie cieloveho harku?

Ahojte, potreboval by som upravit nasledovny kod tak, aby ked kopirujem ten jeden treti riadok zo zdrojoveho harku (Sheet1) do cieloveho harku (Sheet5), tak formatovanie cieloveho harku bude zachovane. Myslene tak, ze napr. ked mam farbu pisma v nejakych bunkach cervenu, tak cervena ostane atd. Skusam sa s tym hrat, ale zatial sa mi moc nedari, potreboval by som vyriesit nasledovne. Kod je od pouzivatela Robert13, ktoremu vopred dakujem...

1. Zachovat formatovanie cieloveho harku. Ako vyriesit to, ze ked cez dany riadok, ktory kopirujem z harka 1 mam vlozeny nejaky objekt, napr. cierny obdlznik, tak mi jeho cast neprenesnie do cieloveho harku. Teraz mi to kopiruje komplet vsetko zo zdroja (komplet cele formatovanie + objekt, ktory prekryva dany treti riadok).

2. Suvisi s bodom 1. Ked v niektorej bunke nemam hodnotu v zdrojovom riadku, tak do cieloveho harku automaticky vklada nuly. Potrebujem, aby tie bunky zostali prazdne, neviem preco tam vlozi automaticky nuly, kedze v zdrojovom riadku nuly v prazdnych bunkach nie su.

3. Uz sa netyka daneho kodu, ale mam combo box, v ktorom potrebujem spravit to, ze ked do neho raz kliknem, tak mi automaticky oznaci cely text v nom tak, ze ked zacnem do neho pisat, tak sa cely ten text premaze. Pre ten combo box mam len do jednej bunky nalinkovany zoznam z ineho harku.

4. Este by sa mi hodilo, ze ked dany kod potvrdim, tak automaticky bude ten combo box aktivny a text v nom cely oznaceny.
Dakujem!

Private Sub CommandButton1_Click()
If Sheets(1).Range("A4") = "" Then
PR1 = 3
Else: PR1 = Sheets(1).Range("A3").End(xlDown).Row
End If
If Sheets(5).Range("A4") = "" Then
PR2 = 3
Else: PR2 = Sheets(5).Range("A3").End(xlDown).Row
End If

For i = 3 To PR1
For j = 3 To PR2
If Sheets(1).Range("A" & i) = Sheets(5).Range("A" & j) And Sheets(1).Range("B" & i) = Sheets(5).Range("B" & j) And Sheets(1).Range("C" & i) = Sheets(5).Range("C" & j) Then
Sheets(5).Range("E" & j) = Sheets(5).Range("E" & j) + Sheets(1).Range("E" & i)
Sheets(5).Range("F" & j) = Sheets(5).Range("F" & j) + Sheets(1).Range("F" & i)
Sheets(5).Range("G" & j) = Sheets(5).Range("G" & j) + Sheets(1).Range("G" & i)
Sheets(5).Range("H" & j) = Sheets(5).Range("H" & j) + Sheets(1).Range("H" & i)
Sheets(5).Range("I" & j) = Sheets(5).Range("I" & j) + Sheets(1).Range("I" & i)
Sheets(5).Range("J" & j) = Sheets(5).Range("J" & j) + Sheets(1).Range("J" & i)
Sheets(5).Range("K" & j) = Sheets(5).Range("K" & j) + Sheets(1).Range("K" & i)
Sheets(5).Range("L" & j) = Sheets(5).Range("L" & j) + Sheets(1).Range("L" & i)
Sheets(5).Range("M" & j) = Sheets(5).Range("M" & j) + Sheets(1).Range("M" & i)

GoTo DalsieI
End If
Next j
Sheets(1).Range("A" & i & ":M" & i).Copy (Sheets(5).Range("A" & (PR2 + 1)))
PR2 = PR2 + 1
DalsieI:
Next i

Sheets(1).Select
CommandButton1.BackColor = RGB(255, 255, 0)
ToggleButton1.Value = False
ToggleButton2.Value = False

End Sub

Předmět Autor Datum
Zkopíruj (přenes) i formát. Tzn. Range.Format
Jan Fiala 25.08.2014 12:09
Jan Fiala
Ja prave nechcem kopirovat format, ja chcem aby format ostal tam, kam ten riadok kopirujem rovnaky..… nový
Abu255 25.08.2014 12:44
Abu255
1) aby neboli dotknuté formáty na cieľovom hárku, je potrebné prenášané údaje vlepiť špeciálne - hod… nový
robert13 25.08.2014 13:06
robert13
to vlepovanie: riadok Sheets(1).Range("A" & i & ":M" & i).Copy (Sheets(5).Range("A" & (PR2 + 1)))… nový
robert13 25.08.2014 13:14
robert13
Robo moc dik za info: 1. Skusim 2. Jasne, ja som tam preklikol iny zosit:) 3. Presne tak to mam spr… nový
Abu255 25.08.2014 14:07
Abu255
rozumiem, ale myslím, že tak to nepôjde. Pokiaľ však máš len jednoslovné hodnoty v Combe, tak celé s… nový
robert13 25.08.2014 14:47
robert13
Robo dik za info, idem sa s tym celym pohrat...tak tak, zapisuj si tie piva a potom ti nieco poslem:… poslední
Abu255 26.08.2014 07:52
Abu255

1) aby neboli dotknuté formáty na cieľovom hárku, je potrebné prenášané údaje vlepiť špeciálne - hodnoty (vtedy nevezme aj objekt)
2) to, že pokiaľ je výsledok vzorca nulový a nulu nechceš vidieť, sa vypína na ceste:
Karta Súbor - Možnosti - Rozšírené - V bunkách s nulovou hodnotou zobraziť nulu
3) Aby si dokázal vstupovať do textu v ComboBoxe, ComboBox nevkladaj ako ovládací prvok formulára (veľmi obmedzené možnosti) ale ako ovládací prvok ActiveX, klikneš naň pravým a zvolíš vlastnosti. Vo vlastnostiach nadefinuješ vstupný zoznam v položke ListFillRange a bunku, do ktorej sa prenáša zvolená hodnota nadefinuj do položky Linked Cell. Pokiaľ v ComboBoxe zvolíš hodnotu, ostane zvýraznená pre tebou požadovaný prepis ale pozor, zmenená hodnota sa neupraví aj vo vstupnom rozsahu, to treba ošetriť inak

to vlepovanie:
riadok

Sheets(1).Range("A" & i & ":M" & i).Copy (Sheets(5).Range("A" & (PR2 + 1)))

je potrebné upraviť na:

Sheets(1).Range("A" & i & ":M" & i).Copy
Sheets(5).Range("A" & (PR2 + 1)).select
Selection.PasteSpecial Paste:=xlPasteValues

pridať riadok na návrat do prvého hárku:

Sheets(1).Range("A1").select

a vypnúť zvýraznenie kopírovaného bloku:

Application.CutCopyMode = False

Robo moc dik za info:

1. Skusim
2. Jasne, ja som tam preklikol iny zosit:)
3. Presne tak to mam spravene, len ide mi o to, ze ked mi zbehne tento cely kod po stlaceni nejakeho tlacidla, tak automaticky bude aktivny combo box a to tak, ze text v nom bude cely oznaceny. Momentalne to je tak, ze ked zbehne kod, tak mi v combo boxe ostane ten text, to je ok, ale ked do neho kliknem na nejake miesto, tak mi kurzor blika v mieste kliknutia. Napr. mam v boxe nazov "automobil", tuknem do boxu a kurzor blika medzi "t/o" a ked zacnem zadavat text, tak mi ostanu pismena "aut", comu potrebujem predist. A ja potrebujem, ze ked do neho kliknem, tak hned mi oznaci cely text. Ide o to, ze tato aplikacia bude sluzit pre dotykovy displej bez klavesnice, preto to chcem mat co najviac zjednodusene a ja ked tuknem prstom do toho combo boxu, tak kurzor blika tam kde kliknem a ked zacnem cez tlacidla zadavat do comboboxu text, tak mi tam mozu ostat nejake pismena z predosleho vyberu. Mozno sa toto ani neda nastavit, neviem. Je to dost krkolomne napisane, ale snad je to aspon trosku zrozumitelne:).

rozumiem, ale myslím, že tak to nepôjde. Pokiaľ však máš len jednoslovné hodnoty v Combe, tak celé slovo naraz sa vyberá jednoducho dvojklikom naň. Ak je to ovšem viacslovný výraz, dvojklikom sa ti vyznačí len slovo, na ktoré si dvojklikol. Inak budeš musieť označiť vnútorný text potiahnutím cezeň (najšikovnejšie je to od konca k začiatku)
Aha, kua, zabudol som na jednu vec (pre istotu som si musel overiť, či to funguje aj bez užívateľského formulára)a síce, že pokiaľ máš vo vlastnostiach Comba nastavené SelectionMargin na True (defaultne), slúži to presna na to, čo chceš, t.j. naľavo pred textom v Combe ostáva malá voľná plocha, na ktorú keď klikneš, označí sa ti celý obsah :D

Nemažem čo som písal k dvojklikom na slovo, možno aj taká informácia sa ti niekedy zíde

R

4 pivá :D

Zpět do poradny Odpovědět na původní otázku Nahoru