2010-04-02 1 views
0

У меня есть поле со списком моей форме с выбором выбора организации 10, 20, 30 ....Как кодировать вариант ALL в Combo Box

я добавил ALL в поле списка со списком, но мне трудно выполнить все утверждения в VBA. Ниже приведено заявление о том, что мне нужно получить информацию от организаций 10, 20, 30. Как получить ВСЕ, чтобы генерировать?

Case Is = 1 
    If cboOrg.ListIndex < 0 Then 
     Call msg("Please select your organization!") 
     Exit Sub 
    End If 
    sQ = sQ & " CC LIKE '" & cboOrg.Value & "*'" 
    ORGCC = Trim(cboOrg.Value) 
+0

Является ли это MS Access? Что вы делаете с 'sQ' перед этим' Case', есть ли 'WHERE' или' AND'? –

+0

есть доступ. Case Is = 1 sQ = "SELECT * INTO [" & myFile & "] FROM BUD" – Edmond

+0

@Edmond: В вашем запросе должно быть предложение WHERE' ... –

ответ

1

Я думаю, вы должны генерировать только WHERE/AND -clause, когда значение не "ALL" (вместо текущего назначения):

If (cboOrg.Value <> "ALL") Then 
    sQ = sQ & " AND CC LIKE '" & cboOrg.Value & "*'" 
End If 

Чтобы заставить его работать без изменения кода перед (генерации AND или WHERE), вы можете попробовать:

If (cboOrg.Value <> "ALL") Then 
    sQ = sQ & " CC LIKE '" & cboOrg.Value & "*'" 
Else 
    sQ = sQ & " 1=1" 
End If 

Вам действительно нужен LIKE (делает CC только начать с выбранного значения) или будет
WHERE CC = '" & cboOrg.Value & "'" будет достаточным?

+0

Нет, мне действительно не нужно – Edmond

+0

@Edmond: Тогда я удалю его, это сделает ваш код более удобным для чтения и может повысить производительность. Как насчет остальной части моего ответа? –

+0

sQ = sQ "WHERE CC = '" & cboOrg.Value & "'" keep geeting syntex error – Edmond

0

Private Sub cmdGo_Click()

Dim db As Database, rs As Recordset, sQ As String 

Dim oXL, oExcel As Object 

Set oXL = CreateObject("Excel.Application") 

fPath = "\\firework\mmcfin\123files\Edmond\Lawson Query\Log\" 

myTime = Now() 

myFile = Environ("UserName") & "-" & Environ("ComputerName") & "-" & Replace(Replace(Replace(Trim(myTime), "/", "-"), " ", "-"), ":", "-") 

pTitle = "Lawson Queries" 

Set db = CurrentDb 

Select Case cboActBud.ListIndex 

    Case Is < 0 
     Call msg("Please select your query type first: Actual or Budget!") 
     Exit Sub 

    Case Is = 0 
     sQ = "SELECT * INTO [" & myFile & "] FROM ACT" 
     toAdd = "WHERE" 

    Case Is = 1 
     sQ = "SELECT * INTO [" & myFile & "] FROM BUD" 

     If cboBucket.ListIndex < 0 Then 
      Call msg("Please select your budget bucket!") 
      Exit Sub 

     Else 

      toAdd = "WHERE BUDGET_NBR = " & cboBucket.Value & " AND" 

     End If 

End Select 

myAcctLo = txtACCT1.Value 
myAcctHi = txtACCT2.Value 

If IsNull(myAcctLo) Or myAcctLo < 1000 Or myAcctLo > 99999 Then 

    Call msg("Account number is missing or invalid!") 
    Exit Sub 

End If 

If IsNull(myAcctHi) Then 

    myAcctHi = myAcctLo 

End If 

If myAcctLo > myAcctHi Then 

    Call msg("Account range is invalid!") 
    Exit Sub 

End If 

If myAcctLo < 90000 And myAcctHi >= 90000 Then 

    Call msg("You can query amounts or units; but, not both at the same time!") 
    Exit Sub 

End If 

Select Case myAcctLo 

    Case Is < 90000: sQ = sQ & "AMT " & toAdd 
    Case Is >= 90000: sQ = sQ & "UNT " & toAdd 

End Select 

Select Case cboLevel.ListIndex 

    Case Is < 0 
     Call msg("Please select your reporting level: Cost Center or Organization!") 
     Exit Sub 

    Case Is = 0 
     If IsNull(txtCC) Then 
      Call msg("Please enter your cost center!") 
      Exit Sub 
     End If 
     sQ = sQ & " CC = " & txtCC.Value 
     ORGCC = Trim(txtCC.Value) 

    Case Is = 1 
     If cboOrg.ListIndex < 0 Then 
      Call msg("Please select your organization!") 
      Exit Sub 
     End If 
     sQ = sQ & " CC LIKE '" & cboOrg.Value & "*'" 
     ORGCC = Trim(cboOrg.Value) 

     If (cboOrg.Value <> "All") Then 
     sQ = sQ & " CC LIKE '" & cboOrg.Value & "*'" 
     Else 
     sQ = sQ & " 1=1" 
     End If 

End Select 

If cboYear.ListIndex < 0 Then 

    Call msg("Please select an year!") 
    Exit Sub 

End If 

sQ = sQ & " AND FY = " & cboYear.Value & " AND (ACCT >= " & myAcctLo & " AND ACCT <= " & myAcctHi & ")" 

DoCmd.Hourglass True 

db.Execute sQ 

sQ = "INSERT INTO tblLog (UserName, ComputerName, DateAndTime, ORGORCC, ACCT1, ACCT2, BUDGET, FY) VALUES ('" & _ 
    Environ("UserName") & "','" & Environ("ComputerName") & "',#" & myTime & "#," & ORGCC & "," & myAcctLo & _ 
    "," & myAcctHi & "," & IIf(cboBucket.ListIndex < 0, 0, Trim(cboBucket.Value)) & "," & Trim(cboYear.Value) & ")" 

db.Execute sQ 


DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, myFile, fPath & myFile, True 

With oXL 

    .Visible = True 
    .Workbooks.Open (fPath & myFile) 

End With 

Set oXL = Nothing 

DoCmd.Hourglass False 

db.Close 
+0

Был ли ваш запрос раньше? Что произойдет, если вы вызовете этот код? (было бы лучше отредактировать ваш вопрос, а не публиковать ответ самостоятельно) –

+0

Да, это так. Когда я вызываю этот код, я получаю таблицу Excel с данными из таблиц. Но когда я пытаюсь добавить оператор ALL, у меня есть синтаксические ошибки (отсутствующий оператор) в выражении запроса «ALL – Edmond

+0

Вам нужно заменить старые« sQ = sQ & »CC LIKE» и cboOrg.Value & "* '" by by мой код. –