Как получить данные о дальности в VBA? - PullRequest
0 голосов
/ 16 октября 2018

Я начинаю изучать VBA программирование в Excel, поэтому мой вопрос может быть довольно простым.
Все, что я пытаюсь сделать, это:

1) Получить мой код для установки некоторого диапазона (строка или столбец) 2) Получить мой код для создания массива со значениями этого диапазона

Представьте, что у меня есть некоторые числа в column A, from A1 to A50.Если я выберу ячейку F7 (rng1 в приведенном ниже коде) и запусту код, я хотел бы получить данные A1:A7 (rng2), Z5 даст мне A1:A5 и так далее.

Первое, что я попробовал, было следующее:

Sub getdata()

    Dim rng1 As Range   'This will be the selected cell
    Dim rng2 As Range   'This will contain the data I want to retrieve
    Dim data() As Variant  'And this will be the data

    ' Define the ranges
    Set rng1 = Selection
    Set rng2 = Range(Cells(1, 1), Cells(rng1.Row, 1))

    'Get data
    data = rng2.Value
    Stop

End Sub

, который по какой-то причине создает древовидную структуру вместо одномерного массива.

Я бы хотел комфортно работать с данными, поэтому я посмотрел и нашел обходной путь в Интернете с помощью этой процедуры:

Sub SubValuesFromRange()
    Dim someRange As Range
    Dim someValues As Variant

    Set someRange = Selection

    With someRange
        If .Cells.Count = 1 Then
            ReDim someValues(1 To 1)
            someValues(1) = someRange.Value
        ElseIf .Rows.Count = 1 Then
            someValues = Application.Transpose(Application.Transpose(someRange.Value))
        ElseIf .Columns.Count = 1 Then
            someValues = Application.Transpose(someRange.Value)
        Else
            MsgBox "someRange is multi-dimensional"
        End If
    End With
    Stop
End Sub

Эта процедура сама по себе работает нормально.Если я выбираю A1:A5 и запускаю его, он получает данные.Если я попробую сделать это со строкой, она тоже будет работать.

Поэтому я попытался создать из нее функцию, которую я мог бы использовать в своей основной процедуре, и это было бы очень полезно для моих будущих программ.

Вот код и функции:

Sub getdata()
    Dim rng1 As Range   'This will be the selected cell
    Dim rng2 As Range   'This will contain the data I want to retrieve
    Dim data() As Variant  'And this will be the data

    ' Define the ranges
    Set rng1 = Selection
    Set rng2 = Range(Cells(1, 1), Cells(rng1.Row, 1))

    'Get data, this time throug the function
    data = ValuesFromRange(rng2)
    Stop
End Sub

Function ValuesFromRange(someRange)
    Dim someValues As Variant
    With someRange
        If .Cells.Count = 1 Then
            ReDim someValues(1 To 1)
            someValues(1) = someRange.Value
        ElseIf .Rows.Count = 1 Then
            someValues = Application.Transpose(Application.Transpose(someRange.Value))
        ElseIf .Columns.Count = 1 Then
            someValues = Application.Transpose(someRange.Value)
        Else
            MsgBox "someRange is multi-dimensional"
        End If
    End With
End Function

И ... Я получаю сообщение об ошибке:

Номер 13, несоответствие типов

Есть идеи почему?

Может ли быть более простой способ получить данные Excel в VBA?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...