< návrat zpět

MS Excel


Téma: VBA - Automatické přidání a pojmenování listů rss

Zaslal/a 4.8.2017 14:16

Dobrý den,
mohla bych poprosit o radu?
Mám v jednom listu (C7:A350) hodnoty (jsou tam i prázdné buňky) a chtěla bych ke každé této hodnotě vytvořit nový list s odpovídajícím názvem. Tedy hodnota v buňce=název listu + po kliknutí na určitou buňku by se zobrazil odpovídající list.
Existuje na to nějaký postup?
Děkuji.
MO Professional Plus 2010

Příloha: zip37118_sesit1.zip (32kB, staženo 52x)
Zaslat odpověď >

Strana:  « předchozí  1 2 3 4   další »
#037847
Stalker
Třeba takto:
Sub VytvorList()

Dim JmenoListu As String

Application.ScreenUpdating = False
Sheets.Add After:=Worksheets(Sheets.Count):
Range("B2").Value = "Aktualizováno:"
Range("B3").Value = WorksheetFunction.Text(Sheets("Zadávací_list").Range("F7").Value, "d.m.yyyy h.mm.ss")
JmenoListu = Range("B3").Value
On Error Resume Next
ActiveSheet.Name = JmenoListu
If Err.Number = 1004 Then

Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
MsgBox "Nelze provést! => List s požadovanými daty již existuje!" & vbNewLine & "Proveďte novou aktualizaci dat tlačítkem Načti data na záložce Zadávací_list.", vbCritical, "!!! VAROVÁNÍ !!!"
Sheets("Zadávací_list").Select
Exit Sub
End If
On Error GoTo 0

Range("A11").Select
ActiveWindow.FreezePanes = True
Application.ScreenUpdating = True
End Sub


Jelikož se mi už chce spát, moc sem na tom nepřemýšlel. Určitě to půjde udělat i jinak.

Edit: Koukám, že elninoslov taky nemohl zabrat. Není nad to udělat refresh stránky 6 Dobrou.citovat
#037850
avatar
Moc Vám děkuji, funguje to.

Nechci zakládat nové téma, tak ještě jeden dotaz napíšu sem.
Ještě bych potřeboval poradit s pozastavením makra, když v cyklu "Nacti" načítá data ze serveru a trvá to různě dlouho. Potřebuji, aby makro nešlo do dalšího cyklu "VytvorList":


Sub Aktualizace()
Application.ScreenUpdating = False
Call Vymaz_Data_Material
Call Vymaz_Data_Operace
'===========================================================
Call Nacti

'===========================================================
Call VytvorList
Call Kopiruj_Data_Material
Call Kopiruj_Data_Operace
Sheets(tento).Select
Application.ScreenUpdating = True
End Sub


Makro "Nacti" je o aktualizaci dat na dvou listech: "Data_Materiál" a "Data_Operace" přes dva dotazy: "Dotaz z s-st-sl8db_Live_app" a "Dotaz z s-st-sl8db_Live_app1"


Sub Nacti()
ActiveWorkbook.RefreshAll
End Sub


Díky za vaši radu.citovat
#037854
elninoslov
Skúste refresh-núť oba dotazy samostatne a po každom použite toto:
Do
Loop While MenoListu.QueryTables("NazovDotazu").Refreshing

či to nepomôže.citovat
#037856
avatar
Zkoušel jsem to dvěma způsoby - viz kód níže.


Sub Nacti()
'Sheets("Data_Materiál").Select
'ActiveWorkbook.Connections("Dotaz z s-st-sl8db_Live_app").Refresh
Do
Sheets("Data_Materiál").Select
ActiveWorkbook.Connections("Dotaz z s-st-sl8db_Live_app").Refresh
Loop While Data_Materiál.QueryTables("Dotaz z s-st-sl8db_Live_app").Refreshing
'Sheets("Data_Operace").Select
'ActiveWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1").Refresh
Do
Sheets("Data_Operace").Select
ActiveWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1").Refresh
Loop While Data_Operace.QueryTables("Dotaz z s-st-sl8db_Live_app1").Refreshing
End Sub


Pokaždé to u řádku: Loop While ......
skončilo s chybou: Run-time error '424': Object required

Napadá vás řešení?
Díky moc za ochotu.citovat
#037860
elninoslov
V staršej verzii to bude QueryTables v novšej Connection.
Čistý tip, z brucha 2 verzie. Neskúšal som:
Sub Nacti()
With ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app")
.Refresh
Do
Loop While .Refreshing
End With

With ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1")
.Refresh
Do
Loop While .Refreshing
End With
End Sub

Sub Nacti2()
Dim i As Integer
ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app").Refresh
Do Until i = False
i = ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app").Refreshing
Loop
i = 0
ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1").Refresh
Do Until i = False
i = ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1").Refreshing
Loop
End Sub


EDIT:
A ešte ma napadá či máte skutočne správne názov dotazu, a či Data_Operace je CodeName alebo nápis na ušku listu. Je rozdiel
Data_Operace.xyz
Worksheets("Data_Operace").xyzcitovat
#037862
avatar
Poradil R. Jureček.
Vypadá, že to je OK.


Sub Nacti()
ActiveWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
End Sub
citovat
#056503
avatar
Ahoj,
abych nezakládal další vlákno, připojím se zde.

viz. příloha, potřebuji automatické generování a přejmenování listů po naplnění pomocné tabulky

1) základní podoba sešitu obsahuje jen jeden list
2) z jiného zdroje naplním pomocnou tabulku počínaje buňkou Y100. základní předpoklad do 250 řádků.
3) po naplnění pomocné tabulky automatické generování listů, co řádek, to list
4) funkce SVYHLEDAT každý list naplní příslušnými daty (podle funkce SHEET) z pomocné tabulky
5) list se VBA skriptem přejmenuje podle hodnoty v buňce D8 (soupis buněk B8&"-"&E9) ve finální verzi bude pomocný sloupec D schovaný. Dá se upravit skript aby provedl soupis B8&"-"&E9 také automaticky?

MOŽNÁ VYLEPŠENÍ :

-- pomocná tabulka se zdrojovými daty by mohla být jako samostatný list

Předem děkuju, CePino
Příloha: zip56503_sesit_2023.11_pokus_007.zip (69kB, staženo 3x)
citovat
#056504
elninoslov
Tá zdrojová tabuľka bude snáď iba na jednom liste. Lebo tu je na všetkých.
Určite by som zdrojovú tabuľku urobil na samostatnom liste.
Dáta sa musia ťahať zo zdroja pomocou vzorcov? Teda sa bude zdrojová tabuľka nejako manuálne (už po importe) meniť? Ak nie, tak vytvoriť tie listy pomocou hodnôt a nie vzorcov. Ak áno, a je potrebná vzorcová interakcia, tak nestačí volať premenovanie vo Worksheet_SelectionChange, ale je potreba to nastaviť v každom prepočítaní teda v Worksheet_Calculate.
Bude súbor obsahovať aj nejaké iné listy okrem týchto vytváraných protokolov a zdrojového listu?
O akom reálnom počte vytváraných listov sa asi bavíme? 250? Lebo vzorec je takmer na 900. 900 listov je neukočírovateľné. Neviem si predstaviť spravovať ani súbor s 250 listami.
Stĺpec D nie je potrebný vôbec (to čo je v D8 sa dá riešiť rovno v makre).citovat
#056505
avatar
Je jasné, že nejlépe by byla zdrojová tabulka na samostatném listě a počet bude snad opravdu omezený na 250 listů. Tohle jsem spachtil abych si alespoň trochu usnadnil práci a nemusel dělat každý list/protokol zvlášť. Proto svyhledat a proto zdrojová tabulka na každém listu, protože si každý list vytvářím manuálně, pravým tlačítkem na ouško listu atd... Počet listů omezím tak, že budu generovat každý stavební objekt zvlášť. Tady jsem původně myslel že to bude vše v jednom. Stavba má třeba 8 stavebních objektů - SO a 3 Provozní soubory - PS a protokoly musí být všude. Soubor mimo pomocné tabulky a protokolů nebude obsahovat žádné jiné listy. Do každého listu/protokolu se pak musí ještě vkládat fotky, výřezy z výkresů, výpočty apod.. Jediné co se pak může ve zdrojové tabulce měnit, bude Počet MJ ve sloupci 8 zdrojové tabulky. Vytvořím protokoly, předám investorovi ke kontrole a schválení a on mi to vrátí k přepravování, protože u některých prací rozporuje fakturované množství.
Cíl je takový, abych měl tu práci usnadněnou co nejvíce. Tedy naplnit zdrojovou tabulku a pak už si jen hrát s těmi fotkami atd..citovat
#056506
elninoslov
Tu som urobil zatiaľ návrh, ktorý automaticky reflektuje na zmenu počtu riadkov zdrojovej tabuľky a hneď vytvára/maže listy. Dáta ťahá pomocou vzorcov. Všetko má svoje výhody aj nevýhody. Vzorce si budú dáta ťahať hneď pri zmene zdroja. Lenže keď vy to posielate ešte inej osobe, nemôže prísť k nechcenej úprave? Vy to nezistíte, či bola zmena v zdroji, lebo vzorec to automaticky načíta do protokolu. Nebola by lepšia verzia, ktorá by tie vzorce previedla na hodnoty (alebo rovno vkladala hodnoty) pri vytvorení listov ? Ale potom by to nereflektovalo na zmeny v zdroji. Zatiaľ mrknite na tento návrh.
Příloha: zip56506_sesit_2023.11_pokus_007-2.zip (72kB, staženo 5x)
citovat

Strana:  « předchozí  1 2 3 4   další »

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