Сегодня на работе я пытался сделать быстрый инструмент для автоматизации некоторых задач, но столкнулся с проблемой получения ошибок Sun или Function. Я абсолютный новичок в VB и не знаком с синтаксисом и/или особенностями языка. Не могли бы вы мне помочь? Подробности того, что я пытаюсь сделать: По сути, у меня есть несколько групп (всего 4 ячейки в каждой группе), которые я пытаюсь скопировать в одну ячейку. Вот так:
Группа1: ячейка1 ячейка2 ячейка3 ячейка4
Группа2: . . . Каждую из этих групп необходимо скопировать в отдельные ячейки.
Вот код:
Public Sub GlobalConcatenation()
Dim sourcerange As Range
Dim gbegin As Integer
Dim gend As Integer
gbegin = 2
gend = 5
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin), Cells(2, gend))
Dim i As Integer
For i = 2 To 50
callConcatinateAllCellValuesInRange (sourcerange)
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin + 4), Cells(2, gend + 4))
End Sub
Function ConcatinateAllCellValuesInRange(sourcerange As Excel.Range) As String
Dim finalValue As String
Dim cell As Excel.Range
For Each cell In sourcerange.Cells
finalValue = finalValue + CStr(cell.Value)
Next cell
ConcatinateAllCellValuesInRange = finalValue
End Function
EDIT: Я чувствую, что мне также нужно указать, что проблема проявляется в функции GlobalConcatenation(), и всякий раз, когда я получаю ошибку, подсвечивается «sourcerange».
EDIT: обновил код - исправил орфографическую ошибку
решение1
Это произошло из-за орфографической ошибки в этой строке gbeging
:
Неправильный:-
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbeging), Cells(2, gend))
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbeging + 4), Cells(2, gend + 4))
Правильный ответ:-
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin), Cells(2, gend))
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin + 4), Cells(2, gend + 4))
решение2
Наиболее вероятной причиной вашей ошибки являются неквалифицированные ссылки на ячейки в строках типа
sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin), Cells(2, gend))
Cells(2, gbegin)
ссылается на ячейку на активном листе. Если это не так, то raw_LSToolData
возникнет ошибка
Правильный код:
sourcerange = Sheets("raw_LSToolData").Range(Sheets("raw_LSToolData").Cells(2, gbegin), Sheets("raw_LSToolData").Cells(2, gend))
Лучший способ - это
with Sheets("raw_LSToolData")
sourcerange = .Range(.Cells(2, gbegin), .Cells(2, gend))
end with
Обратите внимание на .
' перед Range
and Cells
- это ссылка на with
объект предложения