2013-08-21 55 views
0

好的,朋友們,我在一週半的時間內離開了自己的工作,我正在努力讓我的老闆做得更輕鬆。他沒有任何訪問知識,所以我正在嘗試創建一個能夠自動生成報告的表單。我沒有爲所有不同的報告創建不同的表單,而是試圖從參數表中自動化它。這就是我要去的地方: 我有一個表格,由我創建,由5個字段組成。我想使用這些字段填充標準表單模板中的參數字段。在我的表中的五個字段如下:根據表單上的組合框自動查詢選擇

  1. 查詢類型正在運行的(結果吐出)
  2. 產生這份報告中,用逗號,沒有空格分隔的查詢。 "QRYNAMEA,QRYNAMEB"
  3. 其中這些查詢生成表,這將通過transferspreadsheet
  4. 目的地使用excel文件,已經有設置喂數據透視表。
  5. 這個excel文件的輸入表。目前,所有這些表被稱爲「輸入」。 (這並不重要)

我的問題是隨着我製作組合框後不知道該去哪裏。我知道足夠的visual basic來自動化查詢,但還不足以使用3,4和5中的信息填充表單(到目前爲止,我已經手動更改了這些查詢)。我不知道如何從「選擇框」中的選擇中查找表中的記錄,然後從自動化中選擇單個字段。

我對我解析#2和自動化查詢並將值放入我正在查看的字段的能力非常有信心,但我不知道如何從表中真正拉出這些值,然後才能做這些事情。我似乎也無法形容這一點足以讓谷歌幫助我。

有沒有人做過這樣的事情?我假設我只是缺乏一個VBA庫的知識,但我沒有找到答案。

編輯: 我此刻的傾向是爲這個表創建一個查詢,它將根據我給出的輸入返回一個字段。我可以想象在SQL中這樣做,但我仍然不知道如何填充表單,也不知道如何從表中提取字段對象。

我必須出門一天,但星期五我會回來繼續工作,一旦找到它,我就會發布我的解決方案。這似乎是一個獨特的難題,並且很高興給出答案。

最終編輯:代碼被拋光(不具有的錯誤處理的方式多):

  1. 第一種方法,其提取從該表中的字段和填充形式中,通過選擇激活在組合框和一個新條目看起來是這樣的:

    Private Sub QuerySelect_Change() 
    Dim db As Database 
    Dim rec As Recordset 
    
    Set db = CurrentDb 
    Set rec = db.OpenRecordset("SELECT [Queries to Run], [Source Table], [Destination Spreadsheet], [Destination Sheet Name] FROM TBL_QRY_SETTINGS WHERE TBL_QRY_SETTINGS.[Query Type] Like '" & [Forms]![QuerySelector]![QuerySelect] & "';") 
    [Forms]![QuerySelector]![QueriesToRun].Value = rec("Queries to Run") 
    [Forms]![QuerySelector]![SourceTable].Value = rec("Source Table") 
    [Forms]![QuerySelector]![FileDest].Value = rec("Destination Spreadsheet") 
    [Forms]![QuerySelector]![SheetName].Value = rec("Destination Sheet Name") 
    Set rec = Nothing 
    Set db = Nothing 
    
    End Sub 
    
  2. 第二個代碼就會將該數據運行查詢。我喜歡這是怎麼發生的。它在單擊靠近組合框的按鈕時運行。

    Private Sub DynamicQuery_Click() 
    Dim qryArray As Variant 
    Dim i As Integer 
    
    qryArray = Split([Forms]![QuerySelector]![QueriesToRun], ",") 
    DoCmd.SetWarnings False 
    For i = LBound(qryArray) To UBound(qryArray) 
        Debug.Print qryArray(i) 
        DoCmd.OpenQuery (qryArray(i)) 
    Next 
    DoCmd.SetWarnings True 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, [Forms]![QuerySelector]![SourceTable], _ 
        [Forms]![QuerySelector]![FileDest], _ 
         True, [Forms]![QuerySelector]![SheetName] 
    End Sub 
    

注意,對於部分最終代碼(1)幾乎相同的所選擇的答案,所不同的是我抓住多個字段。這是有效的,因爲我知道我有唯一的「查詢類型」,而我的記錄集只包含一條記錄。

無論如何,我希望有些人在這個跌跌覺得它有用。 Send me a message if you do。據我簡短的谷歌搜索可以看出,這種自動化工作還沒有完成。它應該讓訪問不識字的人更容易運行他們自己的查詢,並且對於設計師來說,如果他們希望在點擊幾下後就可以查詢所有查詢,那麼這很容易。

有人可以想見,使用這種通過像我引用表迭代來自動執行各種順序報告。

+0

沒有拉該自動方式。如果我遵循你所描述的內容,將需要某種文檔表格,其中包含你想在從組合框中選擇查詢後顯示的所有細節。 –

+0

@HansUp我不能嵌入在帖子中的照片,我找不出一個很好的方式對其進行格式化,所以這裏是截圖:http://i.imgur.com/EuTi5bY.png 頂行是唯一充實的,但他們都遵循相同的格式。 – GMoany

回答

1

我可能是大量誤解你在做什麼,但我認爲這是因爲使用窗體嚮導創建一個新的表格一樣容易。它可讓您選擇包含數據的表格,並讓您選擇要添加的字段。

以後,您可以更改任何文本框到組合框,這將讓你限制可到正確填寫英寸

上午我理解的選擇?

編輯:這將填充用字段的內容的變量(MyRandomField)在表

Dim db as Database 
Dim rec as Recordset 

set db = CurrentDB 
set rec = db.OpenRecordSet("Select SomeField from SomeTable Where Something = 'SomethingElse'") 

MyRandomField = rec("SomeFieldName") 

set rec = Nothing 
set db = Nothing 
+0

不完全,除非其他組合框會根據我的第一個包含的內容「自動填充」。沒有辦法將查詢的結果輸入到表單中嗎?因爲現在我正在考慮查詢我的表以查找與我的組合框條目匹配的字段,然後將這些值讀入表單其他位置的文本框中,類似於默認值。我最大的問題是,我怎樣才能從表或查詢中分配一個值到vba中的變量?_它似乎應該是直截了當的,所有事情都要考慮。 – GMoany

+0

@GMoany - 看看我上面的編輯。這將填充表或查詢中字段內容的變量。也就是說,假設WHERE子句只從表/查詢中返回1條記錄。否則,您可以使用「Do While rec.EOF = False」循環來遍歷每個返回的記錄。 –

+0

這是完美的。我一直在嘗試以excel對象的形式打開表格,但這是我真正需要的。謝謝你,先生。 – GMoany

相關問題