Übergabe-Parameter Wert in der Access-Abfrage mit vba

Unsere Anforderung -

Wir haben einige Lieferanten und wir wollen, dass für die Generierung eines monatlichen Berichts der Käufe von einzelnen Lieferanten im Laufe des Monats und nach excel exportieren. Ich glaube, die Lösung ist das erstellen einer parameter-Abfrage, wo ich kann, übergeben Sie den Wert der Lieferanten-ID, Monat und Jahr. Die Liste der Lieferanten ändert sich ständig, und ist in einer separaten Tabelle gespeichert.
Also, im Grunde, ich sollte in der Lage sein, um sequenziell Lesen Sie die Lieferanten-ID aus einer Tabelle und als parameter übergeben, um meine Abfrage zu generieren, die den Bericht für die Lieferanten.

Die nächsten Lösungen, dass fand ich für meine Anforderung wurde auf (die ähnlich wie in der Natur) -

Export-Recordset in eine Tabelle

http://answers.microsoft.com/en-us/office/forum/office_2010-customize/filtering-a-query-used-by-docmdtransferspreadsheet/06d8a16c-cece-4f03-89dc-89d240436693

, Warum ich denke, es könnte eine bessere Lösung sein -

In der vorgeschlagenen Lösung sind wir die Erstellung mehrerer Abfragen und löschen diese. Konzeptionell, ich fühle es sollte eine Möglichkeit zum erstellen einer parameter-Abfrage, und verwenden Sie die do while-Schleife nacheinander übergeben Sie den Wert des Parameters (DeptName im obigen Beispiel), um die Abfrage und die Ergebnisse nach excel exportieren.

Ich sollte in der Lage sein, dies zu erreichen, wenn ich von vba zu übergeben, Wert auf eine parameter-Abfrage. Und das ist das, was ich noch nicht in der Lage, um herauszufinden.

Update am 24-Feb -

Folgenden ist der code, den ich geschrieben habe -

Private Sub Monthly_Supplier_Sales_Report_Click()
Dim strDirectoryPath As String
Dim DateFolderName As String
DateFolderName = Format$((DateSerial(year(Date), month(Date), 1) - 1), "YYYY MM")
strDirectoryPath = "C:\dropbox\Accounting\Sales Reports\" & DateFolderName
If Dir(strDirectoryPath, vbDirectory) = "" Then MkDir strDirectoryPath

Dim Filename As String
Dim strSQL1 As String
Dim strSQL2 As String
Dim DesignerCode As String
Dim month1 As String
Dim year1 As Integer
Dim Query1 As DAO.QueryDef
Dim query2 As DAO.QueryDef
Dim rsDesigner As DAO.Recordset

Set rsDesigner = CurrentDb.OpenRecordset("Designer Details Master")

Do While Not rsDesigner.EOF
DesignerCode = rsDesigner![Designer Code]
month1 = "Jan" 'right now hardcoded, will call this programatically
year1 = 2014   'right now hardcoded, will call this programatically

strSQL1 = "SELECT * FROM [Sales Report Generation Data] WHERE [designer code] = '" & DesignerCode & "' AND [Shipping Month]= '" & month1 & "' AND [Shipping Year]=" & year1

strSQL2 = "SELECT * FROM [Sales Report Generation - Monthwise Inventory Snapshot] WHERE [designer code] = '" & DesignerCode & "' AND [Snapshot Month]= '" & month1 & "' AND [Snapshot Year]= " & year1

Set Query1 = CurrentDb.CreateQueryDef(Name:="TempSalesQuery", SQLText:=strSQL1)
Set query2 = CurrentDb.CreateQueryDef(Name:="TempInventoryQuery", SQLText:=strSQL2)

Filename = strDirectoryPath & "\" & DesignerCode & Format$(Now(), " yyyy mm") & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "TempSalesQuery", Filename, False, "Sales Report"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "TempInventoryQuery", Filename, False, "Inventory"

CurrentDb.QueryDefs.Delete "TempSalesQuery"
CurrentDb.QueryDefs.Delete "TempInventoryQuery"

rsDesigner.MoveNext
Loop

End Sub

Statt, die Logik, Die ich anwenden möchten, ist -

Do While Not 
assign Value to Parameter 1 = rsDesigner![Designer Code]
assign Value to Parameter 2 = Month1
assign Value to Parameter 3 = Year1
Run the two Parameter queries, for which about three parameters are the input value and export to excel in respective sheets.
Loop

Nur, dass ich noch nicht in der Lage, herauszufinden, - wie Sie diese erreichen.

Nicht sicher, wie weit Sie sind oder wenn Sie mit vertraut sind die Schritte in den links, die Sie gepostet, aber hier ist mein Vorschlag. (1) erstellen Sie ein einfaches Formular mit (a) einer listbox für 12 Monate; (b) listbox Jahren; (c) listbox/combobox für Lieferanten ** weglassen, wenn Sie IMMER wollen, führen Sie den Bericht für ALLE Lieferanten; (d) Befehl zum senden Bericht zu erstatten; (e) fügen Sie den VBA-code in der Schaltfläche click-Ereignis für das auswählen von Werten aus listbox/combobox erstellen-filter für recordset dann Bericht öffnen, übergeben Sie den filter. Wenn Sie daran interessiert sind, diesen Ansatz kann ich mehr details hinzufügen, wie Sie zu erreichen.
Ich war in der Lage, den code zu schreiben, wie pro die Lösung gegeben, in die beiden links und das gewünschte Ergebnis zu erhalten. Aber nur so, dass ich das Gefühl, es sollte eine bessere Lösung sein. Selbst in dem, was Sie sind, was darauf hindeutet, Frage ich mich, warum sollten wir haben, um das Formular zu erstellen, zu Holen das Wert, weil mein plan ist, verwenden Sie diese, um auszuführen, an jedem 4. / 5. des Monats zu Holen, die Berichte für den vorangegangenen Monat für alle Lieferanten. Also, am besten, wir sollten in der Lage sein zu definieren, die den Wert von Monats -, Jahres-und Lieferanten-mithilfe von vba-code.
Natürlich können Sie es automatisch ausgeführt, -- und ich dachte, möchten Sie vielleicht die Flexibilität der Ausführung der Berichte, Wann immer Sie wollte-und für einen ausgewählten Lieferanten, wenn man nur nötig, für eine. Die Abfrage, wie gezeigt, in der links, die Sie befestigt haben, brauchen nicht gelöscht zu werden -- und Sie können eine Abfrage verwenden, um 'TransferSpreadsheet' (zumindest in Office 2010 und höher). Sollten Sie Ihre Abfrage Parameter akzeptieren (oder Funktionen) für Datum und Lieferant, (es sei denn, Sie möchten, dass alle Lieferanten), dann muss nur die Parameter in VBA.
Die Bearbeitung der oben genannten Frage: der code, den ich verwendet haben, als je die zwei-Lösung gegeben.

InformationsquelleAutor Rohit Bansal | 2014-02-23

Schreibe einen Kommentar