CFC48 napsal/a:
Bylo by mozné, aby se toto makro spustilo pri kazdem otevreni souboru?
Možné to je, ale nejdřív zítra
Nebo někdo jiný.
CFC48 napsal/a:
Nic to nedela, tak nevim jestli se to makro vubec spusti.Díky
Tak jestli to dělá to co potřebujete, tak je to fajn.
Nějak takhle?
Ještě záleží na tom, jak ta pravidla chcete uplatňovat. Jestli bude jen jedno pravidlo pro všechny buňky nebo na každou buňku jiné pravidlo nebo se bude podle něčeo vybírat...
ActiveCell.Comment.Text Text:=Left(ActiveCell.Comment.Text, 3) nebo ActiveCell.Comment.Text Text:=Replace(ActiveCell.Comment.Text, "f", "7")
Třeba takto. Výsledky zapisuje do buňky.
Jinak mrkněte třeba sem: https://office.lasakovi.com/excel/vba-funkce-vzorce/Textove-funkce-ve-VBA-Excel/
Sub koment()
Range("B1").Value = Range("A1").Comment.Text
'1.
Range("B2").Value = Left(Range("A1").Comment.Text, 3)
'2.
Range("B3").Value = Replace(Range("A1").Comment.Text, "def", "")
'3.
Text = Range("A1").Comment.Text
Range("B4").Value = Left(Text, InStr(1, Text, "(") - 1) & Right(Text, Len(Text) - InStr(1, Text, ")"))
'4.
Range("B5").Value = Replace(Range("A1").Comment.Text, "f", "7")
End Sub
tady v souboru
Když se zaregistrujete a vložíte sbalený soubor, tak se můžeme bavit konkrítně.
Makro nevkládejte do modulu, ale přímo do listu - viz. přiložený obrázek
Soubor není přiložen.
Soubor s makrem se musí sbalit
Musí být samozřejmě zamknutý list.
Buňky do kterých se má zapisovat musí mít vypnutý zámek.
Nedělal bych rozsah A:A, ale podle skutečného rozsahu (v příkladu je A1:A20)
List se v makru musí pojmenovat podel skutečnosti, případně doplnit i "Workbook" pokud se makro nebude spouštět přímo z procedury v listu.
Sub klouzavyZamek1()
Dim cell As Range
'odemknout list
Sheets("List1").Unprotect
'nastavit zámek v buňce ve sloupci B, která odpovídá podmínce
For Each cell In Range("A1:A20")
If cell.Value >= Date And cell.Value < Date + 14 Then
Cells(cell.Row, 2).Locked = True
End If
Next
'zamknout list
Sheets("List1").Protect
End Sub
=ČAS(CELÁ.ČÁST(A1/100);ZPRAVA(A1;2);0)-ČAS(CELÁ.ČÁST(B1/100);ZPRAVA(B1;2);0)
Ještě bych upravil toto: If UserForm1.Controls("TextBox" & druhySloupec).Value > "" Then na toto: If UserForm1.Controls("TextBox" & druhySloupec).Value <> "" Then
Pravý sloupec, čtvrtý TextBox od spodu je TextBox140. Další (třetí odspodu) je TextBox142. Chybí TextBox141.
Takže přejmenovat poslední 3 TextBoxy v pravém sloupci.
Tím pádem se změní cyklus. Místo For druhySloupec = 125 To 144 bude For druhySloupec = 125 to 143
Prostě spodní index a horní index (kdybyste přidával textboxy, tak je na to třeba pamatovat
pak je třeba opravit tento příkaz (v původnm špatném kodu chybí písmenko L) Správně je: prvniSloupec = prvniSloupec + 1
Takže správně je:
For druhySloupec = 125 To 143
.
.
.
prvniSloupec = prvniSloupec + 1
end if
Next
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.