Dim sheet2 As Worksheet
...
sheet2.Range("H8")
Вы объявили sheet2 var, но никогда не Set
его объекту листа.По совпадению второй рабочий лист в книге имеет свойство Worksheet.Codename , которое можно использовать в качестве ссылки на объект.Ссылка sheet2.Range("H8")
будет работать, если вы собираетесь ссылаться на этот лист;объявление Dim sheet2 As Worksheet
не нужно.Если вы намереваетесь сослаться на другой лист, не используйте sheet2 , так как может возникнуть путаница между кодовым именем второго листа и объявленной переменной, представляющей заданный объект.Вам также потребуется Set
var для объекта листа.
'write to sheet
sheet2.Cells(7 + i, 8).Value = textBetween
Выше записывает textBetween в sheet2.Range("H8")
во время первой итерации цикла For ... Next,Последующие циклы перечитывают перезаписанное значение, поэтому ваши результаты не будут такими, как вы ожидаете.
Лучший вариант - разбить строку на массив с нулями и выбрать фрагмент, который вы хотите вернуть.Функция UserDefined может использоваться в общедоступной подпрограмме или непосредственно на рабочем листе.
Option Explicit
Sub FindStrings()
Dim i As Long
Dim textBetween As String
For i = 1 To 8
textBetween = FindNthString(Sheet2.Range("H8").Value, i)
'write to sheet
Sheet2.Cells(8 + i, "H").Value = textBetween
Next i
End Sub
Function FindNthString(str As String, ndx As Long, _
Optional delim As String = "@")
FindNthString = CVErr(xlErrNA)
'Split uses a zero-based array by default
'the first 'piece' is at position 0
ndx = ndx - 1
If UBound(Split(str, delim)) >= ndx And ndx >= 0 Then
FindNthString = Split(str, delim)(ndx)
End If
End Function
введите описание изображения здесь