Страницы: 1
RSS
Как выполнить макрос на скрытом листе не переходя на него
 
Здравствуйте, подскажите пожалуйста, как можно выполнить любой макрос на скрытом листе не переходя на него. Вот макрос который находит в "44" столбце последнюю заполненную ячейку, спускается на одну строку в низ и уходит на первый столбик. Например если в 44 столбце последняя заполненная ячейка на 100 строке, то он перейдет на "A101". Но мне нужно выполнить эти действия не переходя на "Лист1"
Код
Sub Найти_Последнюю_Ячейку()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 44).End(xlUp).Row
Cells(iLastRow + 1, 1).Select
End Sub
 
Цитата
написал:
то он перейдет на "A101". Но мне нужно выполнить эти действия не переходя на "Лист1"
А зачем переходить на эту ячейку? какой смысл?
Код
Sub Найти_Последнюю_Ячейку()
Dim iLastRow As Long
with sheets("HiddenList") ' Нужное имя впишите сами
    iLastRow = .Cells(Rows.Count, 44).End(xlUp).Row
    debug.print "Значение в последней ячейке " & .Cells(iLastRow + 1, 1).value
end with
End Sub
Изменено: irabel - 04.07.2025 07:54:06
 
Цитата
написал:
А зачем переходить на эту ячейку? какой смысл?
Чтобы потом выполнить нужный мне макрос, который будет срабатывать после макроса "Найти_Последнюю_Ячейку".
 
Цитата
написал:
Чтобы потом выполнить нужный мне макрос
В этом макросе используется ссылка на эту ячейку? ее значение?
Зачем её нужно обязательно выделять?
 
Зачем плодить макросы? Ищите последнюю ячейку сразу в макросе который 'потом...'
Согласие есть продукт при полном непротивлении сторон
 
irabel, до писал лист, но что то не ищет
Код
Sub Найти_Последнюю_Ячейку2()
Dim iLastRow As Long
With Sheets("Лист1") ' Нужное имя впишите сами
    iLastRow = .Cells(Rows.Count, 44).End(xlUp).Row
    Debug.Print "Значение в последней ячейке " & .Cells(iLastRow + 1, 1).Value
End With
End Sub

 
перед Rows точку поставьте
Согласие есть продукт при полном непротивлении сторон
 
Sanja, сделал  так, но не ищет
Цитата
написал:
перед Rows точку поставьте
Код
Sub Найти_Последнюю_Ячейку3()
Dim iLastRow As Long
With Sheets("Лист1") ' Нужное имя впишите сами
    iLastRow = .Cells(.Rows.Count, 44).End(xlUp).Row
    Debug.Print "Значение в последней ячейке " & .Cells(iLastRow + 1, 1).Value
End With
End Sub
 
В ячейке 'A101' (.Cells(iLastRow + 1, 1).Value) в Вашем файле, пусто. Что Вы хотите там найти?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Valery37 написал:Вот макрос который находит в "44" столбце последнюю заполненную ячейку, спускается на одну строку в низ и уходит на первый столбик. Например если в 44 столбце последняя заполненная ячейка на 100 строке, то он перейдет на "A101". Но мне нужно выполнить эти действия не переходя на "Лист1"
Ну вот макрос, запустите его
Код
Sub Найти_Последнюю_Ячейку()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 44).End(xlUp).Row
Cells(iLastRow + 1, 1).Select
End Sub

Изменено: Valery37 - 04.07.2025 08:49:55
 
Вам нужно определить последнюю строку, в 44-м столбце на листе 'Лист1', и выполнить макрос для какого-то другого листа?
В Вашем файле ни на одном из 3х листов, в ячейке 'A101' ничего нет. В чем подвох? Что мы все тут ищем?
Изменено: Sanja - 04.07.2025 08:57:04
Согласие есть продукт при полном непротивлении сторон
 
Позапускайте макрос в этом файле с разных листов. Это Вам нужно?
Для Активного листа
Код
Sub Найти_Последнюю_Ячейку3()
Dim iLastRow As Long
With Sheets("Лист1") ' Нужное имя впишите сами
    iLastRow = .Cells(.Rows.Count, 44).End(xlUp).Row
End With
MsgBox "Значение в последней АКТИВНОГО листа -  " & Cells(iLastRow + 1, 1).Value
End Sub

Или укажите конкретный лист, с которого нужно брать данные
Код
Sub Найти_Последнюю_Ячейку3()
Dim iLastRow As Long
With Sheets("Лист1") ' Нужное имя впишите сами
    iLastRow = .Cells(.Rows.Count, 44).End(xlUp).Row
End With
MsgBox "Значение в последней ячейке листа 'Лист2' -  " & Sheets("Лист2").Cells(iLastRow + 1, 1).Value
End Sub
Изменено: Sanja - 04.07.2025 09:08:08
Согласие есть продукт при полном непротивлении сторон
 
Select и Activate - зачем нужны и нужны ли?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
выполнить макрос для какого-то другого листа?
Для "Лист1" выполнить макрос,
Цитата
написал:
В Вашем файле ни на одном из 3х листов, в ячейке 'A1' ничего нет. В чем подвох? Что мы все тут ищем?
Ну если пошагово, то
1. Переходите на "Лист1"
2. Запускаете макрос "Найти_Последнюю_Ячейку"
Он найдет заполненную ячейку в столбце "44 " в ячейке "AR100", уйдет на 1 строку ниже и переместиться в первый столбик на ячеёку "A101""
 
Цитата
Valery37 написал: Он найдет заполненную ячейку в столбце "44 " в ячейке "AR100", уйдет на 1 строку ниже и переместиться в первый столбик на ячеёку "A101""
Да это понятно. Дальше-то что? Что делать с этой ячейкой 'A101'? Выделить и любоваться?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
а это понятно. Дальше-то что? Что делать с этой ячейкой 'A101'? Выделить и любоваться?
Цитата
написал:
Чтобы потом выполнить нужный мне макрос, который будет срабатывать после макроса "Найти_Последнюю_Ячейку".
Этот макрос
Код
Sub Удалить_Пр()
Dim iSh As Worksheet
Application.ScreenUpdating = False
For Each iSh In ThisWorkbook.Worksheets
  With iSh
  If .Name = "Лист1" Or .Name = "Лист3" Then
    .Rows(ActiveCell.Row).Rows("1:1048474").Delete Shift:=xlUp ' 1 вариант
  End If
  End With
Next
Application.ScreenUpdating = True
End Sub
 
Цитата
Valery37 написал: Этот макрос
Словами напишите что он должен делать
Согласие есть продукт при полном непротивлении сторон
 
Удаляет на двух листах строки. Например после выполнения макроса "Найти_Последнюю_Ячейку"
Код
Sub Найти_Последнюю_Ячейку()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 44).End(xlUp).Row
Cells(iLastRow + 1, 1).Select
End Sub
Он найдет заполненную ячейку в столбце "44 " в ячейке "AR100", уйдет на 1 строку ниже и переместиться в первый столбик на ячейку "A101"". И выполнит следующий макрос "Удалить_Пр"
Код
Sub Удалить_Пр()
Dim iSh As Worksheet
Application.ScreenUpdating = False
For Each iSh In ThisWorkbook.Worksheets
  With iSh
  If .Name = "Лист1" Or .Name = "Лист3" Then
    .Rows(ActiveCell.Row).Rows("1:1048474").Delete Shift:=xlUp ' 1 вариант
  End If
  End With
Next
Application.ScreenUpdating = True
End Sub
То есть на двух листах "Лист1" и "Лист3", удалит строки с ячейки "A101"- строка "101" и до строки "1048474"



 
Код
Sub Удалить_Пр()
Dim iSh As Worksheet
Dim lRow&
Application.ScreenUpdating = False
For Each iSh In ThisWorkbook.Worksheets
  With iSh
  lRow = .Cells(.Rows.Count, 44).End(xlUp).Row + 1
  If .Name = "Лист1" Or .Name = "Лист3" Then
    .Rows(lRow).Rows("1:1048474").Delete Shift:=xlUp ' 1 вариант
  End If
  End With
Next
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, получается что на "Лист1" удаляет с нужной строки, а на "Лист3", удаляет всю полностью, а можно сделать чтобы удалял также как и с "Лист1"?
 
Присваивайте значение переменной lRow до цикла
Код
Sub Удалить_Пр()
Dim iSh As Worksheet
Dim lRow&
Application.ScreenUpdating = False
With Worksheets("Лист1")
  lRow = .Cells(.Rows.Count, 44).End(xlUp).Row + 1
End With
For Each iSh In ThisWorkbook.Worksheets
  With iSh
  If .Name = "Лист1" Or .Name = "Лист3" Then
    .Rows(lRow).Rows("1:1048474").Delete Shift:=xlUp ' 1 вариант
  End If
  End With
Next
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо Вам то что нужно))
Страницы: 1
Читают тему
Наверх