Tuná - bod 3. http://wall.cz/index.php?m=topic&id=8351
Prílohu fakt tvoriť nebudem, len ako príklad, ktorý si môžeš doplniť do existujúceho makra:Sub Blbustka()
Rows("4:23").Insert
Rows("3:3").Copy Rows("4:23")
End Sub Nefunguje to? No, tak bez prílohy asi oveľa viac vytvoriť nepôjde.
Pokiaľ si tie tabuľky prevedieš na Excel Tables, tak pri vložení nových riadkov sa vzorce skopírujú automaticky..
Userprofile je asi vhodnejší než UserNameSub NajdiPlochu()
Dim fs As Object, f As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = Nothing
On Error Resume Next
Set f = fs.GetFolder(Environ("userprofile") & "\Desktop")
On Error GoTo 0
If Not f Is Nothing Then
MsgBox "Cesta k ploche: " & f.Path
Else: MsgBox "Cesta k ploche nema tvar C:\Users\???\Desktop"
End If
End Sub
edit: Toto je ešte lepšie:Sub najdiplochu1()
MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")
End SubČerpané z:http://stackoverflow.com/questions/17551238/vba-how-to-save-excel-workbook-to-desktop-regardless-of-user. Nájsť na googli trvá asi 10 sekúnd
@eLCHa
jj máte pravdu, ďakujem za upresnenie
@chey
Budeš zrejme milý chlapec ochotný pomôcť, ale je to trocha neúcta, ukázať tú hrôzu po tom, čo sem dá kp57 omnoho lepší návrh, nemyslíš? Je to tvoja vec, pmn však v tomto prípade robíš zo seba ...
Cez NEBO to samozrejme ide tiež, akurát by to v tom prípade, aby to bolo použiteľné, malo vyzerať nejako nasledovne:=OR($B$1:$B$10=1)
@kp57
len technická: podmienka platí, pokiaľ jej výsledok je PRAVDA (t.j. > 0), z toho plynie, že > 0 vo vzorci je už v podstate nadbytočné, stačí prosté:=SUM(--($B$1:$B$10=1))alternatívne:=COUNTIF($B$1:$B$10;1)
@kp57
sa Ti divím, že sa namáhaš
Prečo nepoužiješ hyperlinky?
Do kódového okna listu so zoznamom listov vlož:Sub VytvorHyperlinky()
'nazvy listov v stlpci A, zacinaju od riadku 1, bez volnych buniek medzi nazvami
Dim i As Byte, sh As Worksheet
For i = 1 To WorksheetFunction.CountA([A:A])
On Error Resume Next
Set sh = Sheets(Cells(i, 1).Value) 'kontroluje existenciu listu s danym nazvom
On Error GoTo 0
If Not sh Is Nothing Then _
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:="", _
SubAddress:="'" & Cells(i, 1) & "'!A1", TextToDisplay:=Cells(i, 1).Value
With Cells(i, 1).Font 'pokial nechceme, aby hyperlink vyzeral ako hyperlink
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Set sh = Nothing
Next i
End Sub
Kód spusti, následne môžeš zmazať. Proti tomu, čo navrhuje Jirka, a čo si chcel pôvodne, to má tú výhodu, že vo finále nepotrebuješ žiadne udalostné makro, ktoré môže teoreticky spomaľovať rýchlosť aplikácie.
jj
Páč podľa všetkého objavuješ objavené, ledaže by si mal na ten formulár nejaké špeciálne požiadavky
Daj si do Immediate:ActiveSheet.ShowDataForm
Uvedený formulár nájdeš medzi príkazmi "mimo pás kariet". V EN exceli sa menuje Form..., v CZ to niekde nájdeš, pravdepodobne sa bude menovať Formulář..
Videl by som to na prepojenie jednotlivých excelov priamo s tou externou databázou (čo to je, nejaký SQL server, access, alebo?). Cez ADO, MS query apod. Linkovanie je nespoľahlivé a náchylné k chybám.
jj, nič zložité to nebolo.
Inak ale, existuje nástroj Formulár, tak Ti nechcem kaziť radosť, ale v tomto prípade si programoval zrejme zbytočne
Generovanie čísla:
V UserForm1 doplň riadok:
Private Sub CommandButton1_Click()
Sheets("Archiv").Select 'zvoli list 1
radek = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(radek, 3).Value = TextBox3.Value
Cells(radek, 4).Value = TextBox4.Value
Cells(radek, 5).Value = TextBox5.Value
Cells(radek, 6).Value = TextBox6.Value
Cells(radek, 7).Value = TextBox7.Value
Cells(radek, 1).Value = Cells(radek - 1, 1) + 1
Unload Me
End Sub
Doplnenie č. zmluvy:
V UserForm2:Private Sub CommandButton1_Click()
Sheets("Archiv").Cells(UserForm2.ComboBox1.ListIndex + 2, 2).Value = TextBox6.Value
Unload Me
End Sub V prípade potreby editácie ďalších záznamov vhodným spôsobom kód doplníš, logika je, myslím, jasná - prosté otočenie rovnice (príslušného riadku) z kódu Combobox1_Change().
Tak to by ma naozaj nenapadlo, keby si to nenapísala . Ale keď už si to nakúsla, tak trochu zafilozofujem nad pojmom skúsenosť. Skúsenosť je v prvom rade vecou motivácie, nie je to pečený holub, ktorý spadne niekomu do pusy bez nejakého úsilia. Použitie nápovedy som zmienil zámerne. Je to pmn prvý zdroj, ktorý má užívateľ používať. Až v prípade, že si nevie rady, tak skúsiť hľadať v literatúre/na internete. Až v ďalšom kroku vzniesť dotaz (ktorý v prípade dotazu vzneseného tebou bol zodpovedaný už miliónkrát, skutočne, problematika vyhľadávania je, čo sa týka četnosti, asi najčastejšie riešená na nespočte fór - z prostej pohodlnosti tázateľov overiť si pred položením dotazu, či tento už nebol čiste náhodou niekde zodpovedaný). Z mojej odpovede si si vzala to nepodstatné a čertíš sa zbytočne, nemám dôvod trpieť kvôli tomu pocitom viny. Používanie nápovedy je jedna z najlepších rád, ktorú môžeš dostať. Je nebezpečné a nezodpovedné používať funkcie, pokiaľ nepoznáš ich správnu syntax, logiku a predpoklady správneho použitia. Bude záležať len na tebe, či sa chceš stať skúseným, alebo len večne pýtajúcim sa užívateľom.
Keby si sa pozrela do nápovedy, tak by si zistila, že VYHLEDAT, na to, aby pracovala správne, vyžaduje zotriedené hodnoty. Na nezotriedené hodnoty je možné použiť napr. SVYHLEDAT (ovšem, so správnymi parametrami).
Prílohu si nevložil, tak iba schematicky, napr. maticovým vzorcom:=MAX((OblastHladania="")*(ROW(OblastHladania)<=MATCH(HladanaHodnota;OblastHladania;0))*ROW(OblastHladania))
prípadne rozšíreným filtrom
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.