VBa - kopírování podle parametru 2 Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

WikisRuleZz
Level 1
Level 1
Příspěvky: 76
Registrován: leden 11
Bydliště: Pardubice
Pohlaví: Muž
Stav:
Offline

VBa - kopírování podle parametru 2  Vyřešeno

Příspěvekod WikisRuleZz » 27 led 2011 12:05

Dobrý den,

nedávno jste mi radili s kopírováním podle parametru.

For i = 1 To Cells(1, 2)
Cells(i, 3) = Cells(1, 1) '* Cells(1, 2)
Next i

Jak bylo řečeno tento cyklus vytvoří v buňce C1 tolik buněk s textem z A1 kolikrát je zadáno v buňce B1. Já se to snažím rozšířit aby oblast byla libovolně veliká. Tedy aby se kopírování neomezovalo jen na Buňky A1. Ať se pokouším jak se pokouším, tak pomocí xl(down) se mi ověří velikost tabulky v A a v B ale zkopíruje se poslední jen a já potřebuji aby pod sebou byly všechny záznamy.
"V případě hrubé nedbalosti hlavního počítače vedoucí k ohrožení posádky jsou všechny lodě Jupiterské důlní společnosti povinny mít záložní počítač, který nahradí počítač hlavní." Červený trpaslík.

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBa - kopírování podle parametru 2

Příspěvekod navstevnik » 27 led 2011 14:13

Zkus tuto proceduru, kopiruje hodnoty (pro predpokladane opakovani v radu jednotek neni vlozena kontrola prekroceni limitu radku (sloupcu) listu):

Kód: Vybrat vše

Option Explicit

Sub KopirovatNkrat()
  Dim SBlk As Range  ' blok ke kopirovani
  Dim SBlkR As Integer, SBlkC As Integer ' radky, sloupce
  Dim NKrat As Integer  ' pocet kopirovani
  Dim TCll As Range  ' cilova bunka pro umisteni leve horni bunky prvni kopie
  Dim i As Integer, OfsR As Long, OfsC As Integer
  With ActiveSheet
    Set SBlk = .Range("a1:b2")  ' definice zdrojoveho bloku
    With SBlk  ' pocet radku a sloupcu kopirovaneho bloku
      SBlkR = .Rows.Count
      SBlkC = .Columns.Count
    End With
    NKrat = .Range("G1").Value  ' nacist pocet opakovani
    Set TCll = .Range("j5")  ' definice cilove bunky
    ' nastaveni ofsetu radku a sloupcu pro opakovane umisteni, vyber dle potreby
    ' pod sebou:
'    OfsR = SBlkR
'    OfsC = 0
    'vedle sebe:
    OfsR = 0
    OfsC = SBlkC
    ' kaskadovite
'    OfsR = SBlkR
'    OfsC = SBlkC
    For i = 0 To NKrat - 1
      TCll.Resize(SBlkR, SBlkC).Offset((i * OfsR) - 1, (i * OfsC) - 1).Value = SBlk.Value
    Next i
  End With
  ' odstranit objektove promenne
  Set SBlk = Nothing
  Set TCll = Nothing
End Sub

WikisRuleZz
Level 1
Level 1
Příspěvky: 76
Registrován: leden 11
Bydliště: Pardubice
Pohlaví: Muž
Stav:
Offline

Re: VBa - kopírování podle parametru 2

Příspěvekod WikisRuleZz » 28 led 2011 07:16

Čekal jsem něco jednoduššího. Můžu se ještě zeptat jak to funguje. Ať na to koukám a zkouším jak chci tak mi to nechce chodit...Děkuji za ochotu.
"V případě hrubé nedbalosti hlavního počítače vedoucí k ohrožení posádky jsou všechny lodě Jupiterské důlní společnosti povinny mít záložní počítač, který nahradí počítač hlavní." Červený trpaslík.

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBa - kopírování podle parametru 2

Příspěvekod navstevnik » 28 led 2011 10:10

Vzhledem k tomu, ze z:
Já se to snažím rozšířit aby oblast byla libovolně veliká. Tedy aby se kopírování neomezovalo jen na Buňky A1.

nelze vycist nez, ze potrebujes kopirovat nejaky blok bunek (a z predchozihi opakovane kopirovat), prilozil jsem proceduru univerzalnejsiho charakteru.
Na aktivnim listu je oblast bunek urcena k nasobnemu kopirovani - v procedure zadat blok bunek do:
Set SBlk = .Range("a1:b2") ' definice zdrojoveho bloku
Na aktivnim listu je bunka obsahujici nasobek kopirovani - v procedure zadat bunku do:
NKrat = .Range("G1").Value ' nacist pocet opakovani
V procedure zadat bunku pro umisteni leve horni bunky prvni kopie:
Set TCll = .Range("j5") ' definice cilove bunky
Dale je v procedure podle zpusobu rozmisteni kopirovanych bloku (pod sebou, vedle sebe, kaskadovite) potreba aktivovat/deaktivovat dva radky obsahujici prislusne ofsety:
OfsR = ...
OfsC = ...

Proceduru je nutno umistit v editoru VBA(volat z Excelu Alt+F11) do standardniho modulu, upravit vyse uvedene, a spustit v editoru VBA klavesou F5 nebo z Excelu z menu/pasu karet dle verze Excelu.
Neni osetren nekorektni stav - nezadany pocet opakovani, pripadne hodnota 0.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Výběr PC podle her Příloha(y)
    od buripe » 13 pro 2024 16:16 » v Rady s výběrem hw a sestavením PC
    6
    1887
    od buripe Zobrazit poslední příspěvek
    15 pro 2024 18:21
  • Která PC sestava je podle vás nejlepší? Příloha(y)
    od Rhadley » 04 lis 2024 16:34 » v Rady s výběrem hw a sestavením PC
    4
    1783
    od Kminek Zobrazit poslední příspěvek
    05 lis 2024 09:03
  • Rozdělení sítě na podsítě, výpočet podsítí podle počtu hostů Příloha(y)
    od zuzana3 » 27 pro 2024 08:09 » v Administrace sítě
    12
    4727
    od petr22 Zobrazit poslední příspěvek
    27 pro 2024 12:29
  • ComboBox v Excelu kopírování Příloha(y)
    od LukM » 19 říj 2024 14:03 » v Kancelářské balíky
    0
    2646
    od LukM Zobrazit poslední příspěvek
    19 říj 2024 14:03

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 4 hosti