< návrat zpět

MS Excel


Téma: VBA - dva sešity rss

Zaslal/a 13.4.2017 12:10

Čus, je nějaká možnost, jak při rozběhnutém VBA otevřít druhý sešit? Díks

Zaslat odpověď >

#036041
elninoslov
Sub pokus()
Dim i As Long, C As Long, ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
With ws
For i = 1 To 20000
If .Cells(i, 1) = "" Then C = C + 1: .Cells(1, 1) = C
DoEvents
Next i
End With
Set ws = Nothing
End Sub

Počas behu makra možno otvoriť iný zošit pomocou Súbor Otvoriť, nie dvojklikom.citovat
#036050
avatar
Proboha, co je to za makro? Proměnnou ws přece na nic nepotřebuješ a zda je buňka prázdná, zjišťuješ tím nejnemožnějším, nejpomalejším způsobem (tj. porovnáváš prázdný string s variantem (!) obsahujícím string). Nauč se aspoň rozdíl mezi Range.Value a Range.Text. A vůbec, proč porovnávat variant (Range.Value) se stringem "", nebo (o dost lépe) string (Range.Text) se stringem "", když nesrovnatelně rychlejší je zjistit délku stringu (Basic ji přece nepočítá, jen si bleskově přečte jeden longint ze struktury typu String) a stejně bleskově porovnat dvě čísla? Normální je napsat

Sub pokus()
Dim r As Range, i As Long, C As Long
Set r = [A1] 'Tohle přece stačí.
For i = 1 To 20000
If LenB(r(i).Text) = 0 Then C = C + 1 '.Text, NIKOLI nemotorná .Value!
DoEvents
Next i
r = C 'Proč cpát do A1 hodnotu C v každém kroku cyklu?
End Sub
citovat
icon #036052
eLCHa
@Jan-Mach
Vypadá to chytře, to co píšete. Zatím jste mne ale ničím nepřesvědčil, co by vás opravňovalo používat tento tón ("...na tomto fóru je zvykem...", "...proboha co je to za kód...", atp.).

Zastanu se elninoslova. Předpokládám, že do buňky zapisuje v každém kroku prostě proto, aby bylo opravdu vidět, že makro běží. Tady nejde o rychlost, ale o demonstraci.

A s tím Textem bych to tak růžově taky neviděl.
Vlastnost Text vrací formátovanou hodnotu buňky. Jejím používáním si zakládáte na velké problémy.
Napište do buňky číslo 123456 a zužte buňku, až se zobrazí kriminály. Pak se podívejte, co vrací vlastnost Text.
Nebo nastavte vlastní formát "0 " (0+mezera). Dostanete 123 a jste v (ano tam).
Místo toho se raději podívejte na Value2.citovat
#036053
elninoslov
Ste dobrý, o tom žádná. A práve preto by ste mal čítať, čo tazatel píše. Makro je naschvál urobené tak aby zdržovalo. Ide len o to získať čas, na kliknutie na Súbor-Otvoriť. Celé je to o jedinom slove "DoEvents". To užívateľovi dovolí "vliesť" do Excelu, počas behu makra. A vypisuje číslo práve preto, aby bolo vidieť, že makro pracuje, a že napr. uchopenie okna či označenie buniek, makro pozastaví.

Vaše rady sú cenné, ale spôsob dávkovania je hrozný. Veď keby išlo o jednoduchosť alebo rýchlosť dalo by sa použiť aj WorksheetFunction.CountIf a pod.

EDIT: No odoslal som to neskôr ako eLCHa...citovat
#036070
avatar
Nejsem si jist, jestli jste mě pochápali....
Dejme tomu, že mám puštěný formulář, kde zadám kritéria, do listboxu vyfiltruju hodnoty které potřebuji zobrazit a to je vše, co od prvního sešitu potřebuju.

Teď potřebuju otevřít druhý sešit, do kterého si potřebuju opsat hodnoty z listboxu z prvního sešitu.
Kapiš?

Nikde není daný, za jak dlouho na jak dlouho apod. ten druhý sešit budu otvírat, jestli ho budu ukládat, jestli ho budu otvírat vícekrát atd. atd.

Takže předpokládám, že kód od Elninoslov je správný a s dobrým úmyslem, ale k jinému případu..citovat
#036072
avatar
Ale jo, kluci tě pochápali dobře. Teda tvé zadání: "při rozběhnutém VBA".
Něco jiného je co píšeš teď.
Spusť svůj Formulář jako nemodální:
TvujForm.Show vbModelessPak můžeš při stále načteném UF pokračovat ...citovat
#036074
elninoslov
Hneď po prečítaní ma napadlo, či Ernesto nemyslí náhodou na modálny vs. nemodálny form, ale potom ma nejako premohla myšlienka, vzhľadom na koncepciu použitých slov vo vete, že to asi bude myslené na bežiaci kód, takže DoEvents. No a vida, to čo sa hovorí o prvom dojme, predsa len niekedy kurňa bude pravda 1citovat
#036075
avatar
Ze zadání se dalo uvažovat o ještě více možnostech jak to Ernesto asi může myslet. Prostě bylo potřeba (jako vždy) počkat, až se řádně vymáčkne.citovat
#036079
avatar
Ernesto má vždy něco v hlavě a než si uvědomí, že mu druzí nečtou myšlenky, tak to chvíli trvá :D
Ernesto děkuje..citovat

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