Excel функция VBA возврат массива

Как описано в различном XML спецификации , element то, что, который состоит из тега запуска, и конечного тэга и промежуточного содержания, или поочередно пустой тег элементов (который не имеет никакого содержания или конечного тэга). Другими словами, это все элементы:

 stuff 


, Хотя Вы слышите "узел", используемый примерно с тем же значением, он не имеет никакого точного определения на спецификации XML. Это обычно используется для обращения к узлам вещей как DOMS, который может быть тесно связан с XML или использовать XML для их представления.

10
задан pnuts 9 February 2015 в 19:59
поделиться

2 ответа

Хорошо, у меня есть функция отображения данных, которая возвращает массив из нескольких «столбцов», так что вы можете уменьшить его до одного. Не имеет значения, как заполняется массив, особенно

Function dataMapping(inMapSheet As String) As String()

   Dim mapping() As String

   Dim lastMapRowNum As Integer

   lastMapRowNum = ActiveWorkbook.Worksheets(inMapSheet).Cells.SpecialCells(xlCellTypeLastCell).Row

   ReDim mapping(lastMapRowNum, 3) As String
   For i = 1 To lastMapRowNum
      If ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 1).Value <> "" Then
         mapping(i, 1) = ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 1).Value
         mapping(i, 2) = ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 2).Value
         mapping(i, 3) = ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 3).Value
      End If
   Next i

   dataMapping = mapping

End Function




Sub mysub()

   Dim myMapping() As String
   Dim m As Integer

   myMapping = dataMapping(inDataMap)

   For m = 1 To UBound(myMapping)

     ' do some stuff

   Next m   

end sub   
21
ответ дан 3 December 2019 в 15:22
поделиться

Я думаю Коллекция может быть тем, что вы ищете.

Пример:

Private Function getProducts(ByVal supplier As String) As Collection
    Dim getProducts_ As New Collection

    If supplier = "ACME" Then
        getProducts_.Add ("Anvil")
        getProducts_.Add ("Earthquake Pills")
        getProducts_.Add ("Dehydrated Boulders")
        getProducts_.Add ("Disintegrating Pistol")
    End If

    Set getProducts = getProducts_
    Set getProducts_ = Nothing
End Function

Private Sub fillProducts()
    Dim products As Collection
    Set products = getProducts("ACME")
    For i = 1 To products.Count
        Sheets(1).Cells(i, 1).Value = products(i)
    Next i
End Sub

Изменить: Вот довольно простое решение проблемы: заполнение ComboBox для продуктов всякий раз, когда ComboBox для поставщиков изменяет свое значение с минимально возможным количеством vba.

Public Function getProducts(ByVal supplier As String) As Collection
    Dim getProducts_ As New Collection
    Dim numRows As Long
    Dim colProduct As Integer
    Dim colSupplier As Integer
    colProduct = 1
    colSupplier = 2

    numRows = Sheets(1).Cells(1, colProduct).CurrentRegion.Rows.Count

    For Each Row In Sheets(1).Range(Sheets(1).Cells(1, colProduct), Sheets(1).Cells(numRows, colSupplier)).Rows
        If supplier = Row.Cells(1, colSupplier) Then
            getProducts_.Add (Row.Cells(1, colProduct))
        End If
    Next Row

    Set getProducts = getProducts_
    Set getProducts_ = Nothing
End Function

Private Sub comboSupplier_Change()
    comboProducts.Clear
    For Each Product In getProducts(comboSupplier)
        comboProducts.AddItem (Product)
    Next Product
End Sub

Примечания: я назвал ComboBox для поставщиков comboSupplier и тот для продуктов comboProducts.

8
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: