Добрый день всем. Настраиваю вставку картинок макросом. Все картинки должны вставляться ОДИНАКОВОЙ высоты (например 5,64 см). Для этого все картинки в каталоге я прогнал через пакетную обработку и у всех высоту задал 160 пикселей (а ширина пропорционально). А вставляются какие-то ошибочно слишком маленькими. Проверял размеры картинок в файлах - высота у всех одинаковая, ширина пропорциональная. Пробовал И РУКАМИ вставлять - аналогично: картинки, которые вставляются макросом маленькими, и при вставке руками также вставляются маленькими (в примерах это второй файл). Макрос пробовал двух вариантов Первый:
Код
Set p = ActiveSheet.Shapes.AddPicture(Puty, msoFalse, msoCTrue, Rng.Left, Rng.Top, -1, -1)
ratio = Rng.Width / p.Width
p.ScaleWidth ratio, msoFalse
p.ScaleHeight ratio, msoFalse
и второй (из макрорекордера)
Код
Pict.Select
ActiveSheet.Pictures.Insert ( _
Puty)
Здесь Puty - это полный путь к картинке в каталоге, а Rng - это ячейка, в которую вставляю. Почему две картинки из примера вставляются разного размера (и макросами И РУКАМИ)? В примерах первая картинка (красное) вставляется нужного размера (высота 5,64 см), а вторая картинка (белое) ошибочно малая (высота 1,36 см).
Админу. Покажите, пожалуйста, где написано как теги вставлять (не нашел).
Добрый день, уважаемые форумчане. Есть макрос, который копирует строки с листа "Данные" (выделяются данные от первой строки до первой пустой по столбу А). Затем снимает защиту с листа "Прайс бренды - виды товаров" (здесь пароль "1", т.е единичка, но защищенных ячеек нет), вставляет скопированное на этот лист. После этого обрабатывает вставленное. И потом защищает лист "Прайс бренды - виды товаров" эти же паролем. Но перед защитой листа макрос должен назначить защиту ячеек ("H8:H9,I16:I21"). Я пытаюсь это сделать, но защита назначается НЕ ТОЛЬКО НА ЭТИ ячейки, а ошибочно НА ВСЕ ВСТАВЛЕННЫЕ ячейки. Вот и прошу помочь в этом. В тестовом файле этот макрос запускается с кнопки на листе "Прайс бренды - виды товаров". Ячейки, которые должны оказаться защищенными на листе "Прайс бренды - виды товаров" выделил желтым.
Код
Sub Macros1()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
''''''''''''''''''''''''''''''
Worksheets("Данные").Activate
Dim MyValue1, PreMyValue2, MyValue2
MyValue1 = Range("A2:A" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row 'номер строки первой пустой ячейки в А
Worksheets("Прайс бренды - виды товаров").Activate
ActiveSheet.Unprotect Password:="1" 'Снимаем защиту листа
ActiveSheet.Range("H8:H9,I16:I21").Locked = True
Cells(1, 16).NumberFormat = "@" '"P1"
Cells(1, 16) = CStr(MyValue1)
Set MyValue1 = Worksheets("Прайс бренды - виды товаров").Range("P1")
Sheets("Данные").Rows("1:" & MyValue1).Copy
Worksheets("Прайс бренды - виды товаров").Activate
Sheets("Прайс бренды - виды товаров").Rows("11:11").Select
ActiveSheet.Paste
'Зафиксируем область
ActiveWindow.FreezePanes = False
Range("A14").Select
ActiveWindow.FreezePanes = True
'Установим фильтры
Range("D11:I13").Select
Application.CutCopyMode = False
Selection.AutoFilter
'Установим форматы
Range("F14:I20000").Select
Selection.NumberFormat = "#,##0.00"
'Протянем формулу стоимости
Range("R1").Select
ActiveCell.FormulaR1C1 = "=IF(R[15]C[-10]>0,R[15]C[-11]*R[15]C[-10],"""")"
Range("I16").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]>0,RC[-2]*RC[-1],"""")"
Range("I16").Select
Selection.Copy
Range("I17:I20000").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A14:B14").Select 'это чтобы "промотать лист вверх".
Range("P1:R1").Select
Selection.Clear
Range("A1").Select
'ActiveSheet.Range("H8:H9,I16:I21").Locked = True
ActiveSheet.Protect Password:="1" 'Ставим защиту листа
'''''''''''''''''''''''''''''''''''''''''''
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
ActiveWorkbook.Save
End Sub
Добрый день, уважаемые форумчане. Прошу помощи в следующем вопросе. Выделил я нужные мне строки (например, 5--21). Запускаю макрос, который должен строки с одним критерием для фильтра (7,9,12,20) скопировать в один лист, а с другим (5-6, 8, 10-11,13-19, 21)--в другой, после этого выделенные строки (5--21) удалить. Макрос фильтром выделил записи в соответствии с заданными критериями (например, строки 7,9,12,20). При этом строки 5-6, 8, 10-11,13-19, 21 остались не видны на мониторе. На мониторе, как бы за 4-й идёт 7 строка и т.д. Мне надо, чтобы в диапазон для копирования попала ещё и строка 4 (которая расположена сразу над строками, которые фильтровались. Т.е. чтобы при дальнейшем копировании на один лист скопировались строки 4, 7, 9, 12, 20, а на другой 4, 5-6, 8, 10-11,13-19, 21.
Соответственно, если бы для фильтра я выделил строки 10-19, то на один лист попали бы строки 9, 12, 20, а на другой 9, 10-11,13-19.
PS. Команда Selection.Offset(-1, -0).Resize(Selection.Rows.Count + 1, _ Selection.Columns.Count + 0).Select не сработает для одного листа (хотя сработает для другого).
Здравствуйте, уважаемые форумчане. Помогите, пожалуйста, составить условие для формулы ЕСЛИ. В прикреплении описал само условие (как коротко его описать здесь не знаю).
Добрый вечер, форумчане. Подскажите, пожалуйста, как решить такой вопрос. Есть книга с множеством "клонированных" листов, в каждом по пять диапазонов. На всех листах у диапазона "1" пароль "1", у "2"--"2", у "3"--"3", у "4"--"4", у "5"--"5". Вопрос: можно ли макросом одним махом снять защиту со всех диапазонов по всей книге для пользователя (можно и для макроса). Но чтобы при этом на каждом листе осталась защита самого листа и диапазона "5" на каждом листе. Снятие защиты должно быть "обратимым", т.е. чтобы после повторного открытия книги защита функционировала, как обычно, до нового запуска макроса. Т.е. просто удаление диапазонов не подходит.
Доброй ночи, форум. Помогите, пожалуйста, в следующем вопросе. Есть макросы, которые нормально работают, только если открыта только одна книга (собственно рабочая). Подскажите, пожалуйста, как запретить макросу выполняться, если кроме одной, открыты ещё книги?
Sub probaOpenBook() '
'If 'открыта только одна книга Эксель Then MsgBox "OK, основной КОД" Else MsgBox "Пожалуйста, закройте другие книги." End If End Sub
Доброго дня всем. Подскажите, пожалуйста, как справится со следующей задачей. Есть база с множеством стандартных однотипных листов. Есть регистратор, который запросто может перепутать листы и в лист В, например, внести несколько записей (например, с 10 по 17), которые должен был внести в лист Т, например. Задача следующая: если подобный косяк замечен, то 1) как поудобнее для регистратора организовать перенос ячеек в выделенных вручную строках с 10 по 17 в примере (именно строки выделяются) с данными с ошибочного листа (В) в первую пустую в столбце D верного листа (Т); 2) как на место перенесенных строк в В вставить "латку" с теми же строками ( с 10 по 17) из листа ШАБЛОН. "Латка" нужна потому, что при введении данных в листе В, регистратор при необходимости "забивает" не актуальные формулы. А в новых строках эти формулы должны быть. В ШАБЛОНе они есть.
Хотелось бы на выходе работать по такому алгоритму: вручную выделил строки на ошибочном листе, клацнул макрос, вручную открыл верный лист, msgBox "Вы открыли лист. Продолжить перенос на него?", код вставляет строки под последней не пустой в D, вставляет "латку" из таких-же строк ШАБЛОНа в ошибочный лист.
Добрый вечер, уважаемые форумчане. Такой вопрос... В процессе работы макрос создаёт лист "ВРЕМЕННЫЙ". Но пользователь может ранее созданный "ВРЕМЕННЫЙ" не переименовать и запустить макрос. Получается сбой. Как сделать, что бы MsgBox появлялся в том случае, если макрос доходит до этапа создания "ВРЕМЕННЫЙ", а "старый" "ВРЕМЕННЫЙ" уже существует?
Название "ВРЕМЕННЫЙ" фиксировано и речь идёт об листе с именно таким названием.
Добрый вечер, форумчане. На старом форуме в какой-то теме был макрос, который оставлял защиту от пользователя. Но снимал защиту для макроса, и, при этом еще разрешал выполняться фильтру. Сейчас поиск в старом форуме практически отсутствует. Если у кого есть этот макрос, с возможностью фильтрации, выложите, пожалуйста. Спасибо за внимание.
Добрый вечер, уважаемые форумчане. Есть выделенные вручную строки (таки строки, а не ячейки). Например, с 522 по 550... И они могут быть другими. Есть макрос от Hugo. Как запретить макросу выполняться, если в выделенных строках в первой ячейке первой строки (в левой верхней) нет значения? Там исходно есть формула. Или Если первая ячейка столбца В в выделенных строках пустая (в ней формул нет).
Sub proba0startNedo() ??? If ??? Dim cc& cc = Columns.Count If Selection.Areas.Count = 1 Then If Selection(1).Row = Selection(cc).Row Then ' "Это было начало кода, запрещающего макрос если НЕ выделены любые строки. ' ОСНОВНОЙ КОД Else ' "Продолжение кода, запрещающего макрос если НЕ выделены любые строки. MsgBox "СПОЧАТКУ, будь ласка, виділіть потрібні рядки!" End If Else MsgBox "Не хитрить!" End If ' "Это было окончание кода, запрещающего макрос если НЕ выделены любые строки. Else MsgBox "Первая пустая" End If End Sub
Добрый день, уважаемые форумчане. Прошу Вашей помощи вот в каком вопросе. Есть код, который работает с выделенными вручную строками. Как сделать так, чтобы если пользователь не выделил строки, но запустил макрос, появлялся MsgBox "Сначала выделите строки!!! Жмите Ок" Пользователь жмёт ОК и макрос закрывается. Если строки выделены--макрос благополучно отрабатывает основной код. 'НАЧАЛО основного кода. Dim rv As Long rv = MsgBox("Ви хочете назавжди перенести записи в архіви... Тоді жміть Да. Як передумали--то Нєт.", vbYesNo Or vbQuestion) If rv = vbYes Then Sheets("ДРУК").Cells.Clear '......... Dim rFndRng As Range Set rFndRng = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) If Not rFndRng Is Nothing Then '.... End If Workbooks("НАКОПИЧУВАЧ.xlsm").Save Workbooks("НАКОПИЧУВАЧ.xlsm").Close '...... MsgBox "Дані перенесені, устарілі дані видалені. Жміть Ок" Else MsgBox "Уважніше, будь ласка", vbExclamation End If 'КОНЕЦ основного кода.
Здравствуйте, форумчане. Опять к Вам на поклон. Проблема в следующем. Макрос удаляет первую строку, выделяет от последней не пустой до А2 и выделенное копирует: Workbooks("ДРУК.xlsm" ;) .Sheets("ФИЛЬТР" ;) .Activate Rows("1:1" ;) .Delete LastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Range(Cells(2, 1), Cells(LastRow, "bf" ;) ).Select Selection.Copy
Проблема в том, что если не пустых от А2 и далее не окажется, заглавная строка удалится, как и должна, но будут выделяться пустые ячейки второй строки. А они потом копируются и тем же макросом вставляются в другую таблицу и искажают её данные. Как сделать так, чтобы если в выделенных таким образом ячейках не будет текста и цифр (а формул не будет точно), т.е. ячейки окажутся визуально пустыми, макрос не копировал их?
Добрый день, уважаемые форумчане. Неожиданно всплыла проблема с созданной формой. Дело в том, что в окошке выпадающего списка ComboBox-а появляется не весь "питающий" список. Число строк в выпадающем списке равно числу записей в базе -1, а не числу строк в "питающем" списке. Какие параметры свойств надо поменять и как?
Что указать в свойствах для ComboBox в эл.форме, чтобы появилась прокрутка списка? Заходил в Style, хотел 1 поставить, а там только 0-... и 2-... Как быть?
Доброй ночи, форумчане. Записал макрорекордером макрос, который в пределах выделенных строк от A до F по критерию в D производит сортировку А--Я. И никак не получается научить его работать с другими выделенными строками. И так и этак лепил, а всё "криво" получается. Т.е. в идеале я выделяю любые строки, запускаю макрос, а он сортирует по алфавиту в D с "автоматическим расширением диапазона" от A до F, но всё в пределах выделенных строк. Заранее благодарю.
Добрый вечер, знатоки. Есть столбец. Я выделяю некоторые строки (каждый раз разные, например, с 7 по 12), макрос выполняет свою работу на других листах (выделение не снимается), а в конце макроса в ячейках этих выделенных строк столбца С должен появиться текст "Напечатано". Как это реализовать?
День добрый. В процессе выполнения макроса перед заданным сохранением появляется окно "Предупреждение о конфиденциальной информации............которые нельзя удалить..." Надоело вусмерть. Как от него избавиться?
В том случае, если нет ни одной такой строки (пустой лист) появляется сообщение об ошибке (rine time errore 91). Как подправить код, чтобы такая ситуация не останавливала макрос. Чтобы "ошибка" игнорировалась и он продолжал выполняться.
Уважаемые форумчане. Подскажите, пожалуйста, почему не копируются результаты фильтра? В приложении файл, макрос из которого копирует данные в файл (ДРУК) лист "ДРУК ЖУРНАЛУ". В нем происходит фильтрация. Дальше результат фильтра должен копироваться и вставляться в лист "ФІЛЬТР". А не копируется.
В приложении файл, но, может достаточно будет и фрагмента кода, чтобы указать на ошибку...
Скажите, пожалуйста, как прописать формулу так, чтобы считала она только в выделенных вручную строках в пределах заранее заданного диапазона? Т.е. в примере, например, всего 5 значений от В2 до В1000. Я "вручную" выделил с 5-й по 11-ю строку (а на этом участке в В уже 3 позиции) и в значении формула должна показать "3", а не "5".
Добрый вечер, форумчане. Есть "вручную" выделенные строки на листе БАЗА (допустим, с 5-й по 10-ю). И есть код, который копирует эти выделенные строки на лист ПЕЧАТЬ, начиная с А1,
Selection.Copy Sheets("ПЕЧАТЬ").Range("A1").
Как сделать так, чтобы 1) макрос удалял все данные с листа ПЕЧАТЬ, а потом 2) вставлялись только значения (без формул). Специальная вставка не помогает.
Код, записанный макрорекордером, почему-то упорно вставляет в ячейки только данные из А5...
Здравствуйте, знатоки. После брожения по форуму и перебора вариантов так и не нашёл способа решить свой вопрос. Надо вставить значение (текст) из другого листа по двум критериям. Пробовал ВПР-2. Не получается. Думаю попытаться через объединение значений столбов A и G и создание нового столба, а затем обычный ВПР, но уверен, что есть менее громоздкий способ без создания новых столбов. Если кто-нибудь знает решение, подскажите, пожалуйста.
Здравствуйте, знатоки Excel. Помогите, пожалуйста, решить вопрос. Есть файл КАЛЕНДАРЬ, в котором есть макрос, который копирует данные из файла АРХИВ на свой первый лист БАЗА, а затем разносит их по листам в соответствии с критерием в 7-м столбе (по месяцам). Всё вроде нормально, но сегодня заметил, что в последний лист (01.2013) не переносятся из БАЗы последние 6 строк. Подскажите, пожалуйста, в чем дело и как "вылечить".
Уважаемые Знатоки. Помогите, пожалуйста, доработать формулу. Формула находится в J. Надо сделать так, чтобы она работала только в пределах до первой пустой ячейки справа. Пустые столбы могут переносится и их может быть несколько. Формула показывает результат, только, если значение в последней правой ячейке не равно 0. Эту её функцию надо сохранить. Спасибо за внимание.
Здравствуйте, Знатоки. Помогите, пожалуйста, доработать формулу. В J введена формула, которая начиная от К из значения последней не пустой ячейки в строке вычитает среднее арифметическое в той же группе ячеек (включая К). Как изменить формулу, чтобы объяснить машине, что считать надо только в случае, если значение в последней не пустой НЕ равно "0"? Спасибо за внимание.
Злравствуйте, знатоки. Помогите, пожалуйста в следующем вопросе. Есть книга Скрытая и есть книга Открытая с макросом 1, который должен копировать данные из Открытой в Закрытую. Обе на D. Макрос взят на http://www.planetaexcel.ru/forum.php?thread_id=42289 от Hugo.
Подскажите, пожалуйста, почему макрос не работает в данном файле? Чего не хватает?
Здравствуйте. Подскажите пожалуйста формулу, которая считает сумму H2 + от K2 и до последней не пустой вправо. Результат должен писаться в I2. Большое спасибо за потраченное время.
В поисках на форуме насобирал макросы. Соединил в макрос 1 (не большой). Не работает. Помогите, пожалуйста, сшить единый макрос. Или подскажите, может быть есть другой выход. Задача: 1)скопировать лист АРХИВ и его копию назвать ВРЕМЕННЫЙ, 2)во ВРЕМЕННЫЙ дату из G, "укоротить" на 3 первых знака, 3)из ВРЕМЕННЫЙ разнести строки по существующим месячным листам (их в последствии будет не мерено) с удалением "старых" данных в них, начиная с строки 4, 4)удалить ВРЕМЕННЫЙ и сохранится.