Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2013, 01:14   #1
Ixituni
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 20
Восклицание Самопальный пакет анализа

Камрады, выручайте!
Наваял я нечто похожее на описательную статистику
В книге(см. прилеплено) сделаны 2 формы
на одной задаются диапазоны, на другой выбираются варианты решения. В процессе кодения у меня появились проблемы:
1) как из формы 1 передать диапазон в форму2, где он обрабатывается
2) как передать выходной диапазон для статистических категорий
3) и как вывести на рабочий лист, на новый?
Сильно не пинайте за такие странноватые вопросы, пожааалуйста:з
Пробовал через глобальную переменную myRange и Option explicit в модуле, вроде передаёт, но при вызове функций стопорится: неправильный вызов функции или аргумента. Что не так делаю?
Вложения
Тип файла: rar example1023.rar (21.4 Кб, 11 просмотров)

Последний раз редактировалось Ixituni; 17.06.2013 в 01:45.
Ixituni вне форума Ответить с цитированием
Старый 17.06.2013, 02:09   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Глянул код,мягко говоря испытал шок от этого кода.
Код:
Public Sub RefEdit1_BeforeDragOver(Cancel As Boolean, ByVal Data As MSForms.DataObject, ByVal x As stdole.OLE_XPOS_CONTAINER, ByVal y As stdole.OLE_YPOS_CONTAINER, ByVal DragState As MSForms.fmDragState, Effect As MSForms.fmDropEffect, ByVal Shift As Integer)
Public myRange As Range
Application.Updating = True
myRange = Application.InputBox
Set myRange = Range(Application.InputBox).End(xlUp)
   myRange.Select
Set myRange = myRange.SpecialCells(xlCellTypeConstants, xlNumbers)
   myRange.Select

End Sub
В код не вникал,организовал обмен данными.
Даже что то считает
Форма 1
Код:
Private Range_ As Range
Private Arr_() As Variant

Public Property Get Arr() As Variant
    Arr = Arr_
End Property

Public Property Let Arr(ByVal Value As Variant)
    Arr_ = Value
End Property

Public Property Get myRange() As Range
    Set myRange = Range_
End Property

Public Property Let myRange(ByVal Value As Range)
    Set Range_ = Value
End Property

Private Sub CommandButton1_Click()
    Set Range_ = Application.Range(RefEdit1.Value)
    Set Range_ = Range_.SpecialCells(xlCellTypeConstants, xlNumbers)


    UserForm1.Hide
    UserForm2.Show
End Sub

Private Sub CommandButton2_Click()
    UserForm1.Hide

End Sub
Форма 2
Код:
Option Explicit
Private myRange As Range
Private Sub CheckBox14_Click()
    If CheckBox14.Value = True Then
        CheckBox1.Value = True
        CheckBox2.Value = True
        CheckBox3.Value = True
        CheckBox4.Value = True
        CheckBox5.Value = True
        CheckBox6.Value = True
        CheckBox7.Value = True
        CheckBox8.Value = True
        CheckBox9.Value = True
        CheckBox10.Value = True
        CheckBox11.Value = True
        CheckBox12.Value = True
        CheckBox13.Value = True
    End If
End Sub

Public Sub CommandButton1_Click()
    Dim answer#, mARR()

    Set myRange = UserForm1.myRange

    ReDim mARR(1 To 13)
    If CheckBox1.Value = True Then
        mARR(1) = Application.Average(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(2) = Application.StDev(myRange) / Sqr(myRange.Cells.Count)
    End If
    If CheckBox1.Value = True Then
        mARR(3) = Application.Median(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(4) = Application.Mode(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(5) = Application.StDev(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(6) = Application.Var(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(7) = Application.Kurt(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(8) = Application.Skew(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(9) = Abs(Application.Max(myRange)) - Abs(Application.Min(myRange))
    End If
    If CheckBox1.Value = True Then
        mARR(10) = Application.Min(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(11) = Application.Max(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(12) = Application.Sum(myRange)
    End If
    If CheckBox1.Value = True Then
        mARR(13) = myRange.Cells.Count
    End If
    Cells(5, 6).Resize(UBound(mARR), 1).Value = _
    Application.Transpose(mARR)
    UserForm1.Arr = mARR
    Erase mARR
End Sub

Private Sub CommandButton2_Click()
    UserForm2.Hide
    UserForm1.Show
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 17.06.2013, 02:17   #3
Ixituni
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 20
По умолчанию

вообщем код формы1 можно смело в топку, намёк понял
П.Сы: этот страшный код у RefEdit'a появился сам, при добавлении на форму. Я просто его не трогал=\
Как организовать передачу результатов вычислений? подобным способом, только для массива mARR? или всё по-другому?

Последний раз редактировалось Ixituni; 17.06.2013 в 02:38.
Ixituni вне форума Ответить с цитированием
Старый 17.06.2013, 03:14   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Ответ на пункт 3
X и Y проставите сами,массив после вычисления уже есть в форме 1.
Он проникает скрытым от вас путем
код кнопки вывода результата Формы 1
Код:
Private Sub CommandButton3_Click()
    
    ActiveSheet.Cells(x, y).Resize(UBound(ARR), 1).Value = _
                                   Application.Transpose(ARR)
    
    Workbooks("XX1").Worksheets("XX2").Cells(x, y).Resize(UBound(ARR), 1).Value = _
                                   Application.Transpose(ARR)
    
    
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 17.06.2013, 03:26   #5
Ixituni
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 20
По умолчанию

это невозможно, но я убил ексель своей ересью(
П.Сы: код работает, выдаёт массив на активный лист и выбивает ошибку 9: subscript out of range( такие дела

Последний раз редактировалось Ixituni; 17.06.2013 в 03:50.
Ixituni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пакет хак ClMlD Софт 8 10.12.2012 11:17
Сниффер... пакет... -Flover- Работа с сетью в Delphi 6 10.07.2012 15:43
flap пакет Chel-0007 Общие вопросы C/C++ 0 21.05.2010 14:00
Пакет вирусов. jojahti Софт 1 25.01.2010 18:23
raw пакет spoool Работа с сетью в Delphi 1 02.12.2008 08:43