Excel VBA - многократный запуск сценария SQL с другим значением переменной - PullRequest
0 голосов
/ 02 февраля 2012

Я хочу запустить скрипт в моем макросе несколько раз, изменяя значения переменных. Ниже приведен пример моего кода, который я запускаю для одного значения. Строка кода, которую я хотел бы изменить, -

sScript = sScript + "where m.outletid in ('" & sOutletId & "') " & vbCrLf

Иногда я хочу, чтобы предложение where было

где m.outletid in ('12314')

или

где m.chainid in ('411') ...

Код:

Sub Report()
    Dim sScript As String
    Dim sServer As String
    Dim sDatabase As String
    Dim sTransTable As String
    Dim iVal As Integer
    Dim iReturnVal As Integer
    Dim SheetExists As Worksheet
    Dim WK_SHEET As String

       sServer = Trim(UserForm1.txtServer.Value)
       sDatabase = Trim(UserForm1.txtDatabase.Value)
       sTransTable = Trim(UserForm1.txtTransTable.Value)

       For Each SheetExists In Worksheets
          If SheetExists.Name = ("Report") Then
          Application.DisplayAlerts = False
          Sheets("Report").Delete
          Application.DisplayAlerts = True
      Exit For
      End If
      Next SheetExists

      Worksheets.Add after:=Sheets("Sheet1")
      ActiveSheet.Name = ("Report")

      WK_SHEET = "Report"

      Sheets(WK_SHEET).Select

       sOutletId = "12314"

       sScript = "Select top 10 m.CustNumber, m.Name, sum(t.Transvalue) " & vbCrLf        
       sScript = sScript + "from " & sTransTable & " t " & vbCrLf
       sScript = sScript + "where m.outletid in ('" & sOutletId & "') " & vbCrLf
       sScript = sScript + "Group by m.CustNumber, m.Name " & vbCrLf
       sScript = sScript + "order by sum(t.Transvalue)Desc " & vbCrLf

      iReply = MsgBox(Prompt:="Do you wish to continue with the following script for Top 10 Customers?" + sScript + "", _
    Buttons:=vbYesNo, Title:="Run MACRO Top 10 Reports")
    If iReply = vbNo Then
        End
    End If

    iVal = execute_sql_select(WK_SHEET, 2, 1, sServer, sDatabase, sScript)

    Sheets(WK_SHEET).Name = "Outlet" & sOutletId & "Top 10 by Spend"

Теперь я хотел бы повторить вышеизложенное с OutletId 12315 ... как я могу это сделать? Я использую какой-то цикл?

1 Ответ

1 голос
/ 02 февраля 2012

Вы можете сохранить список OutletId в массиве. Затем получите каждый OutletId из массива (для цикла) и выполните сценарий sql.

Псевдокод

Array listOutid = new Array[12,13,14,15];

for(int idx = 0; idx < listOutid.Length; idx++)
{
    var OutletId = listOutid[idx];

    //put ur sql statement and execute here..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...