Stránka 1 z 1

Kód VBA Access - poskytnou filtr pro podformulář

Napsal: 05 bře 2013 13:38
od geniusz
Zdravím,
Prosím zkušenější o bych radu!
Ve své databázi, mám formulář zobrazující souhrnný přehled různých akci dle různých kriterii. Data si vybere dle potřeby z několika tabulek či dotazů. Hlavním kriteriem pro výběry je však období (datum od a datum do). Pro zpřehlednění bych potřeboval vložit do formuláře další podformuláře jako datové listy, které by zobrazily výpisy dle " WHERE [Datum] Between " & datum od & " And " & datum do &". Ať hledám jak hledám, nenašel jsem podobné řešeni, nebo jsem to možná pochopil jinak.
Líbí se mi jedno řešeni, ale funguje jen na otevřený formulář nebo sestavu v jiném okně.
Jeho příklad je tady:

Kód: Vybrat vše

      strFilter = "[Datum] Between #" & strObdobiOd & "# AND #" & strObdobiDo & "#"

      With Form![PodFormName]
         .Filter = strFilter
         .FilterOn = True
      End With


Nevím ale jak ho spustit v podformuláři?

Re: Kód VBA Access - poskytnou filtr pro podformulář

Napsal: 06 bře 2013 11:18
od Štučka
Něco takového

strFilter = "[Datum] Between #" & Me.strObdobiOd & "# AND #" & Me.strObdobiDo & "#"
Me.PodFormName.Form.Filter = strFilter
Me.PodFormName.Form.FilterOn = True

Re: Kód VBA Access - poskytnou filtr pro podformulář

Napsal: 07 bře 2013 11:02
od geniusz
Dobrý den,
Děkují za odpověď! Někde budu mít nějakou chybičku. Hlasi mí to chybu " Method or data mamber not found"
Kód jsem pro testováni vložil do procedura Click tlačítka vypis:

Kód: Vybrat vše

=>  Private Sub vypis_Click()
          Dim datObdobiOd As Date
          Dim datObdobiDo As Date
          Dim strObdobiOd As String
          Dim strObdobiDo As String
          Dim strFilter As String
                   
'  Připrava datumu
         If IsNull(txtObdobiOd) Then
         datObdobiOd = DateAdd("d", -7, Date)
         Else
         datObdobiOd = txtObdobiOd
         End If
         If IsNull(txtObdobiOd) Then
         datObdobiDo = Date
         Else
         datObdobiDo = txtObdobiOd
         End If
         
   strObdobiOd = CStr(Month(datObdobiOd) & "/" & Day(datObdobiOd) & "/" & Year(datObdobiOd))
   strObdobiDo = CStr(Month(datObdobiDo) & "/" & Day(datObdobiDo) & "/" & Year(datObdobiDo))
         
   strFilter = "DatumTransakce Between #" & Me.strObdobiOd & "# AND #" & Me.strObdobiDo & "#"

         Me.dtlistPrehledTrzbyVydaje.Form.Filter = strFilter
         Me.dtlistPrehledTrzbyVydaje.Form.FilterOn = True
   End Sub

Po odstraněni "Me." před proměnnou compiler zvýrazní modře text za dalším "Me." Nasledně i v

Kód: Vybrat vše

Me.dtlistPrehledTrzbyVydaje.Form.Filter = strFilter


Přiznám se, jsem samouk a neumím anglicky. Informace čerpám z google překladu a http://msdn.microsoft.com, což je taký strojový překlad a nejsem si jisty jestli chápu odkazovaní "Me" a vůbec nechápu rozdíl mezi " Me." a "Me!".

Re: Kód VBA Access - poskytnou filtr pro podformulář

Napsal: 08 bře 2013 16:31
od Štučka
Tečka předchází Vlastnosti a metody:
Me! Podformcontrolname.Formulář! Controlname.Value
Me! Podformcontrolname.Formulář.Recordset! Fieldname.Value
Me! Controlname.Value

Vykřičník předchází objekty, které obsahuje ovládací prvky a pole:
Me! ControlName
Me! Podformcontrolname
Me.Recordset! Fieldname
Formuláře! Jmeno_form

Spíše jako
Me!PodFormName.Form.Filter=strFilter
Me!PodFormName.Form.FilterOn=True

Protože PodformName je název PodForm Control

Re: Kód VBA Access - poskytnou filtr pro podformulář

Napsal: 09 bře 2013 00:57
od geniusz
Dobrý den,
Moc krát děkuji za vysvětlení!
Nic méně, při použiti ! po "Me"

Kód: Vybrat vše

       Me!dtlistPrehledTrzbyVydaje.Form.Filter = strFilter
       Me!dtlistPrehledTrzbyVydaje.Form.FilterOn = True

mi místo "MsgBox" vyskočí
"Run-time error '2465':
Aplikace Microsoft Access nenalezla pole dtlistPrehledTrzbyVydaje odkazované ve výrazu."

Při dalším hledaní na webu jsem na stránkách
http://social.msdn.microsoft.com/Forums/en/accessdev/thread/3d4cdea9-9045-4e78-9130-85ee5593fb21
narazil na obdobný problém, jehož řešení vypadá takto

Kód: Vybrat vše

Private Sub Language_AfterUpdate ()
Dim stfilter As String
stfilter = Me.Language.Value
    Me. [LABELS1 Subform]. Form.Filter = "[LanguageName] = '" & stfilter & "'"
    Me. [LABELS1 Subform]. Form.FilterOn = True End Sub

Nevím co si představit pod pojmem LABELS1?
Nemohla by tam být nějaká vlastnost nebo metoda?
A když už, tak potom jaká?

Re: Kód VBA Access - poskytnou filtr pro podformulář

Napsal: 10 bře 2013 02:04
od Štučka
Vrátíme zpět k předchozí verzi.
strFilter = "DatumTransakce Between #" & Me.strObdobiOd & "# AND #" & Me.strObdobiDo & "#".
Me. nejsou zde zapotřebí. Toto nezávisli proměnné.
strFilter = "DatumTransakce Between #" & strObdobiOd & "# AND #" & strObdobiDo & "#"

Zkuste
With Me.[PodFormulářJmeno].Form
.Filter = strFilter
.FilterOn = True
End With

Re: Kód VBA Access - poskytnou filtr pro podformulář  Vyřešeno

Napsal: 11 bře 2013 04:09
od geniusz
Dobrý den,
Děkuji za pomoc, nyní už vše běží podle mých představ. Problem totiž nebyl v kódu ale při pokusech jsem přehazoval podformulář a podsestavu a zapomněl jsem přejmenovat název ve vlastnostech na kartě jiné. S touto chybou byla spojena Run-time hláška o nenalezení pole dtlistPrehledTrzbyVydaje.
Funkční je jak

Kód: Vybrat vše

   strFilter = "DatumTransakce Between #" & strObdobiOd & "# AND #" & strObdobiDo & "#"
     Me!dtlistPrehledTrzbyVydaje.Form.Filter = strFilter
     Me!dtlistPrehledTrzbyVydaje.Form.FilterOn = True

tak

Kód: Vybrat vše

   strFilter = "DatumTransakce Between #" & strObdobiOd & "# AND #" & strObdobiDo & "#"
     With Me!dtlistPrehledTrzbyVydaje.Form
       .Filter = strFilter
      .FilterOn = True
    End With


Ještě jednou moc díků!