2013-08-21 3 views
0

좋아, 친구, 일주일 반 만에 직장을 그만두고 상사가 할 일을 쉽게하기 위해 노력하고 있습니다. 그는 액세스 지식이 없으므로 생성 한 보고서를 자동화하는 양식을 작성하려고합니다. 모든 다른 보고서에 대해 다른 양식을 작성하는 대신 매개 변수 테이블에서 자동화하려고합니다. 다음은 내가 할 일입니다. 5 개의 필드로 구성된 테이블을 만들었습니다. 이러한 필드를 사용하여 표준 양식 서식 파일의 매개 변수 필드를 채우고 싶습니다. 내 테이블에있는 5 개 개의 필드는 다음과 같습니다 :양식의 콤보 상자를 기반으로 쿼리 선택 자동화

  1. 쿼리 실행되고 유형 (결과가 뱉어)
  2. 쉼표없이 공백으로 구분하여이 보고서를 생성 쿼리.
  3. 대상 transferspreadsheet 의해 사용되는 이러한 쿼리 생성 "QRYNAMEA,QRYNAMEB"
  4. 테이블이 이미 데이터를 공급하도록 설정 피봇 테이블을 갖는 파일을 엑셀.
  5. 이 엑셀 파일의 입력 시트. 현재이 모든 시트를 "입력"이라고합니다. (그다지 중요하지 않습니다)

제 문제는 콤보 상자를 만든 후에 어디로 가야할지 모르겠다는 것입니다. 필자는 쿼리를 자동화하기에 충분한 시각적 기본 지식을 갖추고 있지만, 3,4 및 5의 정보로 양식을 채우기에는 충분하지 않습니다 (지금까지 여러 쿼리에 대해 수동으로 변경했습니다). 나는 'choosebox'의 선택에서 테이블의 레코드를 찾는 방법을 모르고, 자동화에서 개별 필드를 선택한다.

# 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. 두 번째 코드는 데이터가 쿼리를 실행하는 것을 가져옵니다. 나는 이것이 어떻게 나타나는지 좋아한다. 콤보 박스 근처의 버튼을 클릭하면 실행됩니다.나는 두 개 이상의 필드를 잡는 오전 것을 제외 부분에 대한 최종 코드 (1) 거의 선택한 답변과 동일 함을

    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 
    

참고. 이는 고유 한 "쿼리 유형"이 있고 내 레코드 집합에 레코드가 하나만 포함되어 있기 때문에 작동합니다.

어쨌든 어떤 사람들은 비틀 거리며 유용하다고 생각합니다. Send me a message if you do. 지금까지 간단한 인터넷 검색에서 알 수 있듯이 이러한 종류의 자동화 작업은 액세스가 완료되지 않았습니다. 소수의 클릭만으로 모든 쿼리를 사용할 수있게하려면 문맹자가 자신의 쿼리를 실행하고 디자이너가 쉽게 추가 할 수 있어야합니다.

누군가 내가 이것을 참조하여 테이블을 반복하면서 다양한 보고서를 순차적으로 자동화 할 수 있습니다.

+0

이 당겨 자동적 인 방법이 없다의 필드 내용과 변수 (MyRandomField)을 채울 것이다. 당신이 설명하는 것을 따라 가면 쿼리가 콤보 박스에서 선택된 후에 표시하고자하는 모든 세부 정보를 담고있는 일종의 문서 테이블을 요구할 것입니다. –

+0

@HansUp 사진을 게시물에 임베드 할 수 없어 잘 포맷 할 방법을 찾지 못해서 여기 스크린 샷이 있습니다. http://i.imgur.com/EuTi5bY.png 맨 위 행 유일하게 하나 밖에 없지만 모두 같은 형식을 따릅니다. – GMoany

답변

1

내가하고있는 일에 대해 오해가있을 수 있지만 양식 마법사를 사용하여 새 양식을 만드는 것만 큼 쉽습니다. 데이터를 포함하는 테이블을 선택할 수있게하고 추가 할 필드를 선택할 수있게합니다.

은 나중에 텍스트 상자 중 하나가 당신을 채우기 위해.

암의 I 이해를 그 올바르게 사용할 수있는 선택을 제한 할 수 있습니다 상자를 콤보 변경할 수 있습니다 ?

EDIT :이 테이블

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 절이 테이블/쿼리에서 단 하나의 레코드 만 반환한다고 가정합니다. 그렇지 않으면 "Do While rec.EOF = False"루프를 사용하여 반환 된 각 레코드를 반복 할 수 있습니다. –

+0

그게 완벽합니다. 나는 탁상을 탁월한 물건으로 열려고 노력하면서 vba에서 장난 꾸러기 다녔지 만 이것이 실제로 필요한 것입니다. 감사합니다. – GMoany

관련 문제