Stačí zmeniť
MAIL_ADRESAT = "niekto@odniekial.com"
na
MAIL_ADRESAT = .Range("B5").Value2
a vyplní adresáta (alebo adresátov oddelených bodkočiarkou/středníkem) napr. z bunky B5.
Kdybych si předpřipravil adresáře
__pdfhs0002
__pdfhs0003
a další podle čísla HS (hospodářské středisko).
Dalo by se to nastavit tak, abych nemusel "editovat" toho ODESILATEL_MAIL?
A co mám změnit, aby se připravený email zobrazil, ten jeho dialog, aby to nezůstalo "skryté", neozbrazené?
Dajte si tam dočasne toto makro na výpis zoznamu účtov.
Sub Vypis_Uctov_Outlooku()
Dim OutApp As Object, oUcet As Object
On Error Resume Next
Set OutApp = GetObject(, "Outlook.application") 'ověření, zda není Outlook otevřený
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application") 'otevření Outlooku, pokud není otevřen
If OutApp Is Nothing Then Debug.Print "CHYBA" 'chybová správa o otvírání Outlooku
End If
On Error GoTo 0
For Each oUcet In OutApp.Session.Accounts 'výpis účtů
Debug.Print oUcet & "......." & oUcet.CurrentUser.Address
Next oUcet
Set OutApp = Nothing: Set oUcet = Nothing
End Sub
Zobrazte si okno Immediate (Ctrl+G), Potom spustite toto makro. V okne Immediate sa vypíše zoznam názvov kont a adries v Outlooku. Lebo názov konta nemusí byť emailová adresa. Názov konta môže byť "Ferko Mrkvička z firmy ABC s.r.o." a email má "ferko.mrkvicka@abc.com". No názov konta môže byť aj rovnaký ako mail. S čím som počítal. Možno to u Vás tak nie je. Ak to tak nie je, tak ten názov daného konta z okna Immediate skopírujte do makra do konštanty ODESILATEL_MAIL.
Const ODESILATEL_MAIL = "Ferko Mrkvička z firmy ABC s.r.o."
alebo konštantu nechajte tak a riadok
If oUcet = ODESILATEL_MAIL Then Exit Forzmeňte naIf oUcet.CurrentUser.Address = ODESILATEL_MAIL Then Exit For
u mňa všetko funguje, mám v Outlooku 8 účtov, a môžem si vybrať ktorý chcem. Ak účty premenujem tak potom musím urobiť jednu z vecí čo som teraz napísal, a zase všetko funguje. No problema.
EDIT:
A ešte ma napadlo. Zmeňte si
With ActiveSheetnaWith ThisWorkbook.ActiveSheet
Tuším predvčerom som to tu niekde vysvetľoval. Teraz sa mi to práve stalo, že pri debugovaní som sa prepol na iný zošit, a exportovalo mi aktívny list z toho iného zošitu. Pridanie ThisWorkbook aj toto riziko eliminuje
No trochu sa posnažte....
Lubo dal CZ verziu, tak si to prehoďte do SK/EN verzie (alebo akú máte)
maticový vzorec (Ctrl+Shift+Enter)
SK:
=IFERROR(INDEX($G$4:$G$10;MATCH(ROUND(C4-B4;3);ROUND($E$4:$E$10;3)))*A4;0)
CZ:
=IFERROR(INDEX($G$4:$G$10;POZVYHLEDAT(ZAOKROUHLIT(C4-B4;3);ZAOKROUHLIT($E$4:$E$10;3)))*A4;0)
alebo nematicový vzorec (Enter):
SK:
=IFERROR(LOOKUP(2;1/(ROUND(C4-B4;3)>=ROUND($E$4:$E$10;3));$G$4:$G$10)*A4;0)
CZ:
=IFERROR(VYHLEDAT(2;1/(ZAOKROUHLIT(C4-B4;3)>=ZAOKROUHLIT($E$4:$E$10;3));$G$4:$G$10)*A4;0)
Niektoré čísla počítali správne aj predošlé varianty, napr 99,1-99 alebo 99,3-99,2
Pridané ošetrenie všetkých možných stavov a chýb, čo ma napadlo...
Som teraz len na mobile...
Vyremujte riadok
On Error GoTo KONEC
Kde to zastaví?
Ta cesta "\__pdfhs\" existuje?
Čo obsahuje bunka B4?
Zápis som sa snažil urobiť "Vašim spôsobom".
Ak sa Range nevzťahuje na žiadny list pracuje s práve aktívnym listom. To môže spôsobiť nevratné zmeny, ak nevedomky spustíte makro nad iným listom. Preto je bezpečnejšie odkazovať na list, ktorého sa to týka. T tomto prípade Worksheets("mrp"). A aby ste nemusel pred každým Range alebo Cells alebo inou vlastnosťou, metódou, či procedúrou listu používať Worksheets("mrp"), tak je na to príkaz "With", ktorý značí, že všetko čo medzi "With" a "End With" zapíšete bodkovou notáciou (začína bodkou) sa vzťahuje práve k objektu zadefinovanému vo "With". Používa sa to aj ak idete meniť veľa vlastností nejakého objektu (napr. rozmery obrázku na nejakom liste).
Napr.
With Worksheets("mrp").Pictures("obr1")
.Left = 10
.Top = 20
.Width = 100
.Height = 150
End With
No skúste
V tom prípade by malo stačiť iba vymeniť slovo
List2
za slovo
ActiveSheet
Upravil som makro vyššie. Ak tam nechcete mať počítaný INDEX na bunku, tak sa dá makrom vytvoriť iba pole odkazov na dané bunky.
Pr.
Sub makro3()
Dim i As Long, Radku As Long, Posun As Long, Vzorce()
With Worksheets("mrp")
Radku = .Cells(Rows.Count, "A").End(xlUp).Row - 1
ReDim Vzorce(1 To Radku, 1 To 2)
For i = 1 To Radku
Posun = Int((i - 1) / 4) * 4
Vzorce(i, 1) = "=B" & 5 + Posun
Vzorce(i, 2) = "=B" & 4 + Posun
Next i
.Range("AJ2").Resize(Radku, 2).Formula = Vzorce
End With
End Sub
alebo jednoduchšie takto:
Sub makro4()
With Worksheets("mrp")
.Range("AJ2:AK5").Formula = Application.Transpose(Array(Array("=B5", "=B5", "=B5", "=B5"), Array("=B4", "=B4", "=B4", "=B4")))
posledni_radek = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("AJ2:AK5").AutoFill Destination:=.Range("AJ2:AK" & posledni_radek), Type:=xlFillDefault
End With
End Sub
Tak B4 alebo B5? Vo všetkých bunkách AJ rovnaký odkaz? alebo vždy "riadkovanie" v AJ po 4-och riadkoch s odkazom na B4, ďalšie 4 riadky na B5, ďalšie 4 na B6, ...
Vyrobte prílohu, kde MANUÁLNE vypíšte vzorce, aké tam chcete mať.
Pr.
Sub makro2()
With Worksheets("mrp")
posledni_radek = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("AJ2").Resize(posledni_radek - 1, 2).Formula = Array("=INDEX($B:$B,5+INT((ROW()-2)/4)*4)", "=INDEX($B:$B,4+INT((ROW()-2)/4)*4)")
End With
End Sub
Všetko záleží na mnohým veciach. Vyhodnotiť môžete v Initialize a zrušiť po Wait v Activate. Formulárové prvky meníte z makier v Moduloch alebo v Module Formu? Príklad uvarený z vody. Proste si vymýšľam, keď nedáte prílohu. Takto to funguje asi ako chcete, za predpokladu, že chcete z vody varené...
Stačí? Prispôsobíte si to?
V čom je presne problém ???
No a kedy teda platí
"kabaka" napsal/a:
Súbor sa automaticky makrom uloží a pred uložením vymaže text.
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.