2016-07-08 6 views
1

Ich möchte einige unserer Access-Berichte mit einem VBA-Skript automatisieren. Aber wenn ich sie mit DoCmd.OpenReport ausführen möchte, habe ich das Problem, dass jeder Bericht ein Popup für einige Parameter hat, die von der zugrundeliegenden Abfrage kommen.VBA ausführen Access-Bericht mit Parameter basierend auf Abfrage

Dies ist, wie die Parameter wie in der Abfrage aussieht:

PARAMETERS [Time] Text (255); 

ich viel gegoogelt und versucht, mit:

DoCmd.OpenReport "B_My_Report", acViewPreview, , "[Time]= 423" 

Aber das hat nicht funktioniert; das Popup kommt immer noch und wenn ich nichts eingebe, wird die Abfrage fehlschlagen, weil Time Parameter leer ist.

Gibt es eine Möglichkeit, ich kann den Bericht mit dem Parameter Wert aufrufen. Ich lese viele Vorschläge, um den Parameter vollständig zu entfernen und die where Bedingung in OpenReport zu verwenden. Aber ich kann diese Fragen nicht ändern, weil sie nicht von mir gemacht und gepflegt werden. Ich muss sie nur manchmal laufen. Also würde ich gerne eine Lösung haben, ohne den Bericht oder die Abfrage zu berühren.

Antwort

3

Wenn Ihre Access-Version> = 2010 ist, berücksichtigen Sie die DoCmd.SetParameter Method.

Diese Abfrage ist die Record Source für meinen Bericht:

PARAMETERS which_id Long; 
SELECT rmy.id, rmy.reportDate, rmy.gainOrLoss 
FROM record_matYields AS rmy 
WHERE rmy.id=[which_id] OR [which_id] Is Null; 

So dann kann ich einen Wert für den Parameter zuweisen und den Bericht öffnen nur den passenden Datensatz anzuzeigen (id ist der Primärschlüssel):

DoCmd.SetParameter "which_id", 4 
DoCmd.OpenReport "rptFoo",acViewReport 

Oder wegen des OR [which_id] Is Null Zustandes in der WHERE Klausel der Abfrage, ich Null zuweisen dem Parameter vor Öffnen des Berichts, wenn ich alle Datensätze unabhängig von ihrer id Werte enthalten sein sollen:

DoCmd.SetParameter "which_id", Null 
+0

Das war die Lösung, vielen Dank. – cedricblaser01

+2

Sehr cool, ich wusste nichts davon. (alter Hund & neue Tricks, glaube ich) – Andre

+0

Ich habe Access 2010 für ein paar Jahre benutzt, bevor ich 'SetParameter' bemerkte. Es ist in nur wenigen Situationen nützlich, aber das war einer von ihnen. :-) – HansUp

1

Sie können nicht. Wenn Sie die Abfrage in VBA öffnen würden, könnten Sie den Parameter angeben. Da der Bericht jedoch der einzige ist, der die Abfrage aufruft, fragt die Abfrage nach ihrem Parameter.

Wenn Sie die Abfrage nicht ändern können, müssen Sie damit leben.

0

Sie den Parameterwert aus einem Formular beziehen können, die diesen Bericht mit der Syntax Forms öffnet [Formularname]! [Kontroll-Name], so muss die Abfrage etwas geändert werden wie Wählen Sie * aus [Tabellenname] wobei Time_id = Forms! [Formularname]! [Steuerelementname] Dies wird sicherstellen, dass die Abfrage Parameter aus dem Steuerelement des Formulars erhält und es wird Parameter nicht aufgefordert. Aber es funktioniert nur, wenn Sie diese Abfrage öffnen, wenn dieses Formular geöffnet/geladen bleibt ... andernfalls wird es wie Parameter erneut aufgefordert.

Der Docmd.setparameter in Access 2010 scheint ein sehr guter Vorschlag zu sein, wo es Flexibilität und gute Programmierung hält.