Попробуйте соединить каждую строку в диапазоне с помощью CRLF, чтобы создать строку. Массив, назначенный из диапазона, представляет собой один столбец с множеством строк. Для функции JOIN необходим массив из нескольких столбцов с одной строкой и, следовательно, функция транспонирования.
Dim StrSQL As String, arLines As Variant
arLines = ScriptExecutor.Range("A14: A" & irow).Value
StrSQL = Join(Application.Transpose(arLines), vbCrLf)
Если вам нужно игнорировать --comments, включая те, что находятся в той же строке, что и оператор (и пустые строки), тогда создайте строка по одной строке за раз, вероятно, самый простой метод.
Dim cell As Range, sLine As String, StrSQL As String
With ScriptExecutor.Range("A14: A" & irow)
For Each cell In .Cells
sLine = Trim(cell.Value)
' remove any comments --
i = InStr(1, sLine, "--", vbTextCompare)
If i > 0 Then
sLine = Left(sLine, i - 1)
End If
If len(sLine) = 0 Then
' skip blank lines
Else
If Len(StrSQL) > 0 Then sLine = vbCrLf & sLine
StrSQL = StrSQL & sLine
End If
Next
End With
Debug.Print StrSQL
При наличии нескольких запросов в одном скрипте вы получаете несколько наборов записей, поэтому попробуйте использовать метод .nextRecordSet.
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.Name = "Extracts-" & sheetnumber
Set rs = oCon.Execute(sql)
iRow = 2
Do Until rs Is Nothing
With ws
.Range("A" & iRow).CopyFromRecordset rs
iRow = .Range("A" & Rows.Count).End(xlUp).Row + 2
End With
Set rs = rs.nextRecordSet
Loop