vba следующая итерация, если содержимое ячейки уже прошло - PullRequest
0 голосов
/ 17 июня 2020

Итак, следуя моему коду l oop через таблицу, подключиться к sql серверу и отправить данные таблицы, у меня есть еще одно небольшое ограничение: я отправляю что-то вроде 5400 строк и 13 столбцов данных строка за строкой , ячейка за ячейкой (что на самом деле не так уж и медленно!), но мне нужно установить в какой-то ячейке условие: если я уже отправил содержимое ячейки (например, номер клиента, уже отправленный в базу данных), я не хочу вставлять его дважды, чтобы перейти к следующей итерации. Вот упрощенная версия моего l oop:

nrow = 1

While My_range.Offset(nrow).Value <> ""  'continue if cell's not empty

'connect to the db and create a command that send the data

Set mobjCmd = New ADODB.Command
        With mobjCmd
        
            .ActiveConnection = mobjConn
            .CommandText = "INSERT_PRODUCT"
            .CommandType = adCmdStoredProc
            .CommandTimeout = 0

            'append the cell of the second row, first column in the db in the Client_id column  in my SQL table
 
            .Parameters.Append .CreateParameter("@Client_id", adChar, adParamInput, 255, Worksheets("My_Sheet").Range("A1").Offset(nrow, 0).Value)

            .Execute

Wend

В основном я думал о чем-то вроде:

If ... then GoTo NextIteration

End if

NextIteration: my_next_iteration

Но что настроить ввод / вывод "..." так что если он видит client_id, который уже отправил, он просто переходит к следующей итерации.

Заранее спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 18 июля 2020

Спасибо @Spencer Barnes за помощь. Функция Countif - хорошая идея. Другой способ - напрямую изменить хранимую процедуру в SQL. Вы можете даже использовать оператор UPDATE (если существует ... UPDATE), если ваши данные чистые

0 голосов
/ 17 июня 2020

У меня уже пару раз возникала эта проблема, и я, как правило, использую Worksheetfunction.countif на каждом l oop, чтобы проверить, встречаются ли какие-либо экземпляры одного и того же числа выше / ниже него.

В вашем если это будет выглядеть примерно так:

If WorksheetFunction.Countif(Range(Cells(1, MyRange.Column), Cells(nrow, MyRange.Column)), MyRange.Offset(nrow).Value) > 0 Then GoTo NextIteration
...