Страницы: 1
RSS
После каждого клика по кнопке, заполнение ячеек поочерёдно (макрос)
 
Здравствуйте!

Как исправить/дополнить этот макрос, чтобы с каждым нажатием кнопки "Рандом1", заполнялись (ячейки) ходы цифрой 1 поочерёдно вниз, до 7 хода?

Не пойму, почему у меня заполняется только первая ячейка, или же все вместе, не могу добиться поочерёдности при изменении "= Cells(3, 74)"

--------------------------------------

Sub Рандом1() 'РАНДОМ_если_проигрыш_появляется_число1

Dim iLastRow As Long

   With Sheets("Лист1")

       iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row

       .Cells(iLastRow + 5, 76) = Cells(2, 74)

       .Cells(iLastRow + 6, 76) = Cells(3, 74)

       .Cells(iLastRow + 7, 76) = Cells(4, 74)

       .Cells(iLastRow + 8, 76) = Cells(5, 74)

       .Cells(iLastRow + 9, 76) = Cells(6, 74)

       .Cells(iLastRow + 10, 76) = Cells(7, 74)

       .Cells(iLastRow + 11, 76) = Cells(8, 74)

   End With

End Sub

----------------------------------

 
Т.е. что бы заполнить 7 ячеек нужно нажать 7 раз? И причем тут это
Цитата
arskat5 написал:
не могу добиться поочерёдности при изменении "= Cells(3, 74)"
Вам нужно заполнять ячейки по нажатию кнопки или при изменении ячейки (3,74)?
Согласие есть продукт при полном непротивлении сторон
 
arskat5, Как понял вас.
Код
Option Explicit

Sub Рандом1()
    Dim iLastRow As Long, startRow As Long
    startRow = 5

    With ThisWorkbook.Worksheets("Лист1")
        iLastRow = .Cells(.Rows.Count, 76).End(xlUp).Row

        If startRow > iLastRow Then
            '            MsgBox iLastRow
            .Cells(startRow + 1, 76).Value = 1

        ElseIf iLastRow > startRow And iLastRow < 12 Then
            .Cells(iLastRow + 1, 76).Value = 1
        Else
            MsgBox "Превышен лимит для Рандома! ", vbExclamation
            Exit Sub
        End If

    End With

End Sub

Удачи.
 
Цитата
написал:
не могу добиться поочерёдности при изменении "= Cells(3, 74)"
Здравствуйте.
Cells(3, 74) = пустая ячейка, Cells(4, 74) и следующие тоже пустые. Заполнение происходит, но так как все ячейки кроме Cells(2, 74) пустые, то соответственно и не заметно, что в пустые ячейке перенесено значение пустых ячеек. Замените Cells(3, 74), Cells(4, 74).....Cells(8, 74), на Cells(2, 74), тогда везде появится единица.
 
Цитата
gling написал:
тогда везде появится единица
Это если надо одним махом внести 1-ку, но
Цитата
arskat5 написал:
поочерёдно вниз, до 7 хода
Вообщем, выше написал код как понял. Да и почему-то arskat5, iLastRow определяет по первому столбцу, а он пустой. По крайней мере в файле примере он пустой.
 
MikeVol,
Да, именно это и нужно было. Чтобы при каждом клике, заполнялась следующая ячейка.
Вставил Ваш вариант в "файл Пример", всё отлично работает. Но вставив его же в основную программу, не работает. Не могу понять, точно также вставляю, все, но там не хочет работать, в чём может быть причина? Пишет "Превышен лимит".
В принципе это не проблема, новый файл с нуля сделаю, и туда вставлю макрос и всё.
--------------------------------------------------------------
А возможно ли ещё сделать так: например я поставил ещё одну кнопку, с действием стирания последней заполненной ячейки (хотя и этот макрос как сделать пока понятия не имею), дошёл до 5 хода, стираю 5 ход, и чтобы дальнейшее заполнение не начиналось опять с 5 хода, а перепрыгивала с 5-го на 6-ю ячейку и далее опять заполнялось. ходы 1,2,3,4,   6,7  
Изменено: arskat5 - 08.03.2024 13:20:43
 
gling,
В Макросах ничего не пойму, да и видеоуроков понятных не найти, как их писать, как расшифровываются все эти записи, как писать последовательности, что за что отвечает и прочее. Нашёл в сети у кого то код, примерно подходящий мне, думал ячейки под свои заменю и заработает, поэтому у меня там "белиберда" вышла.
Изменено: arskat5 - 08.03.2024 13:00:21
 
Цитата
arskat5 написал:
Пишет "Превышен лимит"
Всё правильно он вам выдаёт, такая логика заложена в коде. Вы же сами
Цитата
arskat5 написал:
поочерёдно вниз, до 7 хода?
Больше он вам и не даст возможность вносить 1-ку пока вы не очистите ваш диапазон в колонке BX. Как только очистите диапазон всё по новому заработает.
 
Цитата
написал:
Больше он вам и не даст возможность вносить 1-ку пока вы не очистите ваш диапазон в колонке BX
BX весь столбец всего листа, или например пусто должно быть до 7 строки? В ту программу, куда пытаюсь вставить, там нужно чтобы она заполняла 135 строк (в коде что Вы дали поменял уже "ElseIf iLastRow > startRow And iLastRow < 12 Then" на "ElseIf iLastRow > startRow And iLastRow < 135 Then"), они все пустые, но начиная со 137 строки, там идут дальше формулы, это влияет как то?
 
Цитата
arskat5 написал:
BX весь столбец всего листа
Нет, просто нажмите у себя на листе кнопку "Очистить Рандом1", вы же для этого её создали!
Цитата
arskat5 написал:
начиная со 137 строки, там идут дальше формулы
А вот тут уж извините дальше сами, при создание темы и файла примера для темы вы должны были это указать и подготовить нормальный файл пример максимально схожий с файлом оригиналом (структуру)! Вы же не первый год на форуме, должны об этом знать из правил форума.
Как просили в описание так я вам и сделал.
 
Цитата
написал:
Как просили в описание так я вам и сделал
Да, я нажимал/очищал, и вручную очищал, там в проге не работает, новую чистую сделаю, и этот макрос вставлю.
Да, Вы правы, Спасибо за помощь!
Изменено: arskat5 - 08.03.2024 13:45:14
 
Код
ElseIf iLastRow > startRow And iLastRow < 12 Then

iLastRow < 12 - Это условие если последняя ячейка в заполняемом столбце меньше  12 строке, тогда будет заполняться, если больше 12, тогда выйдет сообщение на картинке.

или  если не выполнится условие iLastRow > startRow - т.е. последняя ячейка в заполняемом столбце не >5 строки, тоже выскачет сообщение. Если iLastRow=5 строке, то условие iLastRow > startRow не выполняется, ведь в макросе прописано, startRow =5,  (5>5 = ЛОЖЬ)

Изменено: gling - 08.03.2024 14:06:14
 
Цитата
gling написал:
iLastRow > startRow не выполняется, ведь в макросе прописано, startRow =5,  (5>5 = ЛОЖЬ)
Это для второго условия, так как у нас уже iLastRow>5 после первого условия была заполнена ячейка "BX6". И уже не сработает первое условие. Соответсвенно iLastRow уже не пятая ячейка "BX5" тоесть сработает условие iLastRow > startRow
arskat5, Вот изменённый код с учётом ваших
Цитата
arskat5 написал:
но начиная со 137 строки, там идут дальше формулы
:
Код
Option Explicit

Sub Рандом1()
    Dim iLastRow As Long, startRow As Long
    Dim countFilled As Long, i As Long
    startRow = 5
    countFilled = 0

    With ThisWorkbook.Worksheets("Лист1")
        iLastRow = .Cells(.Rows.Count, 76).End(xlUp).Row
        
        For i = 6 To iLastRow

            If Not IsEmpty(.Cells(i, "BX")) Then
                countFilled = countFilled + 1
            End If

        Next i

        If countFilled < 132 Then
            iLastRow = countFilled + startRow
            .Cells(iLastRow, 76).Value = 1
        Else
            MsgBox "Превышен лимит для Рандома! ", vbExclamation
            Exit Sub
        End If

    End With

End Sub
Изменено: MikeVol - 08.03.2024 20:05:50 (Изменил код так как неподходил под требование задачи.)
 
Цитата
написал:
Вот изменённый код с учётом ваших
В файле "примере", работает также как и первый вариант, но теперь с постоянным выскакиванием сообщений о условиях, в основной проге опять не работает.
Изменено: arskat5 - 08.03.2024 16:00:05
 
Цитата
Как можно тут на форуме удалить сообщения, которые уже неактуальны?
Всё вроде с формулой получилось, в новом документе всё начал с нуля (чуть изменил, и сработало). Первый Макрос, что MikeVol дал, она работает. Всем спасибо, кто помогал.
Изменено: arskat5 - 08.03.2024 18:30:27
 
arskat5, Извините, спешил и недоглядел ошибок в коде. Выше исправил код. Если что то поиграйтесь с цифрами так как в файле примере от вас первая строка которая должна заполнится это 6-я строка и из описания 137-я строка первая строка с формулами. Единственное я не понял откуда эта цифра
Цитата
arskat5 написал:
135 строк
у вас. Удачи.
 
Цитата
написал:
6-я строка и из описания 137-я
В файле примере с 6 по 12 ячейки показал, а так там с 6 по 135-ю. А под 135 с 137-го там уже другие формулы и Таблицы идут в основной программе, думал это влияет на ошибку, что весь столбец до конца листа должен быть пустым.
Спасибо большое, очень помогли сегодня.
Страницы: 1
Наверх