< návrat zpět

MS Excel


Téma: VBA string array rss

Zaslal/a 30.3.2022 16:52

Ahoj resim ve VBA praci s array ukazka kodu

myarray = Array("pondeli", "utery")

Fname = Sheets("List1").Range("B14").Value

Sheets(myarray).Copy
With ActiveWorkbook
.SaveAs Filename:=Fname
.Close
End With

jde mi oto jak dostat z bunek do promenne myarray text rekneme ze dny v tydnu se mi generujou v bunkach A1:A5
dny se generujou podle kalendare podle dnu se generujou listy s nazvem dne s tabulkou pres VBA. pote co vygeneruju listy s nazvem dne je potrebuju pres VBA ulozit, na to jsem si napsal jednoduchej kod ale nejsem schopen "naplnit" myarray... pokud to napisu rucne jak to mam v kodu tak to funguje...

Zaslat odpověď >

Strana:  « předchozí  1 2
#052462
avatar

kraken192 napsal/a:

vkladam odkaz celeho excelu jde mi o to ze kdyz se v listu 1 vyplni rok cislo tydne mesic tak to vygeneruje listy v danem mesici... ktery potom potrebuju zvlast ulozit do souboru. jsem zvedav co vymyslite... mozna je cesta vubec to neresit pres array a ukladat listy do souboru "jinak"
https://drive.google.com/file/d/1PUxL1u1S98INAG85pmJqZ2jnlq4sKgQ4/view?usp=sharing

Na toto sa ti môžeme vykašlať. Daj súbor.citovat
#052463
avatar
tak vkladam jeste jednou na ulozto... nebo kam to chcete ulozit??
https://ulozto.cz/file/Fnv3WqyjZ9u0/test-xlsm#!ZGt5BQR2ZJV2AmZkBTEyAGVkZzR0ZGO1BIbgAyEcZyEPBQLmLt==citovat
#052464
Stalker
Do sešitu sem se koukal, ale přiznám se, že sem vůbec nepochopil jak to má fungovat.
Tak jen k té deklaraci pole. Velikost pole se mění příkazem ReDim
Index pole začíná na indexu 0.
Tedy:

Dim MyArray()
Dim Pocet as Integer
Pocet = 4
ReDim MyArray (Pocet) 'vytvoří pole o pěti "položkách" (0 až 4)
citovat
#052466
avatar
Takže hodnoty z A1:A5 načtu do pole "myarray" pomocí cyklu (buňku po buňce), protože to vypadá, že mohou být vyplněny libovolně. Takže pokuď je v buňce text, uloží se do pole.

Sub IF_THEN1()
Dim Fname As String
Dim myarray()
Dim pocet As Integer, i As Integer

For i = 1 To 5 'prochází buňky A1 - A5
If Range("A" & i).Value <> "" Then 'pokud je v buňce text (pondeli - patek)
ReDim Preserve myarray(pocet)
myarray(pocet) = Range("A" & i).Value 'zapíši tento text do pole
pocet = pocet + 1
End If
Next i

If pocet = 0 Then Exit Sub 'pokud v A1:A5 není žádný text, makro se ukončí

Fname = Sheets("List1").Range("B14").Value

Sheets(myarray).Copy

With ActiveWorkbook
.SaveAs Filename:=Fname
.Close
End With
End Sub
Příloha: zip52466_test1.zip (49kB, staženo 8x)
citovat
#052470
avatar
parada uz to dela presne to co jsem potreboval... :-) moc dekuji zase jsem o kus chytrejsi :-) VBA jsem tvoril poprve a celkem me to chytnulo...... hlavne je super ze ten kod je s komentarem hned se mi chape lepe... jeste jednou dekuji :-)citovat
#052471
Stalker
Tak sem si přečetl Jirkův kód, poposednul si a nejspíš pochopil záměr.
Výsledek je v příloze. Kód se nachází v modulu, místo jmen jednotlivých listů, jsou použity CodeName listů. Když se rozhodneš listy přejmenovat nebude to mít vliv na kód a nedojde k havárii.

PS: Na Jirkův popud upravená příloha 1
Příloha: zip52471_test.zip (39kB, staženo 10x)
citovat
#052475
avatar
to @Stalker: pěkný.
Možná by to ještě chtělo doplnit, aby se, po uložení nového souboru, smazaly ty nově vzniklé listy ve zdrojovém souboru. 1citovat

Strana:  « předchozí  1 2

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje