Stránka 1 z 1

změna názvu složky

Napsal: 05 dub 2014 22:30
od crgo77
Zdravím všechny přítomné,prosím o radu,protože už si s tím nevím rady.
Vytvářím databázi strojů u nás ve firmě,v databázi a bohužel už nevím jak naprogramovat to,aby když se mi zapíše hodnota do posledního řádku,aby se mi zkopírovala složka která má výchozí název nová na jméno které zapíšu do zápisu - inv.číslo. a zároveň se mi vytvořil hypertextový odkaz na tento adresář.
sešit přikládám jako přílohu.

Re: změna názvu složky

Napsal: 06 dub 2014 11:39
od Azuzula
Ahoj, vítám Tě na PC-HELP.
Předně bych Tě chtěla upozornit:
1. na spoustu prázdných řádků, které zvětšují datový objem souboru (Označ všechny přebytečné řádky a z kontextového menu vyber "Odstranit", ulož sešit)
2. při zavření sešitu se nevrátí excel do původního zobrazení... což mě docela naštvalo (a určitě nejen mě ale každého kdo ten sešit stáhnul a otevřel)
3. z tvého popisu mi není moc jasné kam ten odkaz chceš, chtělo by to ukázku přímo v sešitu jak si to představuješ

Každopádně když nevíš jak napsat některé příkazy a jde to naklikat ručně, tak použij záznamník maker. Potom už stačí osekat přebytečný kód a je to ;)

Re: změna názvu složky

Napsal: 06 dub 2014 14:37
od crgo77
Omlouvám se za ty prázdné řádky-vím o tom,že to zvětšuje markantně velikost souboru,ale prozatím je tam mám jenom proto,abych se v kódu orientoval,až to budu mít celé hotové,prázdné řádky odstraním.
Přiblížím problém s kterým si nevím rady. Při stisknutí tlačítka zápis nové položky se otevře nové okno do kterého zadávám informace o nové složce ( inventární číslo,název,popis,výrobní číslo a jiné věci ). Po kliknutí na OK se všechny hodnoty zapíšou do prvního prázdného řádku. A tady nastane můj problém se kterým si nevím rady - složku skopírovat dokážu,ale bohužel ji nedokážu přejmenovat na jméno,které se píše do prvního sloupce ( A ) , a zároveň přiřadit k této složce hypertextový odkaz.

výpis kódu,kde mám chybu:

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")

fso.CopyFolder "Z:\výchozí\*", "Z:\seznam stroju\", True

Dim NewFolderName As Long

Set objSoubor4 = fso.GetFolder("Z:\seznam stroju\nová")
objSoubor4.Name = NewFolderName

NewFolderName = TextBox1.Text()





Jen pro doplnění,omlouvám se,za to otevření v jiném formátu.postačí když se úvodní okno zavře křížkem a ne potvrzením.

Předem děkuju za rady a pomoc při řešení.Je to můj první program a je znát má nezkušenost

Re: změna názvu složky

Napsal: 06 dub 2014 15:35
od ITCrowd
Jestli jsem to dobře pochopil, tak zkus složku přejmenovat pomocí fso.MoveFolder.

Re: změna názvu složky  Vyřešeno

Napsal: 06 dub 2014 16:04
od Azuzula
Moje chyba, měla jsem napsat, že jde o řádky v listu 1-573 máš formátované a řádky od 574 do 10 a půl tisíce jsou ty které nejspíš nepotřebuješ. Těch 10tis řádků navíc ti zbytečně zvětšuje soubor o cca 300kB, není to moc vzhledem ke kapacitám úložišť, ale chce si to pohlídat, na více listech to pak jsou megabajty. Prázdné řádky v makru nevadí, aspoň je přehlednější.

Co se makra týká, přejmenování složky už tam v podstatě máš jen se špatným zápisem.

Kód: Vybrat vše

   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.CopyFolder "Z:\výchozí\*", "Z:\seznam stroju\", True
   Set objSoubor4 = fso.GetFolder("Z:\seznam stroju\nová")
   objSoubor4.Name = TextBox1.Text 'přejmenuje soubor

   ActiveSheet.Hyperlinks.Add Anchor:=Cells(DalsiRadek, 1), Address:= _
        "Z:\seznam stroju\" & TextBox1.Text, TextToDisplay:=TextBox1.Text 'zapíše hyperlink na složku
   
MsgBox "Byla vytvořena nová složka", 64, "hlášení"


PS: kód makra příště vkládej do tagů code

Re: změna názvu složky

Napsal: 06 dub 2014 16:32
od crgo77
Mnohokrát děkuju za pomoc,funguje to přesně tak,jak jsem potřeboval.Lámal jsem si s tím hlavu už týden,ale všechny pokusy,které jsem zkoušel mi nešly.
Ještě jednou děkuju.

Jen nevím,v téhle aplikaci řeším ještě jeden problém,nevím ale,jestli mám zapožit nové téma.Zkusím to tady.
Jde o to,že při zápisu nové složky používám též zaškrtávácí políčka,která označují fakta,která jsou v založené složce,jde ale o to,že mi to nenapíše "ne" když nekliknu na dané políčko ( dvakrát ).

kód přikládám.

P.S.: Omlouvám se za ten špatně vložený kód,a děkuju za upozornění.


Kód: Vybrat vše

Private Sub CheckBox1_Click()
If CheckBox1.Value = False Then
DalsiRadek = _
         Application.WorksheetFunction.CountA(Range("A:A")) + 5
         Cells(DalsiRadek, 2) = "ne"
End If
If CheckBox1.Value = True Then
DalsiRadek = _
         Application.WorksheetFunction.CountA(Range("A:A")) + 5
         Cells(DalsiRadek, 2) = "ano"
End If
End Sub

Re: změna názvu složky

Napsal: 06 dub 2014 17:08
od Azuzula
Kontrolu zaškrtávacích políček, stejně jako zápis všech hodnot do listu, bych dala do makra po kliknutí na tlačítko OK. Odpadne tak mnoho zápisů do proměnné DalsiRadek a stačí řádky spočítat jen jednou na začátku makra. Sice se takhle nezapíšou hodnoty ihned při jejich zadání do formuláře, ale až po odeslání stiskem OK, většinou je to lepší. Teď když vypíšu nějaké údaje a pak si to rozmyslím a stisknu Storno, zapsané položky zůstanou v listu.

Takže za kontrolu vyplněnosti všech polí ve formuláři kterou už máš, dej kontrolu zaškrtávacích polí, za to zápis dat do listu a nakonec nech vytvoření složky s hyperlinkem.
Makra co máš pak dál jako je checkbox_click a textbox_change můžeš smazat (nebo prozatím dát jako kometář - tlačítko "Comment Block" na nástrojové liště nebo napsat apostrof před každý řádek s kódem)

Re: změna názvu složky

Napsal: 06 dub 2014 17:40
od crgo77
Původně jsem to tahle měl,ale bohužel jsem to musel tímto způsobem rozdělit protože mi to hlásilo přetečení zásobníku ( používáme starší notebooky na kterých jsou potřebné aplikace.Na nových nám aplikace nechodí).
Tím jak jsem to musel takhle rozdělit,tím se mi stalo,že se mi hodnoty ze zaškrtávacích políček nezapisují.Ničemu by to sice nevadilo-prostě bych kliknul dvakrát,ale pokud by to šlo nějak řešit,bylo by to skvělé.

Přesto děkuji za pomoc a rady.Jsou tady odborníci kteří dokážou poradit,za to děkuji.

Re: změna názvu složky

Napsal: 06 dub 2014 18:30
od Azuzula
Teď záleží na tom, co způsobilo přetečení zásobníku, ani nevím kdy naposledy jsem na takový problém narazila.

Napadla mě možnost zapsat "ne" do všech políček při inicializaci formuláře.

Kód: Vybrat vše

Private Sub UserForm_Initialize()
DalsiRadek = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(DalsiRadek, 2) = "ne"
Cells(DalsiRadek, 3) = "ne"
Cells(DalsiRadek, 4) = "ne"
Cells(DalsiRadek, 5) = "ne"
Cells(DalsiRadek, 6) = "ne"
Cells(DalsiRadek, 7) = "ne"
End Sub


Taky by mohlo pomoci použít globální proměnnou úplně na první řádek modulu (před první makro)

Kód: Vybrat vše

Public DalsiRadek As Long

a ve všech makrech pak vymazat zjišťování řádku včetně deklarace proměnné DalsiRadek. Proměnná se uloží už při inicializaci formuláře.

Nakonec by asi bylo vhod při stisku tlačítka Storno vymazat celý řádek kvůli přehlednosti v listu seznamu.

Kód: Vybrat vše

Private Sub CommandButton2_Click()
Range("A" & DalsiRadek & ":L" & DalsiRadek).ClearContents
Unload zápis
End Sub