Страницы: 1
RSS
Создание спарклайнов и диаграмм через пользовательскую форму редактора VBA, Ошибка Run-time error '448':
 
Может кто поможет решить проблему? Представленный код VBA предназначен для обработки данных в Excel посредством макросов и выполнения одной из двух операций в зависимости от выбранного пользователем варианта:

Код
'Подключаемся к событию клика по кнопке
Private Sub CommandButton1_Click()
    Call CreateVisuals
End Sub

'Основная процедура построения графиков и спарклайнов
Public Sub CreateVisuals()
    Dim ws As Worksheet
    Dim rngData As Range
    Dim lastRow As Long, lastCol As Long
    Dim dataRange As String
    Dim colLetter As String

    Set ws = ActiveSheet

    'Автоматическое определение границ таблицы
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    Set rngData = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))

    'Получаем букву столбца по последнему столбцу
    colLetter = GetColumnLetter(lastCol)

    'Выполняем операцию согласно выбору пользователя
    If OptionButton1.Value = True Then
        'Создание спарклайнов
        Dim i As Long
        For i = 2 To lastRow
            dataRange = "=""" & ws.Name & """!$B$" & i & ":$" & colLetter & "$" & i

            With ws.Cells(i, lastCol + 1)
                .SparklineGroups.Add _
                    Type:=xlSparkLine, _
                    SourceData:=dataRange, _
                    Location:=.Offset(0, 0)

                .SparklineGroups.Item(1).Position = xlSparklinePositionCellCenter
            End With
        Next i

    ElseIf OptionButton2.Value = True Then
        'Создание диаграммы
        Dim chtObj As ChartObject
        Set chtObj = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=50, Height:=225)
        With chtObj.Chart
            .SetSourceData Source:=rngData
            .chartType = xlColumnClustered
            .HasTitle = True
            .ChartTitle.Text = "Выручка, тыс.руб."
        End With
        MsgBox "Диаграмма создана"
    Else
        MsgBox "Выберите действие"
    End If

    Unload Me
End Sub


При выборе кнопки "Построить спарклайны" выходит такая ошибка Run-time error '448': Макрорекодер указывает на  SourceData, не понимаю почему, все аргументы для метода .Add были соблюдены, также соблюден официальный порядок параметров для этого метода.
Изменено: Sanja - 05.03.2026 08:40:02 (Обратите внимание - код в сообщении выделяется соответствующим тэгом)
 
Цитата
alense написал:
'Получаем букву столбца по последнему столбцу    
colLetter = GetColumnLetter(lastCol)
Функция GetColumnLetter присутсвует в коде?
Согласие есть продукт при полном непротивлении сторон
 
Уберите Location:=.Offset(0, 0) из кода и должно заработать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Уберите Location:=.Offset(0, 0) из кода и должно заработать.
Это невозможно, так как Location является обязательным аргументом для метода .Add. Даже закомментировать эту строку не получается - выходит ошибка компиляции. Официально именно такой порядок должен быть Type:
                                                                                                         SourceData:
                                                                                                         Location:
 
Цитата
написал:
Функция GetColumnLetter присутсвует в коде?
Да, присутствует.
' Вспомогательная функция для конвертации номера столбца в букву
Function GetColumnLetter(colNum As Long) As String
   Dim div As Integer
   Dim colName As String
   div = colNum
   Do While div > 0
       div = Int((div - 1) / 26)
       colName = Chr(div * 26 Mod 26 + Asc("A")) & colName
   Loop
   GetColumnLetter = colName
End Function
 
Цитата
alense написал: Это невозможно, так как Location является обязательным аргументом для метода .Add
Откуда Вы это взяли?
Метод SparklineGroups.Add (Excel)
Согласие есть продукт при полном непротивлении сторон
 
Спасибо за помощь, разобралась, упростила код создания спарклайнов: ws.Cells(lastRow + 1, 2).SparklineGroups.Add xlSparkColumn, "B2:B" & lastRow
Все работает)
 
Цитата
alense написал:
Это невозможно
а попробовать? Сами же писали, что выходит ошибка "Run-time error '448'". А ошибка означает недопустимый аргумент в функции. Я предложил его убрать. Странное отношение к ответам - просите помочь с решением, а пробовать предложенные варианты не хотите :)
Изменено: Дмитрий(The_Prist) Щербаков - 05.03.2026 11:45:28
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
а попробовать? Сами же писали, что выходит ошибка "Run-time error '448'". А ошибка означает недопустимый аргумент в функции. Я предложил его убрать. Странное отношение к ответам - просите помочь с решением, а пробовать предложенные варианты не я
Я попробовала, но у меня выходила ошибка, потом гуглила, что не так, сделала вывод, что Location это аргумент обязательный.  
Изменено: alense - 05.03.2026 19:48:40
 
Цитата
alense написал:
Даже закомментировать эту строку не получается - выходит ошибка компиляции
конечно нельзя. Она ведь часть конструкции. Неверно комментировали - это факт. Надо было просто удалить, как я и написал.
И к тому же, у Вас и диапазон неверно задается - там куча лишних кавычек еще:
Код
dataRange = "=""" & ws.Name & """!$B$" & i & ":$" & colLetter & "$" & i

надо в порядок привести. В итоге у Вас получилось бы:
Чтобы получилось это:
Код
dataRange = "=B" & i & ":" & colLetter & i
            With ws.Cells(i, lastCol + 1)
                .SparklineGroups.Add _
                    Type:=xlSparkLine, _
                    SourceData:=dataRange
                .SparklineGroups.Item(1).Position = xlSparklinePositionCellCenter
            End With

Надо было сразу файл прикладывать - тогда бы сразу все косяки вылезли. А по голому коду сложновато ориентироваться.
Изменено: Дмитрий(The_Prist) Щербаков - 05.03.2026 19:58:28
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх