VBA - opakování procedury

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

neumimVBA
nováček
Příspěvky: 1
Registrován: květen 21
Pohlaví: Nespecifikováno
Stav:
Offline

VBA - opakování procedury

Příspěvekod neumimVBA » 04 kvě 2021 15:34

Dobrý den,

řekněme, že umím trochu základy VBA a dokáži napsat nějaký kód. V excelu mám kód pro odesílaní emailové zprávy. Vše funguje pro jeden řádek. Potřeboval bych poradit, jak to udělat, abych pro ostatní řádky nemusel celý kód prostě zkopírovat a jen změnit Range.

kód zde :

Sub ExcelFollowHyperlink()

Dim rngOblast As Range
Dim rngBunka As Range
Dim strAdresat As String
Dim strPredmet As String
Dim strObsah As String
Dim strRet As String
Dim SPZ As String
Dim Text As String


'náhrada vbLf
Const cstrLf As String = "%0A"

'adresát
strAdresat = Range("D2")

'předmět
HPO = Range("A2")
strPredmet = "Text"

DATUMVYKLADKY = Range("C2")
SPZ = Range("B2")
Text1CZ = Range("G2")
Text2CZ = Range("G3")
Text1EN = Range("G4")
Text2EN = Range("G5")
PodpisCZ = Range("G6")
PodpisEN = Range("G7")
Jmeno = Range("G8")
Pozice = Range("G9")
Tel = Range("G10")
Email = Range("G11")



HPO = Range("A2")

Text = Text1CZ & SPZ & " " & " a doručena dne " & DATUMVYKLADKY & " & & cstrLf & cstrLf & PodpisCZ

Worksheets("List2").Range("F1") = Text
Set rngOblast = Worksheets("List2").Range("F1")

'hlavička obsahu
strObsah = "Dobrý den" & cstrLf

'načtení adres a obsahů jednotlivých buněk oblasti
For Each rngBunka In rngOblast
strObsah = strObsah & cstrLf & rngOblast

Next rngBunka

'sestavení řetězce pro metodu FollowHyperlink
strRet = "mailto:" & strAdresat & "?"
'předmět
strRet = strRet & "subject=" & strPredmet & "&"
'obsah
strRet = strRet & "body=" & strObsah

'odeslání e-mailu
ActiveWorkbook.FollowHyperlink (strRet)

'simulované potvrzení dialogu (Odeslat, ALT+A)
'Microsoft Outlook 2010 CZ
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "%a", True

End SUB


Nebo například u funkce VzrDATUM4 = WorksheetFunction.VLookup(Najdi, Worksheets("01 Leden").Range("B4:AJ1000"), 11, False)
Mám v excelu záložky Leden - Prosinec. Pomocí vzorců jde přes IFERROR, ale jak to udělat ve VBA?

Moc děkuji za pomoc

Reklama
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3195
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: VBA - opakování procedury

Příspěvekod atari » 04 kvě 2021 18:00

Nejjednodušší je místo Range("G2") použít Cells(radek, sloupec). Takže procedura bude stejná pro všechny výpočty.

Potom si pro každý výpočet nadefinuješ "radek" a "sloupec" a proceduru zavoláš příkazem "Call"

Pokud jsou výpočty po řádcích/sloupcích za sebou, tak pak lze použít cyklus FOR NEXT.
To je ta nejpomalejší varianta výpočtu. (Při 10 výpočtech to je jedno ...)

Rychlejší výpočet lze docílit zadáním oblasti, používat cyklus For each, atd ...

Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 366
Registrován: červen 13
Pohlaví: Muž
Stav:
Offline

Re: VBA - opakování procedury

Příspěvekod elninoslov » 17 kvě 2021 07:23

Priložte prílohu s príkladom, aby bolo jasné, ako máte rozmiestnené dáta, ako sa posúvajú, koľko ich je. Zrýchlenie dosiahnete hlavne použitím polí. WorksheetFunction.VLookup dáte do bloku "on error resume next" --> "on error goto 0" s kontrolou Err.Number, ale ak je skutočne veľa cyklov, rýchlejšie bude naplniť kolekciu a prehľadávať tú, prípadne cez Evaluate vyhľadať všetky naraz. Potom upresnite aký máte mailový program. Outlook? Potom sa to dá odosielať aj inak. V hre je aj CDO metóda, pri nej ostáva ale heslo k mailu vo VBA. Všetko záleží na veľa veciach, neuvedených.


Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti