Makro MojeMakro pracuje se dvěma parametry - jméno a datum.
Sub MojeMakro(ByRef Jmeno As String, ByRef Datum As Date) Které mu předá kód uvedený v modulu prvního listu.
Private Sub Worksheet_Change(ByVal Target As Range) Target je některá z kontrolovaných (spouštěcích) buněk prvního listu ve sloupci E - tedy ta, do které zapisuješ datum např. E5
Tedy volání
Call MojeMakro(Target.Offset(, -3).Value, Target.Value)Target.Offset(, -3).Value = jméno (E5 posunutá o 3 doleva, tedy hodnota buňky B5)
Target.Value = datum (hodnota buňky E5)
Tedy pro buňku E5
Call MojeMakro(Renata, 12.10.2023)
http://gymzv.sk/~vyuka/informatika/excel/excelentne/chipex05/08/excel_vba_funkce.html
zaměř se na "Předávání parametrů obecně"
rng je pouze jméno proměnné, můžeš si jí nazvat jak chceš třeba TatkaSmoula
Resize, offset viz
https://office.lasakovi.com/excel/vba-listy-bunky/excel-vba-resize-offset/#99
Třeba takto: viz soubor
Dej si pozor na zápis dat, jména byla zadána s počáteční mezerou - odstranil sem.
Vyzkoušej tohle:
? Application.WorksheetFunction.VLookup("15.2", Range("Kalendář1"), 2, 0)
? Application.VLookup("15.2", Range("Kalendář1"), 2, 0)
upraveno
Například:
Cells(1, 2).Value = Year(Date)
Řešení pomocí makra. Oba soubory musí být ve společné složce, aby na sebe "viděly" a nebylo nutné při každém spuštění zdrojový soubor vybírat ručně.
Ne Jedině použít vlastní UserForm.
Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(1, 4).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Možná kecám, nemám jak ověřit, sem na telefonu. Ale nějak se nemůžu zbavit dojmu, že proměnná musí být v ClassModule, aby byla viditelná ve všech modulech.
EDIT
Tak kecám
Pro použití proměnné ve všech modulech stačí její deklaraci uvést jako PUBLIC nebo GLOBAL. Tedy na začátek modulu
GLOBAL globValue as long
To použití ClassModule bylo pro jiný případ (který si už samozřejmě nepamatuju), a nedaří se mi to dohledat.
Takže Ti nevadí, že makro pracuje pomalu a chceš ho ještě zpomalit?
Další varianta pomocí VBA
Tak sem si přečetl Jirkův kód, poposednul si a nejspíš pochopil záměr.
Výsledek je v příloze. Kód se nachází v modulu, místo jmen jednotlivých listů, jsou použity CodeName listů. Když se rozhodneš listy přejmenovat nebude to mít vliv na kód a nedojde k havárii.
PS: Na Jirkův popud upravená příloha
Do sešitu sem se koukal, ale přiznám se, že sem vůbec nepochopil jak to má fungovat.
Tak jen k té deklaraci pole. Velikost pole se mění příkazem ReDim
Index pole začíná na indexu 0.
Tedy:
Dim MyArray()
Dim Pocet as Integer
Pocet = 4
ReDim MyArray (Pocet) 'vytvoří pole o pěti "položkách" (0 až 4)
myarray = Sheets("List1").Range("A1:A5").Value
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.