Исключить выбранные строки из результатов - PullRequest
0 голосов
/ 30 апреля 2020

Я никогда не работал над сценариями VB раньше. У меня есть требование генерировать операторы вставки на основе некоторых примеров данных в таблице Excel.

Я работал над одним макросом vb, который генерирует результаты для всех столбцов таблицы.

например, для двух строк будет получен результат, как показано ниже:

insert into [Col1] ([col2], [col3], [col4], [col5c], [col6])
values
('ABC', 'PF', 'Loan_amount', 'GDTG/_Prod', 'IDW/logs'), 
('DFGC', 'PF', 'Investment', 'GDTG/_Prod', 'ERW/logs')

Теперь у меня изменилось требование. В начале я добавил еще один столбец, который имеет некоторые значения, такие как new, old, delete et c.

. Я хочу, чтобы вставка создавалась только в «новых» отмеченных строках. Например, ниже я хочу получить результат только для новых: Пример данных

Также ниже приведен мой текущий скрипт:

Sub GetInsertSQL()
    Dim wsSrc As Worksheet: Set wsSrc = ActiveSheet
    Dim LastRow As Long: LastRow = wsSrc.UsedRange.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Dim LastCol As Long: LastCol = wsSrc.UsedRange.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Dim i As Long, j As Long
    Dim strQuery As String
    Dim strOutput As String

    strQuery = ""
    For j = 1 To LastCol
        strQuery = strQuery + "[" + CStr(wsSrc.Cells(1, j)) + "], "
    Next j
    strQuery = Left(strQuery, Len(strQuery) - 2)
    strQuery = "insert into [" + wsSrc.Name + "] (" + strQuery + ")"
    strOutput = strQuery + Chr(13) + Chr(10) + "values"

    For i = 2 To LastRow
        strQuery = ""
        For j = 1 To LastCol
            strQuery = strQuery + "'" + Replace(CStr(wsSrc.Cells(i, j).Text), "'", "''") + "', "
        Next j

        strQuery = "(" + Left(strQuery, Len(strQuery) - 2) + "), "
        strOutput = strOutput + Chr(13) + Chr(10) + strQuery
    Next i

    strOutput = Left(strOutput, Len(strOutput) - 2)
    OutputForm.txtOutput.Text = strOutput
    OutputForm.Show vbModal
End Sub

1 Ответ

1 голос
/ 30 апреля 2020
Sub GetInsertSQL()
    Dim wsSrc As Worksheet: Set wsSrc = ActiveSheet
    Dim LastRow As Long: LastRow = wsSrc.UsedRange.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Dim LastCol As Long: LastCol = wsSrc.UsedRange.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Dim i As Long, j As Long
    Dim strQuery As String
    Dim strOutput As String

    strQuery = ""
    For j = 1 To LastCol
        strQuery = strQuery + "[" + CStr(wsSrc.Cells(1, j)) + "], "
    Next j
    strQuery = Left(strQuery, Len(strQuery) - 2)
    strQuery = "insert into [" + wsSrc.Name + "] (" + strQuery + ")"
    strOutput = strQuery + Chr(13) + Chr(10) + "values"

    For i = 2 To LastRow
        strQuery = ""
        'Adding this if condition to check if value in 1st column is New
        If (lcase(wsSrc.Cells(i, 1).Text) = "new") Then
        For j = 1 To LastCol
                strQuery = strQuery + "'" + Replace(CStr(wsSrc.Cells(i, j).Text), "'", "''") + "', "
        Next j

        strQuery = "(" + Left(strQuery, Len(strQuery) - 2) + "), "
        strOutput = strOutput + Chr(13) + Chr(10) + strQuery
        End If
    Next i

    strOutput = Left(strOutput, Len(strOutput) - 2)
    OutputForm.txtOutput.Text = strOutput
    OutputForm.Show vbModal
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...