Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Перебор заданных книг, Помогите оптимизировать код
 
Dima S, The_Prist,
Спасибо! Оба варианта рабочие. И оба отвечают поставленным задачам.
Перебор заданных книг, Помогите оптимизировать код
 
Доброго пятничного вечера, уважаемые пользователи excell

Есть такая конструкция:

Код
Dim sadr As String
sadr = "F3:Q71,S3:AP71"
Dim SWB As Workbook
Set SWB = Workbooks("book1.xlsx")
Dim i As Long

For Each Sheet In SWB.Sheets
If Sheet.Visible = True Then c = c + 1
Next

For i = 2 To c

With WB.Worksheets("Sheet1")

SWB.Worksheets(i).Range(sadr).Copy

Range("B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
End With


Конструкция призвана копипастить в нужное место конкретный диапазон всех листов конкретной книги , тесть собираю данные для сводной таблицы.
В коде опущены условия куда чего вставлять, дабы не засорять взгляд.


Вопрос простой: как вместо одной книги book1.xlsx проходить по нескольким книгам единожды обозначив их имена?
Понятно, что можно скопировать сам код нужное количество раз и прописав имена книг радоваться жизни. Но хочется чтобы было красиво. И уж больно много времени я на это убил - жалко впустую тратить)))
Изменено: Danmer - 27.01.2017 20:17:49
Защита листа макросом, снятие защиты
 
Цитата
The_Prist написал:
Логично. Попробуйте снять, записав FALSE(т.е. в верхнем регистре)
Да, и  правда снимает.

Почему false я понимаю, он игнорирует все что между Password и :=
А почему верхний регистр?
Неужто потому, что False без кавычек?
Защита листа макросом, снятие защиты
 
The_Prist? cпасибо Вам огромное!
Справедливости ради,  "False"(без кавычек) не работает.

Мат.часть в процессе освоения. Понимаю, что вопрос глупейший.
Защита листа макросом, снятие защиты
 
Уважаемые форумчане, подскажите пожалуйста в чем прикол.

Защищаю лист вот таким способом
Код
Sub Lock()
Dim ws As Worksheet
ws.Protect Password = "123", DrawingObjects:=False
End Sub
Далее пытаюсь снять защиту обычным способом.
Рецензирование->снять защиту листа
И пароль введенный в макросе 123 не подходит
При этом конструкция
Код
Sub UnLock_1()
ActiveSheet.Unprotect Password = "123"
End Sub
Прекрасно защиту снимает.
А мне надо чтобы обычный человек без помощи макроса штатным способом мог эту защиту снять.
Копирование со смещением или замена значений до вставки
 
kuklp,  спасибо, но не работает.

Я правильно понимаю, что в вашем примере, нужно руками задавать что на что меняется?
У меня в этом то и затык, каждый раз вручную меняю, пытаюсь как то оптимизировать.
Копирование со смещением или замена значений до вставки
 
Добрый день, уважаемые форумчане.

Столкнулся с такой задачей, нужно из левого столбца скопировать формулы (они же ссылки) через один с стролбец вправо.
При этом ссылка должна после копирования несколько преобразоваться.

Ссылка на файл вида [01_2016.xls]Sheet1'!A1 а нужно [02_2016.xls]Sheet1'!C1
т.е. нужно сначала сделать +1 к цифре в имени файла а затем заменить букву не на следующую а тоже на +1

Слепил такой простенькй макрос.
Код
Sub Draft()
Dim C As Range

For Each C In Range("AM8:AN73")

If C.Formula Like "='\\*" Then
C.Copy

C.Offset(, 1).PasteSpecial Paste:=xlPasteFormulas
End If
Next
end sub
Потом сломал всю голову как же решить проблему с изменением имени файла и смещением на столбец.

Можете помочь? Или подсказать направление куда копать.
Изменено: Danmer - 22.08.2016 21:36:16
"Найти и выделить" макросом
 
Пытливый,
Спасибо за направление. Запомню.
Еще отрабатывает конструкция, если сначала выделить а затем просматривать.
Код
PR_month.select

For Each C In Selection
Но это долго и некрасиво.

Цитата
Пытливый написал:
Range("AL74").End(xlToLeft). переходим на крайний левый столбец заполненного диапазона
после этой инструкции - на каком столбце стоим?
А потом еще и Offset(, -1). - т.е. еще на один столбец влево. А если это и так столбец А (например) - куда еще offset-то делать?
Там не столбец А, с этим все норм.
Логика такова, ищем справа налево первый заполненный столбец, потом смещаемся еще на один и выделяем два предпоследних.
Такой загибон нужен потому, что .resize не может смотреть влево, только вправо.(Вот тут поправьте если не так, я честно хотел идти простым путем, не получилось)

В общем, нормально сформулированный вопрос, это пол дела. Если ограничить диапазон то все замечательно работает.

Мой ответ самому себе:
Код
Sub Statment_prepare()

Dim PR_month As Range
Dim C As Range
Dim D As Range
Set PR_month = Sheets("sheet1").Range("AL74").End(xlToLeft).Offset(, -1).EntireColumn.Resize(, 2)
Set D = Intersect(Range("S1:T200"), PR_month) ' Обрезаем для дальнейшей обработки

PR_month.Copy Destination:=Range("AL74").End(xlToLeft).Offset(, 2).EntireColumn 'копируется весь столбец

For Each C In D
If C.Formula Like "*SUMIF*" Then C.Value = C.Value 'затираем формулы в исходном диапазоне. 
Next

End Sub

Изменено: Danmer - 07.06.2016 16:32:17
"Найти и выделить" макросом
 
Не хочу плодить темы, впринципе проблема все та же )))

Есть код:
Код
Sub ()
Dim C As Range
Dim PR_month As Range
Set PR_month = Sheets("Sheet1").Range("AL74").End(xlToLeft).Offset(, -1).EntireColumn.Resize(, 2)

For Each C In PR_month
If C.Formula Like "*SUMIF*" ' Вот тут вываливается type mismatch
Then C.Value = C.Value 

Next

end Sub
Почему не хочет просматривать диапазон PR_month?
Если задать его жестко("A:B") а не той конструкцией что я использую то все Ок.
И второй вопрос, а как ограничть именно для конкретно действия диапазон PR_month колличеством строк?
т.е. у меня задется весь столбец  но впоследствии нужно использовать только первые 200 строк этого столбца
Изменено: Danmer - 07.06.2016 16:02:37
"Найти и выделить" макросом
 
Юрий М, Ёк-Мок,
Спасибо, помогло!

по поводу Селектов, я мозгом понимаю что необязательно что то выделять чтобы что то с этим сделать, что программно все немного по-другому. Без селктов все работает быстрее и код более изящный.
Но так как в школе с программированием была беда, а макросы постигаю находу, решая практические задчи. Далаю пока "шоб работало"
За совет тоже спасибо!
Изменено: Danmer - 07.06.2016 12:27:42
"Найти и выделить" макросом
 
Доброго времени суток!
Уважаемые макрописатели, помогите пожалуйста довести до ума код.
Код
Sub Statment_prepare()
Sheets("Sheet1.").Range("AL74").End(xlToLeft).Offset(, -1).EntireColumn.Resize(, 2).Select 'выделяю два крайних левых столбца
Selection.Copy Destination:=Range("AL74").End(xlToLeft).Offset(, 2).EntireColumn 'вставляю выделнное с через один столбец
' до этого момента все работает, теперь начинается затык

Find("суммеслн").Select  'вот тут я хочу в выделенных крайних левых столбцах пройтись по всем ячейкам и заменить формулы вида "суммесли" на значения.

Макрос заменяющий формулы на значения у меня в арсенале есть. Фокус в том, что не получается элементарщина найти и выделить.
Что не так ???
Изменено: Danmer - 03.06.2016 18:47:36
Присвоение переменной значения ячейки
 
Цитата
Юрий М написал: Что у Вас там?
Даты начиная с этого года :)
Цитата
Ваших данных не вижу, а на моих сработало так:
А у вас отработало прям по конкретному диапазону дат из ячаеек А1 и В1?
Спасибо Вам за помощь!

Я бы с удовольствием выложил, но это сложно, соображения безопасности и бла бла бла.
add. да, у Вас все как надо отработало, проверил. Щас буду переносить на свои дипапазоны
add2 Юрий М спасибо! Все заработало. На самом деле косяк то был в том, что когда пользуешся дебагерром нужно данные из переменной сначала прочитать, потом уже где то использовать. Я как то этого не знал)))  :D  
Изменено: Danmer - 28.05.2016 00:58:22
Присвоение переменной значения ячейки
 
Юрий М, поправил
Код
Start_date = Range("A1").Value.
Теперь эта строка в дебаггере показывает нужную дату
Никто не ругается, просто афтофильтр филтрует дату по нулю.
Если его напрямую сослать на ячейку А1 то работает ((
Присвоение переменной значения ячейки
 
Цитата
Юрий М написал:
И вот это что за диапазон?Код ? 1Range("$2:$100000")
Это кусок кода от интерпритатора, я решил что это диапазон на который применяется автофильтр, поэтому просто окгруглил его.
У меня перестал ругаться вот такой код
Код
Dim End_date As Long
Dim Start_date As Long

Start_date = Range([A1]).Value
End_date = Range([B1]).Value

ActiveSheet.Range("$2:$100000").AutoFilter Field:=18, Operator:=xlFilterValues, Criteria1:=">=" & CLng(Start_date), Operator:=xlAnd, Criteria2:="<=" & CLng(End_date)
Все хорошо, но он фильтрует в обоих случаях вот по такому значению, вместо двух разных дат 00.01.1900

Вероятно нужно просто свести тип переменной и тип критерия фильтра. Не могу только понять как.
Присвоение переменной значения ячейки
 
RAN,
Пробовал, не работает.
Type Mismatch и все тут
Присвоение переменной значения ячейки
 
Помогите пожалуйста, что нужно исправить, чтобы этот код заработал:

Критично фильтровать именно через переменную, которая берет данные из ячейки.
Код
Dim End_date As String
Dim Start_date As String

Start_date = Range([A1]).Value
End_date = Range([B1]).Value
ActiveSheet.Range("$2:$100000").AutoFilter Field:=18, Operator:=xlFilterValues, Criteria1:=">=" & CLng("Start_date"), Operator:=xlAnd, Criteria2:="<=" & CLng("End_date")
Перебор листов и вставка линков в другую книгу
 
LVL, и Вам спасибо за участие.

ИМХО первый код более изящный (ну и я в нем почти все понял)))
В вашем варианте макрос сочиняет ссылку из названий листов открытых книг, хитро.
Изменено: Danmer - 22.04.2016 11:56:09
Перебор листов и вставка линков в другую книгу
 
Sanja,
прям Вау!

Спасибо!

Пошел учить матчасть.
Перебор листов и вставка линков в другую книгу
 
Добрый день.

Помогите пожалуйста оптимизировать макрос.
Смысл в том, чтобы в открытой книге в столбик выстроить ссылки на заданную ячейку каждого листа другой книги.

Он конечно работает, но наверняка листы другой книги можно перебирать как то более изящно.
Искал разные варианты ни один нормально не заработал
Код
Sub Link_paste()
Dim DestBook As String
Dim DR As String

DestBook = "book.xlsx" ' книга из которой берем ячейку
DR = "X63" ' ячейка на которую ссылаемся

On Error GoTo Errors1

Workbooks(DestBook).Activate
Worksheets(Index + 1).Activate 'вот это повторяется от 1 до 20 раз,
  Range(DR).Select
  Selection.Copy

Workbooks("Book2.xlsm").Activate 'рабочая книга куда вставляем линк
 
  Cells(Rows.Count, 2).End(xlUp).Offset(1).Select
  ActiveSheet.Paste link:=True

Workbooks(DestBook).Activate
Worksheets(Index + 2).Activate
  Range(DR).Select
  Selection.Copy

Workbooks("Book2.xlsm").Activate
 
  Cells(Rows.Count, 2).End(xlUp).Offset(1).Select
  ActiveSheet.Paste link:=True
  
  Workbooks(DestBook).Activate
Worksheets(Index + 3).Activate
  Range(DR).Select
  Selection.Copy

Workbooks("Book2.xlsm").Activate
 
  Cells(Rows.Count, 2).End(xlUp).Offset(1).Select
  ActiveSheet.Paste link:=True
  
Errors1:  MsgBox ("Достингут конец книги")

End Sub
Изменено: Danmer - 22.04.2016 10:57:46
[ Закрыто] Помогите написать макрос, Выделение ячеек по условию
 
Товарищи, а помогите пожалуйста написать макрос по теме.

Нужно выделить только ячейки вида:

=СУММ(A1:A10)+3

Не важно что в начале (хоть формула, хоть ссылка). Важно что на конце "+" или "-" константа
Изменено: Danmer - 14.03.2016 13:20:00
Страницы: 1
Наверх