aha, tak to jsem spatne pochopil, zkuste tohle:
Sub Heslo_otevreni()
 Dim Cesta As String
 Dim Nazev As String
Cesta = "c:\Documents and Settings\POKI\Plocha\"
Nazev = "Sesit_" & Date & ".xlsm"
ThisWorkbook.SaveAs Filename:=Cesta & Nazev, FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="heslo_o"
End Sub
nejlepsi zpusob je myslim podminene formatovani (v priloze)
Jo, je to tak, akce provedene makrem nelze vzit zpet (a je to logicke).
Jedinou moznosti je naprogramovat makro, ktere provede provede inverzne...
Na overeni se pouzit funkce VBA IsNumeric(UserForm1.TextBox1)
Staci tedy napsat pred samotnou procedurou dat podminku, ze kdyz nebude pravda, ze je textbox numericky, vyskoci msgbox a po nem se procedura ukonci (Exit Sub).
Zkusil jsem tvuj sesit - funguje mi to dobre, bez chyby, tak nevim, v cem muze byt problem... 
zvlastni, mne to funguje - jakou mas verzi Excelu? (ja 2007)
Mozna by to slo takto: Kdyz bude A1 = 0; tak se komentar zobrazi, kdyz bude A1 rovna jakekoliv jine hodnote, tak tam komentar nebude (funguje to na Seznam overeni dat i prepsani na klavesnici) - jen je dulezite definovat, jak ma vypadat ten komentar, zatim je jen napsan v tom kodu...
Private Sub Worksheet_Change(ByVal Target As Range)
 
 If Target.Address = "$A$1" And Len(Target.Value) > 0 Then
On Error Resume Next
 Koment = Range("c1").Comment.Text
 If Err.Number = 91 Then
 Else
 Range("c1").Comment.Delete
 End If
On Error GoTo 0
 If Target.Value = 0 Then
 With Range("c1")
 .AddComment "Tohle je komentar pri A1 = 0"
 .Comment.Shape.Select
 End With
 Selection.AutoSize = True
 Target.Select
 End If
 End If
End Sub
No tak asi takhle:Sub hledat()
 Dim i As Long
 Dim j As Long
 Dim S As String
 Dim L As String
 Dim Vysledek
 Dim Obsah As String
 
 
S = ThisWorkbook.Name
L = ActiveSheet.Name
Workbooks.Add
For i = 1 To Workbooks(S).Worksheets(L).Cells(65000, 1).End(xlUp).Row
Obsah = ""
 For j = 1 To Workbooks(S).Worksheets(L).Cells(65000, 2).End(xlUp).Row
 
 Vysledek = InStr(1, Workbooks(S).Worksheets(L).Cells(j, 2), Workbooks(S).Worksheets(L).Cells(i, 1))
 If Vysledek = 0 Then
 Else
 Workbooks(Workbooks.Count).Worksheets(1).Cells(1, i) = Workbooks(S).Worksheets(L).Cells(i, 1)
 Obsah = Obsah & Chr(10) & Workbooks(S).Worksheets(L).Cells(j, 2)
 End If
 Next j
 Obsah = Right(Obsah, Len(Obsah) - 1)
 Workbooks(Workbooks.Count).Worksheets(1).Cells(Cells(65000, i).End(xlUp).Row + 1, i) = Obsah
Next i
With Workbooks(Workbooks.Count).Worksheets(1).Range(Cells(1, 1), Cells(1, i - 1))
 .Font.Bold = True
 .HorizontalAlignment = xlCenter
 .Borders(xlEdgeBottom).LineStyle = xlContinuous
End With
End Sub
Potvrzuju, co napsal Jeza - i v 2007 a 2010 jsou tlacitka Formulare a prvku ActiveX (karta Vyvojar/Vlozit)
Po unloadovani formulare se z nej ztrati vsechny informace (zavreni sesitu samozrejme znamena unloadovani formulare), takze by se zamyslene hodnoty musely ulozit nekam do bunek a pri otevreni znovu natahnout do formulare
otazka je, co myslite formularem - opravdovy userform nebo proste jen list excelu?
Oboji je mozne nejakym zpusobem nastavit tak, aby se zobrazil, jak potrebujete, bude to asi ale chtit nejake makro pri spusteni...
No - zrovna nevim, jak bych to udelal (ale urcite by to nebyl problem), ALE to je neco, co bych rozhodne nedoporucoval, protoze se s tim pak uz neda nic delat - navic by zobrazeni bylo podobne.
Preferuji vzdy co zaznam, to bunka, protoze s takovyma informacema se da dal pracovat - to, co zadas je proti jakykoliv logice, takze se o to ani nebudu pokouset 
co takhle:
Sub hledat()
 Dim i As Long
 Dim j As Long
 Dim S As String
 Dim L As String
 Dim Vysledek
S = ThisWorkbook.Name
L = ActiveSheet.Name
Workbooks.Add
For i = 1 To Workbooks(S).Worksheets(L).Cells(65000, 1).End(xlUp).Row
 For j = 1 To Workbooks(S).Worksheets(L).Cells(65000, 2).End(xlUp).Row
 
 Vysledek = InStr(1, Workbooks(S).Worksheets(L).Cells(j, 2), Workbooks(S).Worksheets(L).Cells(i, 1))
 If Vysledek = 0 Then
 Else
 Workbooks(Workbooks.Count).Worksheets(1).Cells(1, i) = Workbooks(S).Worksheets(L).Cells(i, 1)
 Workbooks(Workbooks.Count).Worksheets(1).Cells(Cells(65000, i).End(xlUp).Row + 1, i) = _
 Workbooks(S).Worksheets(L).Cells(j, 2)
 End If
 Next j
Next i
With Workbooks(Workbooks.Count).Worksheets(1).Range(Cells(1, 1), Cells(1, i - 1))
 .Font.Bold = True
 .HorizontalAlignment = xlCenter
 .Borders(xlEdgeBottom).LineStyle = xlContinuous
End With
End Sub
NE (nebo o tom aspon nevim) 
co takhle:
Sub mail()
ActiveSheet.Copy
ActiveWorkbook.Protect "Heslo", True, False
With Application
 .Dialogs(xlDialogSendMail).Show _
 "blbla@neco.cz", _
 "Pošta!"
End With
ActiveWorkbook.Close Savechanges:=False
End Sub
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.