Подсчёт итоговых данных (макрос из Excel)

Автор Lero, 24 декабря 2015, 11:53

0 Пользователи и 1 гость просматривают эту тему.

Lero

Помогите!! Офис переводят на openoffice или libreoffice

Есть макрос из exel и его надо переделать под эти программы.

Option Explicit

Sub getcliks()
Dim i&, j&, arr_list, dic, lastr&, arr
On Error GoTo ex
With l2
    lastr = .Range("a4").End(xlDown).Row
    If lastr = Rows.Count Then MsgBox "нет списка": GoTo ex
    arr_list = .Range("a4", "a" & lastr)
End With
ReDim Preserve arr_list(1 To UBound(arr_list), 1 To 3)
With l1
    lastr = .Range("a5").End(xlDown).Row
    If lastr = Rows.Count Then MsgBox "нет списка": GoTo ex
    arr = .Range("a5", "c" & lastr)
End With
ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
For i = 1 To UBound(arr)
    For j = 1 To UBound(arr_list)
        If Trim(LCase(arr(i, 1))) Like "*" & Trim(LCase(arr_list(j, 1))) & "*" Then
            arr_list(j, 2) = arr_list(j, 2) + arr(i, 2)
            arr_list(j, 3) = arr_list(j, 3) + arr(i, 3)
            arr(i, 4) = arr_list(j, 1)
            Exit For
        End If
    Next j
Next i
With l2
    .Range("a4").Resize(UBound(arr_list), UBound(arr_list, 2)) = arr_list
End With
With l1
    .Range("a5").Resize(UBound(arr), UBound(arr, 2)) = arr
End With
ex: Set dic = Nothing
End Sub

JohnSUN

Добро пожаловать на форум! И в офисы (openoffice или libreoffice - не важно) тоже добро пожаловать!
Это не очень сложная задача.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Lero

Добрый день!

Спасибо огромное. Открыла файл и получила ошибку. http://prntscr.com/9ibssx

JohnSUN

Грустно... На скриншоте не виден номер строки, которая заартачилась - Basic её обычно выделяет и тычет красной стрелочкой (как на картинке).
Но, кажется, я догадываюсь, почему макрос сбойнул. Только проверить, к сожалению, не смогу - 4.4.6.3 у меня на машине уже давно нет...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

JohnSUN, а зачем макрос привязывать к событию "Выделенная область изменена"? ведь при любом телодвижении происходит перерасчёт (даже при переходе с одного листа на другой). Я бы отвязал, тем более от такого события.

JohnSUN

Скорость выполнения достаточно высока, пересчёт практически не ощущается даже на больших объёмах данных.
Зато:
1) на листе Итоги постоянно имеем актуальные данные;
2) при вводе ошибочной номенклатуры сразу видим, что не угадали с категорией (например, глазами отличить "НР" от "HP" вряд ли кто сможет)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне