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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2016, 14:14   #1
Novohodonoser
 
Регистрация: 16.01.2016
Сообщений: 4
По умолчанию Помощь с ошибкой №438

Доброго времени суток. Возможно с этой проблемой уже обращались, но я похожего не нашел. Занимаясь изучением MS Excel htibk сделать макрос который считает количество выделенных ячеек. подобный макрос уже писал, но без форм, и проблем не возникало. но при компиляции этого кода появляется ошибка.
код макроса
Цитата:
Private Sub CommandButton1_Click()
Dim i, j, A1, A2, A3
For i = 1 To TextBox1
For j = 1 To TextBox2
If Cells(i, j).interoir.ColorIndex = 6 Then
If ComboBox1.Text = "æîëòûé" Then
A1 = A1 + 1
End If
If ComboBox2.Text = "æîëòûé" Then
A2 = A2 + 1
End If
If ComboBox3.Text = "æîëòûé" Then
A3 = A3 + 1
End If
End If
If Cells(i, j).interoir.ColorIndex = 5 Then
If ComboBox1.Text = "ñèíèé" Then
A1 = A1 + 1
End If
If ComboBox2.Text = "ñèíèé" Then
A2 = A2 + 1
End If
If ComboBox3.Text = "ñèíèé" Then
A3 = A3 + 1
End If
End If
If Cells(i, j).interoir.ColorIndex = 4 Then
If ComboBox1.Text = "çåëåíûé" Then
A1 = A1 + 1
End If
If ComboBox2.Text = "çåëåíûé" Then
A2 = A2 + 1
End If
If ComboBox3.Text = "çåëåíûé" Then
A3 = A3 + 1
End If
End If
Next
Next
Label1 = A1
Label2 = A2
Label3 = A3
End Sub
Написание макросов изучаю для развлечения. Прошу строго не судить за кривость кода.
Novohodonoser вне форума Ответить с цитированием
Старый 16.01.2016, 14:44   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Novohodonoser Посмотреть сообщение
макрос который считает количество выделенных ячеек.
твой макрос не делает это.

Компилятор не ругается на
Код:
interoir
?

Зачем код без файла? Приложи файла с формой
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.01.2016, 15:03   #3
Novohodonoser
 
Регистрация: 16.01.2016
Сообщений: 4
По умолчанию

все понял, просто ошибка в слове, прошу прощения за беспокойство!

И спасибо за помощь, с остальным разберусь
Novohodonoser вне форума Ответить с цитированием
Старый 19.01.2016, 10:40   #4
Novohodonoser
 
Регистрация: 16.01.2016
Сообщений: 4
По умолчанию

Доброго времени суток!

Создавать новую тему смысла не вижу, вопрос по тому же макросу.
Работает он без ошибок, но есть один недочет. Данный макрос считает объединенные ячейки как две разных, необходимо исключить этот недочет. Как именно это организовать не могу придумать.

Любая адекватная критика по оптимизации будет плюсом.

Спасибо за помощь.
Вложения
Тип файла: zip счетчик цветов.zip (21.7 Кб, 11 просмотров)
Novohodonoser вне форума Ответить с цитированием
Старый 19.01.2016, 12:15   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Private Sub CommandButton1_Click()
      Dim dic
    Dim i, j, f As Boolean
    Dim lib() As String
    
    Set dic = CreateObject("Scripting.Dictionary")
    dic.Add "жолтый", "0" :  dic.Add "синий", 0 :  dic.Add "зеленый", 0
    ReDim lib(CInt(TextBox1) * CInt(TextBox2))
    
    For i = 1 To CInt(TextBox1)
        For j = 1 To CInt(TextBox2)
            With Cells(i, j)
                If Not (.MergeCells) Then
                    Select Case .Interior.ColorIndex
                        Case 6: dic.Item("жолтый") = dic.Item("жолтый") + 1
                        Case 14: dic.Item("зеленый") = dic.Item("зеленый") + 1
                        Case 23: dic.Item("синий") = dic.Item("синий") + 1
                    End Select
                Else
                    f = True
                    For ci = 0 To count
                        If lib(ci) = .MergeArea.Address Then
                            f = False
                            Exit For
                        End If
                    Next
                    If f Then
                        lib(count) = .MergeArea.Address
                        count = count + 1
                        Select Case .Interior.ColorIndex
                            Case 6: dic.Item("жолтый") = dic.Item("жолтый") + 1
                            Case 14: dic.Item("зеленый") = dic.Item("зеленый") + 1
                            Case 23: dic.Item("синий") = dic.Item("синий") + 1
                        End Select
                    End If
                End If
            End With
        Next j
    Next i
    
    If dic.exists(ComboBox1.Text) Then
        Label1 = dic.Item(ComboBox1.Text)
    End If
    If dic.exists(ComboBox2.Text) Then
        Label2 = dic.Item(ComboBox2.Text)
    End If
    If dic.exists(ComboBox3.Text) Then
        Label3 = dic.Item(ComboBox3.Text)
    End If
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.01.2016, 13:05   #6
Novohodonoser
 
Регистрация: 16.01.2016
Сообщений: 4
По умолчанию

Спасибо

Теперь буду разбираться в написанном)) Очень помогли)
Novohodonoser вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
run time error 438 object doesn't support KApSuL Microsoft Office Excel 9 30.12.2014 13:45
BorgChat 1.0.0 (b. 438): пользователь не видится, другим юзером как "онлайн" malor Софт 3 31.05.2013 14:11
Попогите с ошибкой adidas_pro Работа с сетью в Delphi 5 26.06.2011 09:57
c++. Работа с ошибкой SVG Помощь студентам 2 27.05.2009 23:44
Помощь с ошибкой Denisko Общие вопросы Delphi 3 29.04.2009 23:35