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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 11:37   #1
student2008
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 31
По умолчанию VBA Excel:Работа скрипта до конца таблицы

Добрый день, участники форума! Сейчас делаю в VBA скрипт, он работает, но только на одной строке таблицы. Как сделать, чтобы после выполнения скрипта на одной строке он переходил к следующей до тех пор, пока строки не кончатся?
На всякий случай вот сам скрипт:
Код:
Private Sub CommandButton1_Click()
Dim shSheet_1 As Excel.Worksheet, shSheet_2 As Excel.Worksheet
    Dim i As Long, j As Long
    'Даём Excel-листам VBA-имена. Через эти имена
        'будем обращаться к листам.
    Set shSheet_1 = Worksheets(1)
    'Set shSheet_2 = Worksheets(2)
    i = 5
    Do While IsEmpty(shSheet_1.Cells(4, i)) = False
        Select Case shSheet_1.Cells(4, i).Value
        Case "Лекция"
        'MsgBox ("нашли лекцию")
        Select Case shSheet_1.Cells(6, i).Value
        Case "П"
        shSheet_1.Cells(6, i).Value = TextBox1.Value
        Case "О"
        shSheet_1.Cells(6, i).Value = TextBox1.Value - 2
        Case "У"
        shSheet_1.Cells(6, i).Value = TextBox1.Value - 1
        Case "Н"
        shSheet_1.Cells(6, i).Value = 0
          End Select
        Case "Практическая работа"
         MsgBox ("нашли практику")
        Select Case shSheet_1.Cells(6, i).Value
        Case "П"
        shSheet_1.Cells(6, i).Value = TextBox2.Value
        Case "О"
        shSheet_1.Cells(6, i).Value = TextBox2.Value - 2
        Case "У"
        shSheet_1.Cells(6, i).Value = TextBox2.Value - 1
        Case "Н"
        shSheet_1.Cells(6, i).Value = 0
        End Select
        Case "Контрольная работа"
         MsgBox ("нашли КР")
         Select Case shSheet_1.Cells(6, i).Value
        Case "П"
        shSheet_1.Cells(6, i).Value = TextBox3.Value
        Case "О"
        shSheet_1.Cells(6, i).Value = TextBox3.Value - 2
        Case "У"
        shSheet_1.Cells(6, i).Value = TextBox3.Value - 1
        Case "Н"
        shSheet_1.Cells(6, i).Value = 0
        End Select
        Case "Лабораторная работа"
         MsgBox ("нашли Лабу")
         Select Case shSheet_1.Cells(6, i).Value
        Case "П"
        shSheet_1.Cells(6, i).Value = TextBox4.Value
        Case "О"
        shSheet_1.Cells(6, i).Value = TextBox4.Value - 2
        Case "У"
        shSheet_1.Cells(6, i).Value = TextBox4.Value - 1
        Case "Н"
        shSheet_1.Cells(6, i).Value = 0
        End Select
        Case "Семинар"
         MsgBox ("нашли семинар")
         Select Case shSheet_1.Cells(6, i).Value
        Case "П"
        shSheet_1.Cells(6, i).Value = TextBox5.Value
        Case "О"
        shSheet_1.Cells(6, i).Value = TextBox5.Value - 2
        Case "У"
        shSheet_1.Cells(6, i).Value = TextBox5.Value - 1
        Case "Н"
        shSheet_1.Cells(6, i).Value = 0
        End Select
        End Select
        'Увеличиваем переменную "i", чтобы перейти к следующей ячейке.
        i = i + 1
    Loop
End Sub
student2008 вне форума Ответить с цитированием
Старый 15.05.2013, 12:07   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

У Вас есть цикл по столбцам:
Код:
    i = 5
    Do While IsEmpty(shSheet_1.Cells(4, i)) = False
'...
        'Увеличиваем переменную "i", чтобы перейти к следующей ячейке.
        i = i + 1
    Loop
Добавьте аналогичный по строкам.
Если этого объяснения недостаточно - выложите пример в XLS.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 15.05.2013, 12:19   #3
student2008
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 31
По умолчанию

Вот файл со скриптом.
Вложения
Тип файла: zip Эксперимент2.zip (11.3 Кб, 20 просмотров)
student2008 вне форума Ответить с цитированием
Старый 15.05.2013, 12:54   #4
student2008
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 31
По умолчанию

То есть получается, нужно создать цикл внутри цикла? Или это обязательно должен быть отдельный цикл?
student2008 вне форума Ответить с цитированием
Старый 15.05.2013, 12:56   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

скорее нужен внешний цикл по строкам...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.05.2013, 13:21   #6
student2008
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 31
По умолчанию

Попробовал такой вариант:
j = 5
Do While IsEmpty(shSheet_1.Cells(5, j)) = False
i = 5
Do While IsEmpty(shSheet_1.Cells(4, i)) = False
Отладчик ругается на вторую строку.
student2008 вне форума Ответить с цитированием
Старый 17.05.2013, 08:39   #7
student2008
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 31
По умолчанию

Честно говоря, не совсем понял про внешний цикл, как примерно он должен выглядеть?
student2008 вне форума Ответить с цитированием
Старый 17.05.2013, 08:51   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Например, так:

Код:
For I = 1 To Rows.Count
  For J = 1 To Columns.Count
    Cells(I,J) = I + J
  Next I
Next J
здесь идет установка значений ячеек для всех строк и столбцов величиной равной номеру строки + номер столбца
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вниз до конца таблицы Ogeris Microsoft Office Excel 8 11.02.2012 20:39
VBA и сводные таблицы Excel strannayaskazka Помощь студентам 0 11.07.2011 13:47
Разделить значения таблицы в документе word из excel средствами vba xamillion Microsoft Office Word 5 07.11.2010 19:25
Лабораторная работа Excel - VBA Danara Microsoft Office Excel 0 27.05.2010 00:09