Hallo,
ich bin total verzweifelt!!
Habe hier alles durchstöbert, aber finde einfach nichts zu meinem Problem :'(
Ich möchte einfach per Code die DatenQuelle meines Unterformlars, das als PivotChart angezeigt wird (Fenster in Register) ändern.
Habe mir das so vorgestellt, aber irgendwie bekomm ich es nicht hin, das er mir dann das PivotChart richtig anzeigt!
Er zeigt mir dann immer ein leeres PivotChart und verschiebt es auch noch ganz blöd :'(
Hier der Code im Unterformular:
Bis jetzt ist mir noch nichts besseres eingefallen als durch focus die Bedingung auszulösen....
Public Function DatenQuelle() As String
Dim SQLstr As String, krit As String
If Not IsNull(Forms!Bericht.Monatauswahl) And Not IsNull(Forms!Bericht.Jahrauswahl) Then
SQLstr = "SELECT Sum(TAB_Ausschuss.GFehler) AS SummevonGFehler, Sum(TAB_Ausschuss.Stück) AS SummevonStück, [SummevonGfehler]/[SummevonStück]*100 AS Ausschuss, Datum.K_Datum, Datum.TRW_Monat FROM TAB_Ausschuss RIGHT JOIN Datum ON TAB_Ausschuss.Datum = Datum.K_Datum GROUP BY Datum.K_Datum, Datum.TRW_Monat"
krit = " HAVING (((Datum.TRW_Monat) Like '" & Forms!Bericht.Monatauswahl & ", " & Forms!Bericht.Jahrauswahl & "')) ORDER BY Datum.K_Datum"
If krit <> "" Then SQLstr = SQLstr & krit
MsgBox SQLstr
DatenQuelle = SQLstr
End If
End Function
Private Sub Form_GotFocus()
Me.RecordSource = DatenQuelle
End Sub
Hier der Code im Hauptformular:
Private Sub Form_Current()
Dim seite As Page
For Each seite In Me!RegisterBericht.Pages
seite.Visible = False
Next
End Sub
Private Sub BerichtLaden_Click()
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
DoCmd.Requery "UFrm_" & Me.Berichtauswahl & "_pivot"
Next
'Me.UFrm_ " & Me.Berichtauswahl & "_pivot.setfocus geht nicht =(
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
End If
End Sub
Ich wäre überglücklich wenn mir da jemand zu helfen weiß!!
Lg
Adrian
hi,
es ist wohl ein eher heikles thema :(
habe es soweit verändert, aber passt immer noch nicht so recht....
Private Sub BerichtLaden_Click()
Dim Berichtart As Form, BerichtStr As String
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
Next
BerichtStr = "UFrm_" & Me!Berichtauswahl & "_pivot"
Berichtart.Name = BerichtStr
Berichtart.RecordSource = DatenQuelle
Berichtart.Requery
'Me.Ufrm_Ausschuss_Pivot.Form.RecordSource = DatenQuelle
'Me.Ufrm_Ausschuss_Pivot.Form.Requery
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
End If
Me.Refresh
End Sub
Public Function DatenQuelle() As String
Dim SQLstr As String, krit As String
If Not IsNull(Forms!Bericht.Monatauswahl) And Not IsNull(Forms!Bericht.Jahrauswahl) Then
SQLstr = "SELECT Sum(TAB_Ausschuss.GFehler) AS SummevonGFehler, Sum(TAB_Ausschuss.Stück) AS SummevonStück, [SummevonGfehler]/[SummevonStück]*100 AS Ausschuss, Datum.K_Datum, Datum.TRW_Monat FROM TAB_Ausschuss RIGHT JOIN Datum ON TAB_Ausschuss.Datum = Datum.K_Datum GROUP BY Datum.K_Datum, Datum.TRW_Monat"
krit = " HAVING (((Datum.TRW_Monat) Like '" & Forms!Bericht.Monatauswahl & ", " & Forms!Bericht.Jahrauswahl & "')) ORDER BY Datum.K_Datum"
If krit <> "" Then SQLstr = SQLstr & krit
MsgBox SQLstr
DatenQuelle = SQLstr
End If
End Function
ich bete, das jmd. eine Lsg. hat
lg
adrian
Hallo
Zitates ist wohl ein eher heikles thema
so wird's sein :)
Zitathabe es soweit verändert, aber passt immer noch nicht so recht....
ja, nur was passt denn nocht nicht - wo reibt's?
Hi Peter,
ja eigentlich so einiges, aber mal ganz pregnant gesagt...
habe ich das hier mal so gestaltet:
Private Sub BerichtLaden_Click()
Dim Berichtart As Form
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
Next
For Each Berichtart In Forms
If Nz(InStr(Berichtart.Name, Me!Berichtauswahl & "_pivot"), "") Then
Berichtart.RecordSource = DatenQuelle
Berichtart.Requery
End If
Next
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
End If
Me.Refresh
End Sub
möchte eben das er die 3 Unterformulare "UFrm_Ausschuss_pivot", "UFrm_X_pivot" und UFrm_Y_pivot" , im Formular Bericht je nach Wert der Kombibox im Hauptformular, lädt. bzw. neu abfrägt.
Jetzt gibt der eumel mir mit "Each Berichtart in Forms" nur 2 Formulare >:(
Also keines von denen ich überhaupt eins suche....
Am Ende will ich mir im eben 3 pivot charts anzeigen lassen (je reiter im register eins), deren Abfrage jeweils mit dem Wert aus 2 Komboboxen im Hauptformular
interagiert.
Der SQL Code scheint zu passen, nur frisst er ihn, weiß aber dann nicht das pivot damit aufzubauen :'( :'(
und da liegt der größte Hund begraben. ???
hoffe deine trickkiste ist groß genug :)
lg
adrian
Hallo,
folgende Frage:
was gibt das Ding hier aus?
Nz(InStr(Berichtart.Name, Me!Berichtauswahl & "_pivot"), "")
InStr liefert doch eine Zahl zurück
(aus der Onlinehilfe von Access 2007)
Gibt einen Wert vom Typ Variant (Long) zurück, der die Position des ersten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge angibt.
Fall Rückgabewerte von InStr
Zeichenfolge1 hat die Länge Null 0
Zeichenfolge1 ist Null Null
Zeichenfolge2 hat die Länge Null Start (Bei dir nicht angegeben)
Zeichenfolge2 ist Null Null
Zeichenfolge2 ist nicht vorhanden 0
Zeichenfolge2 ist in Zeichenfolge1 enthalten Position, an der Übereinstimmung beginnt
Start > Zeichenfolge2 0
Ich vermute, dass hier der Haken zu suchen sein wird -
Erstens im Durchlauf der Liste der Formulare - die kenn ich eigentlich nur in der Form:
Private Sub PrintFNames()
Dim db As DAO.Database
Dim objDoc As DAO.Document
Set db = CurrentDb
For Each objDoc In db.Containers("Forms").Documents
Debug.Print objDoc.Name
Next objDoc
End Sub
sowie dem oben angesprochenem Vergleich mit einem zusammengestzten Forms-Namen
...und zweitens im Zuweisen der Datenherkunft.
Was gibt
Debug.Print Berichtart
aus?
Den Form-Namen bekommst du doch nur mit Berichtart.Name angezeigt
Beim Zuweisen der Datenherkunft fehlt mir zudem das .Form - ähnlich dem hier:
Zitat'Me.Ufrm_Ausschuss_Pivot.Form.RecordSource = DatenQuelle
siehe zu Problemen mit Unterformularen den Link http://www.mvps.org/access/forms/frm0031.htm (http://www.mvps.org/access/forms/frm0031.htm)
Hi,
das Ding nz() Kriterium ist eher überflüssig, denk ich.
Weil der Name einer Form kann ja nicht null sein. Wollte damit nur auf Nr. sicher gehen :-[
Mit Instr() wollte ich eben kuckn ob der Name eines Formulars, gleich dem in der in der Kombibox ausgewählten Namen, ist.
Mit "For each Berichtart in Forms" wurden mir aber nur 2 Formularnamen gefunden....
Ich löse es mal auf deine Weise ;D
Hoffe es klappt!
Lg und vielen Dank schon mal ;D
Hi Peter,
habe es jetzt mal so verändert:
Private Sub BerichtLaden_Click()
Dim Berichtart As Form, dB As DAO.Database, Doc As DAO.Document
Set dB = CurrentDb
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
Next
For Each Doc In dB.Containers("Forms").Documents
If InStr(Doc.Name, Me!Berichtauswahl & "_pivot") Then
Me.Ufrm_Ausschuss_Pivot.Form.RecordSource = DatenQuelle
Me.Ufrm_Ausschuss_Pivot.Form.Requery
'DoCmd.RunCommand acCmdPivotRefresh
End If
Next
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
End If
Me.Refresh
End Sub
Ich würde nur sehr gerne diesen beiden Zeilen variabel haben,
Me.Ufrm_Ausschuss_Pivot.Form.RecordSource = DatenQuelle
Me.Ufrm_Ausschuss_Pivot.Form.Requery
sodass wenn in der KOmbibox Berichtart z.B. Anwesenheit steht,
das ganze so aussieht:
Me.Ufrm_Anwesenheit_Pivot.Form.RecordSource = DatenQuelle
Me.Ufrm_Anwesenheit_Pivot.Form.Requery
Außerdem bekomm ich kein vernünftiges Pivotchart ausgegeben :'( :'(
Es wird immer verschoben bzw. die Datenfelder & Rubriken nicht zugeordnet!
Lg
Adrian
Hallo,
das "nz()-Ding" ist nicht nur überflüssig, es ist schlichtweg falsch..
ZitatIch würde nur sehr gerne diesen beiden Zeilen variabel haben,
Me.Ufrm_Ausschuss_Pivot.Form.RecordSource = DatenQuelle
Me.Ufrm_Ausschuss_Pivot.Form.Requery
sodass wenn in der KOmbibox Berichtart z.B. Anwesenheit steht,
das ganze so aussieht:
Me.Ufrm_Anwesenheit_Pivot.Form.RecordSource = DatenQuelle
Me.Ufrm_Anwesenheit_Pivot.Form.Requery
Me("Ufrm_" & Me!Berichtart & "_Pivot").Form.RecordSource = DatenQuelle
Me("Ufrm_" & Me!Berichtart & "_Pivot").Form.Requery ' verm. überflüssig
Hi,
Danke...hat bei mir deshalb Nie geklappt weil es ja auch Berichtauswahl und nicht Berichtart heißen muss :-X
Nun, bleibt das Problem mit dem Pivotchart :'(
Muss ich wohl selber per Code alles generieren oder....
Nur wie mach ich das am besten???
Lg
Adrian
Private Sub BerichtLaden_Click()
Dim Berichtart As Form, dB As DAO.Database, Doc As DAO.Document
Set dB = CurrentDb
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
Next
For Each Doc In dB.Containers("Forms").Documents
If InStr(Doc.Name, Me!Berichtauswahl & "_pivot") Then
Me("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
Me("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.Requery
'DoCmd.RunCommand acCmdPivotRefresh
End If
Next
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
End If
Me.Refresh
End Sub
Hi,
diese leidige InStr und NZ Geschichten hast immer noch drin? Weg damit!
Vergleiche besser so:
If Doc.Name = Me!Berichtauswahl & "_pivot" Then
Me("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
...wird nicht funktionieren!
Nach Me kommt ein Punkt oder besser ein Rufzeichen und du kannst den Formularnamen so nicht an die Auflistung übergeben!
Ein Unterformular ist praktisch ein Steuerelement in seinem Hauptformular und muß RICHTIG angesprochen werden!
Siehe dazu bitte www.donkarl.com?FAQ4.2
(http://www.donkarl.com?FAQ4.2)
und den darin enthaltenen Link http://www.mvps.org/access/forms/frm0031.htm (http://www.mvps.org/access/forms/frm0031.htm)
Wieviele verschiedene UFrm blabla_pivot gibts denn da überhaupt?
HAllo,
@database:
"...wird nicht funktionieren!"
sehe ich etwas anders:
a) es wird kein Formularname übergeben, sondern ein (UFO-)Steuerelementname (der oftmals gleichlautend mit dem eigentlichen Formularnamen ist und deshalb für Verwirrungen sorgt)
b) Ausführlich geschrieben würde das so lauten:
Me.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
Wobei ME auch noch ersetzt werden könnte durch den Formular-Klassennamen:
Form_MeinAktForm.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
oder als Forms-Auflistung:
Forms.Item("MeinAktForm").Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
bzw:
Forms!MeinAktForm.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
und ganz ausführlich:
Application.Forms.Item("MeinAktForm").Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
;)
Na dann mal guten Morgen!
Die halbausführliche Form würde da ja schon besonders gute Dienste leisten :)
@DF6GL
Zitata) es wird kein Formularname übergeben
ist diskussionslos hinzunehmen - mein Fehler, nicht genau beschrieben! :-\
Die von Knatterkopf praktizierte Schreibweise führt unweigerlich zu einem Fehler - daher auch mein Hinweis auf das Steuerelement im Hauptform .... etc.
mein Argument '....wird nicht funktionieren' bezieht sich auf die von Knatterkopf gewählte Syntax
Hi Peter, ich war mal kurzfristig im Prüfungsstress, deshlab keine Antwort ;)
Vielen Dank erst mal!
Es gibt drei solche "Urfm_blabla_pivot", aber es oll erst mal nur mit einem funktionieren ;D
Habe das jetzt so angepasst:
Private Sub BerichtLaden_Click()
Dim dB As DAO.Database, Doc As DAO.Document
Set dB = CurrentDb
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
Next
For Each Doc In dB.Containers("Forms").Documents
If Doc.Name = "UFrm_" & Me!Berichtauswahl & "_pivot" Then
Me.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
'Me.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.Requery
'DoCmd.RunCommand acCmdPivotRefresh
End If
Next
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
End If
Me.Refresh
End Sub
Das Unterformular bekommt jetzt seine Daten, wird jedoch noch nichts angezeigt.
Das muss man extra mit Code generieren, schätze ich mal ins blaue...
Hast du da einen Tipp, oder eine Seite wo sowas schon mal praktiziert wurde??
lg
Adrian
Hi, habe beim wühlen sowas gefunden:
Sub ConfigureSA0903PivotTable()
Dim fst1 as PivotFieldset
DoCmd.OpenForm strFormName, acFormPivotTable
Set frm1 = Forms.Item(strFormName)
With frm1.PivotTable.ActiveView
Set fst1 = .FieldSets("[OrderDate By Month]")
.FilterAxis.InsertFieldSet fst1
Set fst1 = .FieldSets("ShipCountry")
.ColumnAxis.InsertFieldSet fst1
Set fst1 = .FieldSets("ShipCity")
.ColumnAxis.InsertFieldSet fst1
Set fst1 = .FieldSets("CompanyName")
.RowAxis.InsertFieldSet fst1
Set fst1 = .FieldSets("Subtotal")
.DataAxis.InsertFieldSet fst1
Set fst1 = .FieldSets("Freight")
.DataAxis.InsertFieldSet fst1
Set fst1 = .FieldSets("OrderID")
.DataAxis.InsertFieldSet fst1
End With
DoCmd.Close acForm, frm1.Name, acSaveYes
End Sub
geht in die richtige Richtung oder...?
Taadaaa ;D
habe es irgendwie zusammengestückelt und es funktioniert ;D
Das einzige was noch stört, ist das die Pivottabelle, immer ans obere linke eck des Hauptformulars geschoben wird :-\
Sollte aber schon im Reiter des Registersteuerelements drin sitzen! :'(
Hat da jmd. oder speziell du Peter eine Idee??
'Funktion zur Anpassung des Pivotbereichs
Private Sub Pivotcharge()
Dim pivFrm, pivStyle, pivView, pivTotalFehler, pivTotalStück
Set pivFrm = Me.Ufrm_Ausschuss_Pivot.Form
Set pivStyle = pivFrm.PivotTable
Set pivView = pivStyle.activeView
pivFrm.RecordSource = DatenQuelle
Application.Screen.MousePointer = 11
pivFrm.Requery
Application.Screen.MousePointer = 0
pivView.rowaxis.insertfieldset pivView.fieldsets("K_datum")
pivView.columnaxis.insertfieldset pivView.fieldsets("SummevonGFehler")
pivView.columnaxis.insertfieldset pivView.fieldsets("SummevonStück")
With pivView
Set pivTotalFehler = .fieldsets("SummevonGFehler").Fields("SummevonGFehler")
.AddTotal "Summe SummevonGFehler", pivTotalFehler, pivStyle.Constants.plFunctionSum
.dataaxis.InsertTotal .totals("Summe SummevonGFehler")
Set pivTotalStück = .fieldsets("SummevonStück").Fields("SummevonStück")
.AddTotal "Summe SummevonStück", pivTotalStück, pivStyle.Constants.plFunctionSum
.dataaxis.InsertTotal .totals("Summe SummevonStück")
End With
pivStyle.Refresh
End Sub
Der Code oberhalb:
Private Sub Form_Current()
Dim seite As Page
For Each seite In Me!RegisterBericht.Pages
seite.Visible = False
Next
End Sub
'Pivot Chart in Abhängigkeit von Kombobox Kriterien anzeigen
Private Sub BerichtLaden_Click()
Dim dB As DAO.Database, Doc As DAO.Document
Set dB = CurrentDb
If Not IsNull(Me!Monatauswahl) And Not IsNull(Me!Jahrauswahl) And Not IsNull(Me!Berichtauswahl) Then
For Each seite In Me!RegisterBericht.Pages
seite.Visible = InStr(Nz(Me!Berichtauswahl, ""), seite.Name)
Next
For Each Doc In dB.Containers("Forms").Documents
If Doc.Name = "UFrm_" & Me!Berichtauswahl & "_pivot" Then
Me.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.RecordSource = DatenQuelle
'Me.Controls.Item("Ufrm_" & Me!Berichtauswahl & "_Pivot").Form.Requery
'DoCmd.RunCommand acCmdPivotRefresh
End If
Next
Else
MsgBox "Bitte Berichtart und Zeitraum wählen!", vbHinweis, "unzureichende Eingabe!"
Exit Sub
End If
Pivotcharge
Me.Refresh
End Sub
viele Gruesse
Adrian
Hallo Adrian,
könnte mir nur vorstellen, dass du der pivFrm im Anschluß an diese Codestelle
Set pivFrm = Me.Ufrm_Ausschuss_Pivot.Form
Set pivStyle = pivFrm.PivotTable
entweder den Abstand Left und Top oder die Position in Form von x- und y-Koordinaten am Registersteuerelement mitgibst
Welche Möglihkeit du hast müsstest du eigentlich im Entwurfmodus im VBE sehen können, wenn du die Eigenschaften im linken Eigenschaftsfenster durchschaust.
Ich hab das eben mal mit einem einfachen Formular, einem Registersteuerelement und einem Unterformularobjekt versucht - es sollte Top und Left zum Tragen kommen!
Aber bitte mich darauf nicht festzunageln... ;D
Wahrscheinlich wird dir nix anderes überig bleiben als ein wenig herum zu experimentieren.
LG
Peter
Hi Peter,
danke dir, der Tipp ist schonmal ein guter Anfang ;D
Ich bastel dann mal rum...
lg
Adrian
Hi,
habe es jetzt nur so hinbekommen:
Die Pivotansicht wird schön im Register angezeigt, nachdem ich das Hauptformular, wiederhergestellt hatte, also z.B. minimieren und dann wieder maximieren....
Total abgefahren :o
Daher Lsg. im Bericht Laden_Click()
DoCmd.Restore
DoCmd.Maximize
Mit Top & Left geht leider nichts, ist auch nicht in den VBE des Ufrm_Auschuss_pivot zu finden.
Mit GridX & GridY funktioniert es auch nicht....
In der PivotCharge Funktion:
'pivFrm.GridX = 2.986
'pivFrm.GridY = 6.478
jetzt ruckelt es halt kurz, dann sieht es gut aus.
Nicht die feine englische, aber für heute ist erst mal feierabend ;D
Dir auch ein schönen!
Lg
Adrian