PDA

Vollständige Version anzeigen : kreuztabelle bericht variable spalten


Phillip-Berlin
21.09.2002, 18:48
hi leute,
ich habe folgende kreuztabelle erstellt (hat auch etwas gedauert :) )

http://www.ms-office-forum.net/daten/excel/access/MSOF079077.gif

nun möchte ich einen bericht erstellen der in dessen spaltenzahl variabel auf die sich ständig ändernde kreuztabelle reagiert -> und scheitere :(

ich habe gehört das in der beispiellösungen.mdb von ac00 soetwas gezeigt wird. kann mir die jemand mailen?

habt ihr tips/ beispiele für mich?

vielen dank schonmal!

A.S.
21.09.2002, 19:31
Hallo Phillip,

eine "Beispiellösungen.mdb" habe ich auf meine W2K-Rechner mit A00 leider nicht finden können und in der berühmten "Nordwind.mdb" war auch nichts entsprechendes. Kann es sein, das Du evtl. die KnwoHow-DB meinst?

Gruß

Arno

Gustav Kurz
21.09.2002, 19:35
<font size="2" face="verdana">Hallo Philipp,

habe Dir die Datenbanken soeben rausgeschickt - bei <a href="http://www.kraasch.de/beispiele.htm" target="blank">Kraasch - Variable Kreuztabelle im Unterformular</a> gibt es noch ein Beispiel für Unterformulare, vielleicht kannst du es ja für Deinen Bericht anwenden.

Gruß vom Bodensee
Gustav

Phillip-Berlin
21.09.2002, 21:21
vielen dank gustav!
ich bin mittlerweile dank deiner mails auf dem richtigen wege :)

@arno - es gibt sie tatsächlich diese beispiellösungen.mdb ... gustav hat sie mir gerade geschickt

und weil die frage ja eh gleich 1000x kommt anbei ein download-link :)

<a href="http://www.serve-u.de/phil/mof/bsp.zip" target="_blank">bsp.zip</a>

A.S.
21.09.2002, 22:10
Hallo Phillip,

dann ist es mit Access wie mit allen anderen Installationen, die ich von meiner Firma geliefert bekomme ----- der totale Schrott :(

Aber so spielt wohl das Leben...

Gruß

Arno

Manamana
19.10.2002, 14:21
.....was soll ich sagen.....ich habs wirklich versucht.......ich habe das gleiche Problem !....ich habe mir die Beispieldatenbank runtergeladen, und habe jetzt ne woche versucht das beispiel auf meinen Bericht umzusetzen.....Die Hilfe war mir leider keine große, da hier zwar die schritte erklärt sind, die man machen muß, um das Beispiel nachzubauen, aber da das Prinzip mir (als Anfänger) verschlossen bleibt, schaffe ich es nicht, es auf meine Tabelle und meinen Bericht umzusetzen... :( ....es ist halt echt dumm, wenn man sich in VBA nicht auskennt.....kann mir jemand helfen, daß ich es verstehe?....In dem Beispiel ist außerdem nur der Detailbereich und dann gleich der Berichtsfuß.....Mein Bericht hat aber auch noch Zwischensummen, nach Untergruppen usw......mmmh...
wie ihr seht war ich jetzt grad zu keiner besseren aussage fähig, da ich verzweifelt bin... :(

Phillip-Berlin
19.10.2002, 17:20
evtl. hilft dir meine umsetzung ja weiter: <a href="http://www.serve-u.de/access/files/variablespalten.zip" target="_blank">variablespalten.zip (AC00)</a>

sie ist allerdings etwas abgeändert und auf das wesentlichste in diesem beispiel reduziert

evtl. hat jemand eine lösung für die "0" zeile am anfang ..

Manamana
19.10.2002, 18:50
Vielen Dank !!

ich werds mir mal anschauen.....für mich ists halt einfach schwer, da ich VBA einfach nicht verstehe, also nicht weiß, was da welcher Befehl genau macht.....wenn man das weiß ist ein anpassen auf eigene bedürfnisse sicherlich einfacher....schließlich muß ich meinen zeilen noch eine zwischensumme nach gruppen einbauen....

Manfred K.
21.10.2002, 09:15
Hallo,

@phillip

Habe mir die bsp.zip heruntergeladen, hinter der sich die "BeispiellösungenAcc2000.mdb" verbirgt.
Viele Funktionen laufen bei mir überhaupt nicht, bei anderen schlägt sofort der Debugger zu. Das ist sehr bedauerlich, da ich an einigen Funktionen dringend interessiert bin.
In meinem Office2000 Premium gibt es keine "BeispiellösungenAcc2000.mdb"; ich meine mich aber zu erinnern, dass es in einer früheren Version diese Beispiellösungen gab.
Könnte es sein, dass da jemand diese frühere Version konvertiert hat und darin die Probleme begründet liegen?
Anders herum gefragt:
Hat noch jemand diese diese frühere Version in unveränderter Form?

MfG

Manfred K.

Manfred K.
21.10.2002, 14:25
Hallo,

Phillip und all' die anderen!

Irgend jemand wird doch diese Datei haben!!!

Manfred K.

Karlheinz
21.10.2002, 14:35
Hallo,

bevor ich sie dir sende (1,636MB): benötigst du noch die besagte MDB im 97 Format?

Gruß Karlheinz

Manfred K.
21.10.2002, 14:55
Hallo Karlheinz,

aber ja!
Das wäre sehr nett!!!

Manfred K.

Karlheinz
21.10.2002, 15:01
Hallo Bernd,

ist unterwegs.

Gruß Karlheinz

Manamana
21.10.2002, 19:32
ok...ich habe es versucht, aber ich kann es nicht umsetzten....ich habs mit diesen ungebundenen Textfeldern und den VBA-Codes nicht hinbekommen, daß mein Bericht variabel auf die Kreuztabelle reagiert.... :( ....kann jemand mal mein Beispiel anschauen?.....So sa mein Bericht einmal in der Urform aus....er funktioniert halt jetzt nur, wenn wirklich alle datensätze da sind.....verringert man den zeitraum gehts dann halt nicht mehr.....kann mir jemand helfen?....wie gesagt: das ist ist der Bericht in der ersten Form, ohne meine Versuche... :( .......Bin für JEDEN TIP dankbar !!

Manamana
22.10.2002, 10:52
ich geb zu, ich habe recht kompliziert gearbeitet in meiner datenbank....das liegt halt darin, daß ich noch nie mit VBA direkt gearbeitet habe..darum schaffe ich es jetzt auch nicht meinen Bericht mit variablen Spalten umzubauen.......<seufz>......kann mir tatsächlich keiner helfen?...

<a href="http://members.tripod.de/Manamana25/Beispiel.mdb" target="_blank">Mein Beispiel - unbearbeitet..</a>
:rolleyes:

Phillip-Berlin
22.10.2002, 15:26
habs mir mal runtergeladen ...
aber das it ja noch kein fizel code in deinem bericht :)

na mal sehen ob ich bis zum WE dazu komme

Gustav Kurz
22.10.2002, 15:44
<font size="2" face="verdana">@ Phillip:
glaub mir - oft ist es sogar viiiiiiel besser wenn noch kein bisschen Code in dem Bericht/Formular ist :D :D - ich habe da schon Sachen gesehen :bawling: :bawling: ... da kannst du erst mal 3 Tage lang alles brauchbare vom unbrauchbaren trennen bis du loslegen kannst.

Gustav

Manamana
22.10.2002, 17:22
Danke Gustav !! Diese Aussage baut auf... :) ...

da ist wirklich gar kein Code drin....wie gesagt, ich habe bisher in allen meinen datenbanken geschickt drumherum gebaut... :) ......aber jetzt gehts wohl nicht mehr ohne!...echt Super Phillip, daß Du Dich der Sache annimmst !!

Manamana
26.10.2002, 18:27
Phil?.......wie siehts aus?......ist dem Patienten zu helfen?.... :)

erwin
27.10.2002, 10:47
mal so'n allg. Tipp am Rande zum Thema KreuzTab. + Report:

Da gängige Drucker eine variable Druckoutputlänge idR. nur von oben nach unten zulassen (ich kenne zumindest keinen Drucker der beliebig breit druckt), ist meist der gedankliche Ansatz das Problem, welches, wenn man die Auswertung transponiert (dh. Zeilen + Spalten vertauscht), sich oftmals von ganz alleine löst, da man dann mit ganz "normalen" Gruppierungen im Bericht das Auslangen findet.

Wobei ich mir das konkrete Beispiel jetzt allerdings nicht angeschaut habe ;)

so long Erwin...

Manamana
27.10.2002, 13:38
Danke für den Tip Erwin...

nur in diesem Fall habe ich das Problem in beiden Richtungen....das heißt egal ob ich die Zeilen und die Spalten tausche. Das Problem ist das gleiche....ich habe halt eine Tabelle die auf einem variablen Zeitraum beruht. Es sind eben je nach Zeitraum nicht zu allen Spalten (und eben auch nicht zu allen "Zeilen") auch Einträge vorhanden. Da mein Bericht eben in den Spalten fest definierte Textfelder hat, kommt immer dann eine Fehlermeldung, wenn ein Textfeld in der "neu" selektierten Tabelle nicht gefüllt wurde. Da das mit den Zeilen das gleiche ist, bringt es in diesem Fall nichts, das Layout zu tauschen.....Leider.......hier nochmal der Patient:


<a href="http://members.tripod.de/Manamana25/Beispiel.mdb" target="_blank">Mein Beispiel - unbearbeitet..</a>

Nouba
27.10.2002, 18:20
Hallo Manamana,

Du hast Post erhalten.

Manamana
27.10.2002, 20:01
Hi Nouba...

Vielen Dank !....Das schaut schon ziemlich gut aus.....ich schau mir das jetzt mal genauer an, um zu verstehen.... :) .....sollte ich etwas nicht verstehen, melde ich mich nochmal !!


Gruß
Marcus

Helchi
04.09.2003, 11:59
Ich würde gerne dieses Thema nochmal aufgreifen und Phillipp und Nouba fragen, wie man vorgehen muss, um dieses Problem zu lösen. Ich habe mir bereits die Lösung von Phillipp heruntergeladen, aber die verstehe ich ehrlich gesagt nicht. Gibt es dazu ein universelles Vorgehen - so eine Art Anleitung, nach der man vorzugehen hat oder hängt dies immer vom individuellen Problem ab?

Nouba
04.09.2003, 12:31
Hallo Helchi,

leider habe ich die Manamana-DB nicht mehr zur Verfügung. Ich versuche nochmal das Problem und Vorgehen zu schieldern.

Eine Kreuztabelle, die z.B. Monate in ihren Spalten enthält, wird maximal 12 Spalten dafür aufweisen. Aber was soll passieren, wenn das Recordset weniger Spalten liefert oder gar andere Feldbezeichnungen erhält? Das mag der Bericht nicht. Abhilfe schafft man mit fixierten Spaltenüberschriften in der Kreuztabelle (bei Zeiträumen meist unproblematisch) oder einer Abfrage, die dynamisch aus der Kreuztabelle erstellt wird und deren Spaltennamen umbenannt werden. Beim Öffnen des Berichts, der die maximale Anzahl von Feldern schon enthält, oder in der aufrufenden Form kann man die Abfrage des Berichts manipulieren.

Die Schritte in VBA wären Kreuztabelle öffnen
Feldnamen einlesen und in einem Array ablegen
Feldnamen für neue Abfrage so umbenennen, wie sie im Berichtsentwurf vorliegen
Abfrage erstellen und schreiben - darauf beruht der Bericht
Funktion zum Auslesen der Feldnamen anlegen
diese Funktion im Bericht in den Textfeldern zur Beschriftung zuweisen (einmalig) und leere Spalten plus ggf. Rahmen, Linien, etc. auf invisible stellen
Diese Funktionalät solltest Du auch in dem Beispiel in Roger' Access Library finden - den Link dazu habe ich Dir in einem anderen Beitrag kürzlich genannt. Weitere Informationen findest Du unter Fixed column name and crosstabs (http://www.mvps.org/access/queries/qry0017.htm).

Helchi
04.09.2003, 14:14
Danke für deine Antwort Nouba. Ich stelle jetzt hier noch einmal die von mir gewünschte Berichtstruktur als Bild online, um die Sache besser nachvollziehen zu können, weil die Sache für die Allgemeinheit sehr interessant ist meiner Meinung nach.

Ausgangsbasis ist ein Formular, das Infos aus bestehenden Tabellen in Form von 2 Listenfeldern anzeigt und diese beiden Listenfelder als Bedingungen für eine Tabellenerstellungsabfrage wie folgt verwendet:

SELECT DISTINCT *bestehendeTabellenSpalten*
INTO Table_Temp
FROM *bestehendeTabellen*
WHERE (((Table_Time_Periods.Time_Period)=[Forms]![Formular_BOM_SE_Variations2]![Time])
AND ((checkvariation([Variation_ID]))=True));

Time kann in dem Formular nur eine per Listenfeld ausgewählt werden und Varianten können mehrfach per Listenfeld ausgewählt werden über die Funktion checkvariation()=true. [von Arno]

Die neue Tabelle Table_Temp soll als Grundlage für die Kreuztabelle dienen und dann aus der Kreuztabelle der gewünschte Bericht. Jetzt kann es sein, dass 1,2,3 oder X Varianten ausgewählt werden und nur diese Varianten sollen dann auch als Spalten im Bericht erscheinen (siehe Bild).

Da ich absolut keinen Plan habe und das jetzt extra ALLGEMEIN gehalten habe, weil ich mir sicher bin, dass dieses Problem MEHRERE USER haben, wäre ich für eine Lösung sehr sehr sehr dankbar - ich bin auch in VB NICHT so versiert, dass ich da selbst Hand anlegen könnte.

Danke schonmal für eure Antworten!!!

Nouba
04.09.2003, 15:45
Hallo Helchi,

neue Informationen hast Du nicht geliefert (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=101483). Zugegeben, der Aufwand ist nicht gering. Anscheinend willst Du ja auch einen anderen Weg (temporäre Tabell) beschreiten.

Helchi
04.09.2003, 16:03
Da das jetzt mit der temporären Zwischentabelle sehr gut klappt, werde ich es auch dabei belassen. (s. anderer Thread)

Jetzt steh ich nur noch vor dem Problem, die je nach Listenfeld ausgewählten Varianten in den Bericht zu bekommen - ähnlich dem Problem von Manamana (?) und Phillipp. Es müsste halt zur bestehenden horizontalen Gruppierung noch eine vertikale Gruppierungsmöglichkeit in Access geben, das würde die Sache sehr vereinfachen. Da es aber sowas nicht gibt, steh ich vor einem für mich nicht zu lösenden Problem, was ich eben an euch herantragen möchte, weil ich denke, dass die Lösung dann nicht nur für mich nützlich wäre.

Damit es auch für Leute, die meine DB nicht kennen durchschaubar wird, hier die Kreuztabelle auf die der Bericht basieren soll (bei beiden Bildern wurden verschiedene Varianten im Formular ausgewählt):

Helchi
04.09.2003, 16:09
Zu sehen hier:

Nouba
04.09.2003, 16:19
Hallo Helchi,

ich denke, wir verstehen uns noch etwas falsch. Dein Problem sind die sich verändernden Variationen in den Spaltenbezeichnungen. Von der Kreuztabelle müßte eine temporäre Tabelle oder Abfrage gebildet werden, die Feldnamen wie F1, F2, F3, etc. enthält. Darauf kann dann wieder ein Bericht erstellt werden. Im Bericht heißen die Felder auch F1, F2, F3,... etc.. . Damit der Bericht die Überschriften wie in der Kreuztabelle bekommt, können die Zeichenketten in einem Array abgelegt werden. Im Bericht werden Textfelder zur Bezeichnung verwendet, deren Inhalt über eine Funktion den Array-Wert ermittelt. Den Ansatz dazu findest Du bei Dev Ashish (Link in meinem vorletzten Beitrag). Hast Du mal das Beispiel (sind ja mehrere Berichte drin) in Rogers CrosstabReport angesehen. Das andere Problem läßt sich vermutlich mit mehrern Unterberichten erledigen.

Helchi
04.09.2003, 16:36
Hi Nouba!

Puh, das hört sich ja sehr komplex an, was du da beschreibst. :confused:
Heisst das, die Kreuztabelle hat dann als Spaltenüberschriften F1, F2, F3 ...?
Woher weiß ich dann, ob F1 ein BMW Projekt oder ein Opel Projekt ist?
Im Prinzip müssten dann ja auch die Spaltenüberschriften von [F1;Fmax=beliebig] gehen, d.h. auch generiert werden?
Die Variantenzahl muss ja auch variabel sein - wo ist dann der Vorteil mit der zweiten Tabelle?

Welche Thematik sollte deiner Meinung nach mit mehreren Unterberichten gelöst werden?

Ich schau mir mal die Links an und melde mich dann wieder.

:confused: :confused: :confused: *HelchiTotalVerwirrt*

Nouba
04.09.2003, 16:51
Hallo Helchi,

schau in das Beispiel in Rogers Access Library, was ich eigentlich vor dem Posting schon erwartet hätte. Dort siehst Du, wie die Kreuztabellenfeldbezeichner in den Bericht kommen.

Helchi
05.09.2003, 10:08
Also ich hab mir jetzt mal 2 Stunden lang das Beispiel aus Rogers Access Library und von Dev Asish (?) angeschaut.

Bei Roger (CrossTabReport2k) wird diese Kreuztabelle als Grundlage für den Bericht verwendet:

SELECT qryReductionByPhysician_Crosstab.Reduction AS Field0,
qryReductionByPhysician_Crosstab.Total AS Field1,
qryReductionByPhysician_Crosstab.[Dr_ Postellon] AS Field2,
qryReductionByPhysician_Crosstab.[Dr_ Wilson] AS Field3,
qryReductionByPhysician_Crosstab.[Dr_ Wood] AS Field4,
Null AS Field5, Null AS Field6, Null AS Field7, Null AS Field8, Null AS Field9,
Null AS Field10, Null AS Field11, Null AS Field12, Null AS Field13, Null AS Field14

Großes Problem hierbei - Roger geht von den den statischen Spalten [Dr_...] aus (Field2, Field3, Field4), und die restlichen Spalten können nicht belegt werden (Null). Bei mir können es aber dynamische 1...max? Spalten werden, je nach Auswahl des Listenfelds im Formular. Ich denke mal, dass hier dein Hinweis auf Asish (FixedColumNamesAndCrossTabs) greift:

Public Function MakeSQLCoverQueryFor(TableName As String, FieldName As String, XTableName As String) As String
Dim rst As ADODB.Recordset
Set rst = CurrentProject.Connection.Execute( "SELECT DISTINCT " & FieldName & " FROM " & TableName, , adCmdText)
' Firehose cursor is enough for this utilisation.
rst.Move 0
W = ""
i = 1
Do Until rst.EOF
W = W & rst(FieldName) & " As F" & i & ", "
i = i + 1
rst.MoveNext
Loop
W = Left$(W, Len(W) - 2)
' trim last ", "
W = "SELECT " & W & " FROM " & XTableName & ";"
rst.Close
Set rst = Nothing
MakeSQLCoverQueryFor = W
End Function


Das weitere Vorgehen wäre also:

Kreuztabelle --> neue Tabellenerstellungsabfrage --> neue Tabelle mit F1,F2,F3 über Asish-Code --> Bericht mit F1,F2,F3

Leider ist das wieder alles VB und da ich Newbie bin, kann ich den Code nicht ganz nachvollziehen und wüsste überhaupt nicht, wie ich das einbauen muss und wo?! :(
Kannst du mir beim weiteren Vorgehen helfen bzw stimmen meine Überlegungen überhaupt?

:confused: :confused: :confused:

Helchi
05.09.2003, 11:55
Und als letztes muss dann zur Auswertung der neuen Tabelle der Bericht mit F1,F2,F3 angelegt werden mit Hilfe des Codes von RogersAccessLibrary:

Option Compare Database
Option Explicit
Dim ReportLabel(15) As String

Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
Dim i As Integer
For i = 0 To 14
ReportLabel(i) = ""
Next i
Call CreateReportQuery
End Sub

Private Sub ReportFooter_Format(Cancel As Integer, FormatCount As Integer)
Dim i As Integer
For i = 1 To 14
If FillLabel(i) <> "" Then
Me("line" & i & "1").Visible = True
Me("line" & i & "2").Visible = True
Me("line" & i & "3").Visible = True
Else
Me("line" & i & "1").Visible = False
Me("line" & i & "2").Visible = False
Me("line" & i & "3").Visible = False
End If
Next i
End Sub

Sub CreateReportQuery()
On Error GoTo Err_CreateQuery
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim indexx As Integer
Dim FieldList As String
Dim strSQL As String
Dim i As Integer

Set db = CurrentDb
Set qdf = db.QueryDefs("qryReductionByPhysician_Crosstab")
indexx = 0
For Each fld In qdf.Fields
If fld.Type >= 1 And fld.Type <= 8 Or fld.Type = 10 Then
FieldList = FieldList & "[" & fld.Name & "] as Field" & indexx & ", "
ReportLabel(indexx) = fld.Name
End If
indexx = indexx + 1
Next fld
For i = indexx To 14
FieldList = FieldList & "null as Field" & i & ","
Next i
FieldList = Left(FieldList, Len(FieldList) - 1)

strSQL = "Select " & FieldList & " From qryReductionByPhysician_Crosstab"
db.QueryDefs.Delete "qryCrossTabReport"
Set qdf = db.CreateQueryDef("qryCrossTabReport", strSQL)

Exit_CreateQuery:
Exit Sub

Err_CreateQuery:
If Err.Number = 3265 Then '*** if the error is the query is missing
Resume Next '*** then skip the delete line and resume on the next line
Else
MsgBox Err.Description '*** write out the error and exit the sub
Resume Exit_CreateQuery
End If
End Sub

Function FillLabel(LabelNumber As Integer) As String
FillLabel = Nz(ReportLabel(LabelNumber), "")

End Function


Also wenn das stimmt, hab ich zumindest das Vorgehen verstanden - aber die Umsetzung schaff ich alleine nicht! :(

Helchi
05.09.2003, 13:50
Hab mich mal alleine rangewagt und die Funktion MakeSQLCoverQueryFor() von Dev Ashish als Modul geschrieben. Nun möchte ich eben diese Funktion in meinem Formular bei Button_Klick() einfügen und hab dies so versucht:

Debug.Print MakeSQLCoverQueryFor("Table_Temp", "Variation_Name", "Query_Temp_Kreuztabelle")

--> "Variable oder Prozedur erwartet anstelle von Modul"

Leider geht das nicht. Was hab ich denn falsch gemacht?
Hm es kommt auch kein Name für die neue Query irgendwo vor? Wo lege ich diesen fest?

Helchi
05.09.2003, 15:59
on top :bawling:

Helchi
05.09.2003, 16:41
Mann-o-Mann! Fehler erkannt: hatte das Modul genauso benannt wie die Funktion! :stupid:

Aber trotzdem bräuchte ich die Hilfe bezüglich der Weiterführung meines Vorhabens:
wo wird der Name für die neue Abfrage festgelegt bzw. was macht der Code von Asish eigentlich genau? :confused:
Stimmen meine Annahmen überhaupt und wer könnte mir bei der weiteren Umsetzung helfen - Arno/Arne? :angel:

Nouba
06.09.2003, 08:21
Hallo Helchi,

ich habe Dir einen Bericht zusammengebastelt.

Helchi
06.09.2003, 14:15
Hi Nouba,

leider kann ich das Formular / den Bericht nach dem Konvertieren in Access2000 nicht öffnen. Hast du nur Access97?
Leider hab ich momentan keinen Zugriff auf meine aktuelle TestDB von meiner Arbeit, weil Wochenende ist. Daher würde ich vorschlagen, dass ich dir die aktuelle Version am Montag vormittag schicke und wir dann an die Sache nochmal rangehen. Die DB von dir kann ich wie gesagt nicht benutzen, weil ich Access2000 hab. Hier die Fehlermeldungen:

Gruß Helchi

Nouba
06.09.2003, 18:24
Hallo,

ein kleiner Dummkopf bin ich schon, Replace gibt's nicht in A97. Ich hänge mal die A2K Version unten an.

Helchi
06.09.2003, 23:27
Hi Nouba,

leider kommen bei mir wieder die gleichen Fehlermeldungen wie beim ersten Versuch. Ich weiß nicht woran das liegt.

Gruß Helchi

Nouba
07.09.2003, 00:33
Hallo Helchi,

ich hätte mehr dazu sagen sollen. In der Form wird zuerst eine Abfrage über Deine Tabellen erstellt (damit es nicht ganz so breit wird). Auf dieser Basis wird die Kreuztabelle als Abfrage geschrieben und beim Öffnen des Berichts wird noch eine weitere Abfrage erzeugt. Konkret muß also zumindest eine einmalige Auswahl mit mindestens einer Variante und eines Zeitraums erfolgen und anschließend muß die Schaltfläche Open Report gedrückt werden.

Erst danach hast Du eine Kreuztabelle, die der Bericht verwenden kann. Anschließend kann der Bericht alleine geöffnet werden, wobei jedoch das Formular zur Änderung der Auswahlabfrage benötigt wird, weil die Kriterien fest in der Abfrage stehen.

Das Close-Event des Berichts sollte besser so aussehenPrivate Sub Report_Close()

Const strCallingForm As String = "frmSelectVarPeriod"

If SysCmd(acSysCmdGetObjectState, acForm, "") > 0 Then
Forms(strCallingForm).Visible = True
End If
End Sub

Nouba
07.09.2003, 11:55
Korrektur: im Kode sollte es heißenIf SysCmd(acSysCmdGetObjectState, acForm, strCallingForm) > 0 Then

Helchi
08.09.2003, 08:35
Hi Nouba,

also ich habs jetzt mal in der Arbeit getestet - es funktioniert einwandfrei. Nun werd ich mich mal dran machen, zu verstehen was du da so alles implementiert hast. Wo hast du denn eigentlich alles Änderungen vorgenommen?

Was passiert, wenn man alle Varianten (mehr als 12) auswählt?
Kann ich im Prinzip die Labels im Bericht fortsetzen, so dass man alle über 2 Seiten drucken kann?

Danke nochmal!!! :knuddel:

Gruß Helchi

Nouba
08.09.2003, 09:51
Hallo Helchi,

schön, dass es funktioniert.

Der Kode wurde komplett neu geschrieben und hoffentlich ausreichend kommentiert. Wenn etwas unkar ist, scheu Dich nicht, an dieser Stelle nochmals nachzufragen.

Im Berichtsmodul gibt es eine Konstante, deren Wert bei der Zuweisung der Berichtsfelder in der For-Next Schleife im Open Event als zusätzliche Abbruchbedingung herangezogen wird. Abhängig von Deinen Daten wirst Du dafür einen sinnvollen Wert jerausfinden müssen.

Im Prinzip kannst Du den Bericht um weitere Felder ergänzen. Ob die Sache (Du willst schließlich Preise/Kosten vergleichen) allerdings für's Auge noch übersichtlich genug ist, wirst Du durch Probieren selbst herausfinden können. Optimal wäre vielleicht eine A3-Querdarstellung, falls die entsprechende Hardware vorhanden ist.

Helchi
08.09.2003, 13:41
Hallo Nouba und andere, die mit Kreutabellen & Berichten kämpfen,


Vorab: die obige A2k Lösung von Nouba funktioniert einwandfrei und liefert folgenden Bericht! :top:


Nur würde ich gerne als kleine Schönheitskorrektur statt "BauteilName1" (rote Ellipse) mehrere Informationen in dieser Zeile in mehreren Feldern unterbringen.
Durch Kreuztabellen ist dies auf maximal 3 Zeilenüberschriften beschränkt und nicht möglich.

Ich würde gerne 5 Felder pro Bauteil erhalten:
"Part_Key" "Part_Name (wie bisher)" "Price" "Amount" "TotalPrice"

Wenn ich alles in ein Feld packe, kann ich ja nicht mehr nach "Part_Name" sortieren. Daher 5 Felder.

Hat jemand eine Idee? ( @NoubaSchiel ;) )

Nouba
09.09.2003, 02:50
Hallo Helchi,

schau mal, ob ich es richtig gemacht habe.

Helchi
09.09.2003, 08:26
Hi Nouba!

Erstmal ein dickes Dankeschön von meiner Seite!!! Deine Hilfsbereitschaft ist wirklich einmalig! :top:

Von der Funktionsweise ist jetzt schon fast perfekt! Ein paar Kleinigkeiten müssten etwas anders sein, ich habs zum besseren Verständnis wieder als Screenshot angehängt - ich denke so kann man die Veränderungen am besten nachvollziehen und auf andere Projekte übertragen:

Helchi
09.09.2003, 12:26
Also ich hab jetzt mal den Code von allen verschiedenen Versionen bisher ausgedruckt und miteinander verglichen. Eigentlich muß ich ja die von mir gewünschten Änderungen nur in dem Formularcode ändern, das ja die Kreuztabelle erzeugt - die Felder werden dann ja automatisch in den Bericht geladen. Daher denk ich mal, dass ich mit dem bisherigen Wissen und den ausgedruckten Versionsänderungen jetzt auch alleine weiterkommen müsste. Wenn ich nicht mehr weiterkomm, meld ich mich wieder!

Gruß Helchi :top:

Nouba
09.09.2003, 12:31
Hallo Helchi,

das erleichtert mich ungemein. :D

Ich denke auch, dass es gelingen sollte.

Teufelchen1985
16.09.2009, 16:32
Habe genau das gleiche Problem, wie Philip zu Anfang. Leider funktionieren die Link nicht mehr!

Wäre sehr schön, wenn mir jemand helfen könnte und evtl. eine Beispieldatei oder einen Denkansatz geben könnte.

Wie Philip schon gesagt hat, verändern sich in der Kreuztabellenabfrage die Spaltenbezeichnung laufen, aber wie arbeite ich dies in ein Formular ein?

Lieben Dank
Teufelchen