Я думаю, проблема в том, что вы на самом деле не выбираете значения в цикле.
Вам необходимо добавить .Value
.Вот скорректированный код:
Sub generic_lookup()
Dim lngRow As Long, lngCol As Long, strSQL As String, strValues As String
lngRow = Sheets("Upload").Cells(Rows.Count, 1).End(xlUp).Row + 1
lngCol = Sheets("Upload").Cells(6, Columns.Count).End(xlToLeft).Column + 1
strSQL = "INSERT INTO mytable (value1, value2, value3)" & vbNewLine
For i = 6 To lngRow
strValues = strValues & "select " & ""
Dim addedAValue As Boolean
blnAddedAValue = False
For x = 1 To lngCol
Dim strCellValue As String
strCellValue = Sheets("Upload").Cells(lngRow, lngCol).Value
If Not StrComp(strCellValue, "") Then
If Not blnAddedAValue Then
strValues = strValues & strCellValue
blnAddedAValue = True
Else:
strValues = strValues & strCellValue & ", "
End If
End If
Next x
strValues = Left(strValues, Len(strValues)) & vbNewLine
strValues = strValues & " from dual union all" & vbNewLine
Next i
If strValues <> "" Then
strValues = Left(strValues, Len(strValues) - 11)
strSQL = strSQL & strValues
conn.Execute (strSQL)
strValues = ""
strSQL = ""
End If
conn.Close
Set conn = Nothing
End Sub
Обратите внимание, что вы все еще перезаписываете strValues
несколько раз в цикле X
- вы уверены, что хотите это сделать?
Изменить: код выше обновлен, чтобы добавить только к существующей строке strValues.Логическое значение проверяет, нужно ли добавлять следующее значение через запятую.Отрегулируйте при необходимости.