Сегодня я пытался создать быстрый инструмент для автоматизации некоторых задач на работе, но столкнулся с проблемой получения ошибок 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

РЕДАКТИРОВАТЬ: я чувствую, что мне также нужно указать, что проблема обнаруживается в функции GlobalConcatenation(), и всякий раз, когда я получаю ошибку, выделяется "sourcerange".

РЕДАКТИРОВАТЬ: обновил код - исправлена орфографическая ошибка

2 ответа2

0

Скорее всего, причиной вашей ошибки являются неполные ссылки на ячейки в строках

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 и Cells - это ссылка на объект with предложением

0

Это связано с ошибкой заклинания в этой строке при 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))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .