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

Страницы: 1 2 След.
Установка параметров печати на всех листах книги
 
Цитата
Sanja написал:
Исправьте все свои сообщения
Скажите, пожалуйста, что именно нужно исправить в моих сообщениях? Спасибо

Оформил тексты в виде кода во всех своих сообщениях. Правильно понял, что об этом речь идет?
Изменено: luckyman - 01.11.2023 11:16:40
Установка параметров печати на всех листах книги
 

Добрый день.
Очень интересный инструмент по работе со словарем. При пошаговом выполнении макроса, ругается на "iTmp = dic.Item(wsx(i))" (ошибка: Run-time error 9 Subscript out of range). wsx = Range("ExlWSNames").Value - читает исключаемые имена из определенного листа. ExlWSNames - имя диапазона на листе, который содержит названия листов.
Спасибо
Код
Sub MyPageSetup()
Dim ws As Worksheet
Dim i&
Dim wsx()
Dim dic As Object
Application.PrintCommunication = False
wsx = Range("ExlWSNames").Value
Set dic = CreateObject("Scripting.Dictionary")
For i = LBound(wsx) To UBound(wsx)
iTmp = dic.Item(wsx(i))
Next i
For Each ws In Worksheets
If Not dic.Exists(ws.Name) Then
    With ws.PageSetup
       .PrintArea = ws.UsedRange.Address
        .PrintTitleRows = "$1:$3"
        etc.etc. etc.
    End With
   End If
Next ws
Application.PrintCommunication = True
End Sub
Изменено: luckyman - 01.11.2023 11:13:30
Установка параметров печати на всех листах книги
 
Цитата
написал:
Вариантов масса. Собрать имена(индексы) исключаемых листов в Массив, или в качестве ключей в Словарь или Коллекцию и при очередной интерации цикла, проверять наличие этого имени(индекса) в Массиве/Словаре/Коллекции. Или, тупо, несколько вложенных друг в друга конструкций If...Then или с оператором And. И т.п. Короче - полет фантазии)

Скажите, пожалуйста, что не так в нижеприведенной конструкции? Ругается на "  If ws.Name <> wsx Then".
Спасибо
*************
Код
Sub MyPageSetup()
Dim ws As Worksheet
Application.PrintCommunication = False
wsx = Array("dsdsds", "gfgfg", "ghhghh", "sss", "ttt", "yyy", "ddd>>", "sdsd>>")
For Each ws In Worksheets
    If ws.Name <> wsx Then
    With ws.PageSetup
        .PrintArea = ws.UsedRange.Address
        .PrintTitleRows = "$1:$3"
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .PaperSize = xlPaperA4
Изменено: luckyman - 01.11.2023 11:14:03
Установка параметров печати на всех листах книги
 
Цитата
написал:
For Each ws In Worksheets
 If ws.Name <> "Имя_листа_который_нужно_пропустить" Then
   'какой-то код
 End If
Next
Спасибо. А если их несколько (5-6 листов, которых нужно исключить), как это учесть в коде?
Установка параметров печати на всех листах книги
 
Цитата
написал:
Добавил ответ в сообщение выше
Большое спасибо за подсказку. Скажите, пожалуйста, как в цикле "For Each ws In Worksheets" исключить определенные листы, чтобы макрос по ним не проходил? Спасибо
Установка параметров печати на всех листах книги
 
Цитата
Изменено: luckyman - 31.10.2023 15:39:04
Установка параметров печати на всех листах книги
 
Цитата
написал:
Отключите обработчик ошибок (On Error Resume Next) и, наверное, поймете в чем проблема
Отключил. выдает такую ошибку: Run-time error 13 Type-mismatch. Не понимаю в чем ошибка? Спасибо

Sub MyPageSetup()Dim ws As Worksheet
Application.PrintCommunication = False
Код
For Each ws In Worksheets
ws.Activate

    With ws.PageSetup
        .PrintArea = ws.UsedRange
        .PrintTitleRows = "$1:$3"
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .PaperSize = xlPaperA4
        '.Zoom = False
        
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0.393700787401575)
        .BottomMargin = Application.InchesToPoints(0.393700787401575)
        .HeaderMargin = Application.InchesToPoints(0.196850393700787)
        .FooterMargin = Application.InchesToPoints(0.196850393700787)
        
        .FitToPagesWide = 1
        .FitToPagesTall = ""
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True

    End With
Next ws
Application.PrintCommunication = True
End Sub
Изменено: luckyman - 01.11.2023 11:14:41
Установка параметров печати на всех листах книги
 
Добрый день. Подскажите, пожалуйста, что не так в нижеприведенном макросе, который должен установить одинаковые параметры печати на всех листах книги. При пошаговом запуске макроса строка ".PrintArea = ws.UsedRange" почему-то не принимает значение (т.е.пусто).

Код
Sub MyPageSetup()
On Error Resume Next
Dim ws As Worksheet
Application.PrintCommunication = False

For Each ws In ActiveWorkbook.Worksheets
    With ws.PageSetup
        .PrintArea = ws.UsedRange
        .PrintTitleRows = "$1:$3"
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .PaperSize = xlPaperA4
        '.Zoom = False
        
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0.393700787401575)
        .BottomMargin = Application.InchesToPoints(0.393700787401575)
        .HeaderMargin = Application.InchesToPoints(0.196850393700787)
        .FooterMargin = Application.InchesToPoints(0.196850393700787)
        
        .FitToPagesWide = 1
        .FitToPagesTall = ""
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True

    End With
Next ws
Application.PrintCommunication = True
End Sub
Изменено: luckyman - 01.11.2023 11:15:13
Добавление или удаление большого заданного количества строк
 
Цитата
написал:
два зачем?как ошибку получить?
Из одного файла данные передаются в другой файл, поэтому их два.
Для того, чобы найти ошибку, нужно в файле Main через F8 пошагово запустить макрос PPE_DataImport. Ошибка возникает именно второй раз на этапе добавления строк, первый раз все нормально идёт. Кстати, когда в файле меньше строк, подобная ошибка не возникает.

Ошибка возникает, когда строк большое количество, например свыше 30 тыс
Добавление или удаление большого заданного количества строк
 
-
Изменено: luckyman - 20.10.2023 15:59:54
Добавление или удаление большого заданного количества строк
 
Цитата
написал:
не сможете решить, выкладывайте файл, рассказывайте как получить ошибку
Приложил файлы. Спасибо!
Добавление или удаление большого заданного количества строк
 
Цитата
написал:
посмотрите чему равно r1чему равно dв это время, может быть поймете в чем причина
Первый запускается хорошо, второй выдает одну и ту же ошибку. Значения r, d - нормальные. В чем еще может быть причина?
Спасибо
Добавление или удаление большого заданного количества строк
 
Цитата
написал:
а это Код.Rows(Rw+Cnt+1).Resize(-Cnt).Deleteвы сами не могли написать НИКАК?если шансов не было, займитесь чем-то другим, выращивайте гусей или дельтепланеризм - тоже перспективное занятие, главное - по-дальше от компьютера и чисел


Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

написал:
а это Код.Rows(Rw+Cnt+1).Resize(-Cnt).Deleteвы сами не могли написать НИКАК?если шансов не было, займитесь чем-то другим, выращивайте гусей или дельтепланеризм - тоже перспективное занятие, главное - по-дальше от компьютера и чисел

Добрый день. Спасибо за ваши советы про выращивание гусей и дельтапланетаризм, нужно подумать...

Вами написанный макрос по добавлению/удалению строк через отдельный тест-макрос (Test) работает устойчиво и стабильно (за это Вам огромное спасибо!). Однако если данный макрос инкорпорировать в другой макрос (PPE_DataImport, см.ниже), то он работает крайне нестабильно в части макроса «InsDelRows», а именно, один раз хорошо работает, а следующий раз выдает ошибку «Run-time error 1004/Метод Insert из класса Range завершен неверно». При отладке ошибки указывает на строку «.Rows(r1).Resize(d).Insert». После этого MS Excel зависает, приходится принудительно снять задачу.

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

********************************************
Sub PPE_DataImport()
'Step#1 - Changing the mode of calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
'Step#2 - Defining names and the first and last used rows and columns
With ThisWorkbook
ws1 = Range("ws_1") 'This workbook
ws2 = Range("ws_2") 'sap tr.#Z1AA1029
wb2 = Range("wb_2") 'sap tr.#Z1AA1029
FR2 = 7 'first line of ws2
c1 = .Worksheets(ws1).Cells(6, Columns.Count).End(xlToLeft).Column 'Last used column in ws1
r1 = .Worksheets(ws1).Cells(Rows.Count, 3).End(xlUp).Row - 1 'Last used row in ws1
r2 = Workbooks(wb2).Worksheets(ws2).Cells(Rows.Count, 3).End(xlUp).Row 'Last used row in ws2
d = r2 - r1
.Worksheets(ws1).Activate
'Step#3 - Insert new lines or delete unnecessary lines
Msg = "Добавить/удалить строки на листе <Реестр>?"
Style = vbYesNo
Title = "Добавление/удаление строк"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
InsDelRows r1, d
Else
GoTo L1
End If
'Step#4 - Importing data
L1:
For k = 1 To c1
nm = .Worksheets(ws1).Cells(5, k).Value
If Not Workbooks(wb2).Worksheets(ws2).Rows(6).Find(What:=nm, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) Is Nothing Then
cnm = Workbooks(wb2).Worksheets(ws2).Rows(6).Find(What:=nm, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True).Column
.Worksheets(ws1).Range(Cells(FR2, k), Cells(r2, k)).Value = Workbooks(wb2).Worksheets(ws2).Range(Workbooks(wb2). _
Worksheets(ws2).Cells(FR2, cnm), Workbooks(wb2).Worksheets(ws2).Cells(r2, cnm)).Value
End If
Next k
End With
'***********************************************************
'Step#5 - Data Formatting
DataFormatting
'Step#6 - Changing the mode of calculation
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
'Step#7 - Update array formulas
UpdateArrayFormulas
MsgBox ("Data import finished successfully!")
End Sub
Sub DataFormatting()
ws1 = Range("ws_1")
With ThisWorkbook.Worksheets(ws1)
c1 = Range("date1").Column
LastRow = .Cells(Rows.Count, 3).End(xlUp).Row
.Range(Cells(7, c1), Cells(LastRow, c1 + 2)).Replace What:="00.00.0000", _
Replacement:="", SearchOrder:=xlByColumns, MatchCase:=True
End With
End Sub
'***********************************************************
Sub UpdateArrayFormulas()
ws1 = Range("ws_1")
With ThisWorkbook.Worksheets(ws1)
LR = Cells(Rows.Count, 3).End(xlUp).Row - 1
r1 = 7
c1 = Range("oko").Column
c2 = Range("nca").Column
c3 = Range("varende").Column
c4 = Range("IC_GEH").Column
Range(Cells(r1, c1), Cells(LR, c1)) = Cells(r1, c1).Formula 'Classes of PPE in OKO
Range(Cells(r1 + 1, c1), Cells(LR, c1)) = Range(Cells(r1 + 1, c1), Cells(LR, c1)).Value
Range(Cells(r1, c2), Cells(LR, c2)) = Cells(r1, c2).Formula 'Non-core assets
Range(Cells(r1 + 1, c2), Cells(LR, c2)) = Range(Cells(r1 + 1, c2), Cells(LR, c2)).Value
Range(Cells(r1, c3), Cells(LR, c3)) = Cells(r1, c3).Formula 'Leased out assets
Range(Cells(r1 + 1, c3), Cells(LR, c3)) = Range(Cells(r1 + 1, c3), Cells(LR, c3)).Value
Range(Cells(r1, c4), Cells(LR, c4)) = Cells(r1, c4).Formula 'GEH Group' companies
Range(Cells(r1 + 1, c4), Cells(LR, c4)) = Range(Cells(r1 + 1, c4), Cells(LR, c4)).Value
End With
End Sub
'***********************************************************
Sub InsDelRows(r1, d, Optional Ws As Worksheet = Nothing)
If Ws Is Nothing Then Set Ws = ActiveSheet
With Ws
       If d < 0 Then
       Range(Rows(r1 + d + 1), Rows(r1)).Delete Shift:=xlUp
   Else
       .Rows(r1).Copy
       .Rows(r1).Resize(d).Insert
       Application.CutCopyMode = False
   End If
End With
End Sub
'***********************************************************
Sub Test()
InsDelRows 34173, -173
End Sub
Изменено: luckyman - 20.10.2023 14:35:36
Добавление или удаление большого заданного количества строк
 
Цитата
написал:
InsDelRows 10, -5
InsDelRows 10, -5  - удаляет 5 строк после 10-й строки включая саму 10-. строку. А как сделать так, чтобы удалять 5 строк до 10-й строки? Спасибо
Добавление или удаление большого заданного количества строк
 
Цитата
написал:
макрос (не знаю насколько умный) для вставки и удаления строкКод ? 12345678910Sub InsDelRows(Rw, Cnt, Optional Ws As Worksheet = Nothing)  If Ws Is Nothing Then Set Ws = ActiveSheet  With Ws    If Cnt > 0 Then      .Rows(Rw).Resize(Cnt).Insert    Else      .Rows(Rw).Resize(-Cnt).Delete    End If  End WithEnd SubприCnt больше 0 будет добавлено Cnt строк перед строкой RwCnt меньше 0 будет удалено -Cnt строк начиная с строки Rwесли Ws не задано - все произойдет на активном листеКод ? 12345Sub Test()  InsDelRows 10, 5  MsgBox "5 rows add"  InsDelRows 10, -5End Subпроцедура Test добавит 5 строк перед 10 (10-я станет 15-й строкой)а потом сразу удалит 5 только что добавленных строк (лист останется как был)
Добрый день.

Спасибо за ответ. Макрос достаточно умный и гибкий.

Для того, чтобы оставались формулы и форматы, можно в макрос доработать так, чтобы вставить не просто пустые строки после Rw, а скопировать указанную строку (Rw) в буфер обмена и вставить данную строку как через вариант «Вставить скопированные ячейки» заданное Cnt количество раз?

Спасибо

Добавление или удаление большого заданного количества строк
 

Добрый день.

Спасибо за ответ. Макрос достаточно умный и гибкий.

Для того, чтобы оставались формулы и форматы, можно в макрос доработать так, чтобы вставить не просто пустые строки после Rw, а скопировать указанную строку (Rw) в буфер обмена и вставить данную строку как через вариант «Вставить скопированные ячейки» заданное Cnt количество раз?

Спасибо

Добавление или удаление большого заданного количества строк
 

Добрый день.

Просьба подсказать умный макрос для выполнения следующей задачи:

Для импорта данных из другого файла возникает необходимость добавления новых строк или удаления лишних строк в текущем рабочем листе.

Пусть рабочий лист содержит N строк, при этом исходный файл, откуда нужно импортировать данные, содержит M строк.

Если N<M, тогда следует скопировать предпоследнюю строку текущего рабочего листа в буфер обмена и вставить скопированные ячейки (M-N) раз перед предпоследней строкой. В противном случае, если N>M, тогда перед предпоследней строкой рабочего листа необходимо удалить (N-M) лишних строк.

Количество строк может быть более чем 50 тыс строк, поэтому нужен умный макрос для того, чтобы очень быстро вставить скопированные ячейки или удалить лишние ячейки.

СПАСИБО

Изменено: luckyman - 12.10.2023 13:52:50 (Уточнения приложенного файла)
Поиск значения из массива в другом массиве
 
БМВ, Добрый день. Не могли пояснить суть формулы =ЕСЛИОШИБКА(ИНДЕКС(Звонки!E:E;1/(1/МАКС(a1;a2;a3;a4)));""), какую здесь роль играет конструкция 1/(1/макс(а1;a2;a3;a4)? Спасибо
сконструировать подбор ячейки в формуле
 
Если требуется за последние 12 месяцев от заданной даты включая указанный месяц, то формула должна выглядеть так:
=СУММЕСЛИМН(C3:U3;$C$2:$U$2;">"&$B$1-365)
Снятие защиты ячеек, Снятие защиты ячеек
 
Дмитрий(The_Prist) Щербаков, Отлично, сработал. Огромное спасибо!!!
Снятие защиты ячеек, Снятие защиты ячеек
 
Цитата
написал:
luckyman, здравствуйте     Код        
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9      Sub   UnProtect()    Dim   sh   As   Worksheet, cl   As   Range       For   Each   sh   In   ActiveWorkbook.Worksheets          For   Each   cl   In   sh.UsedRange.Cells              If   cl.Interior.color = 65535   Then   cl.Locked =   False          Next   cl    Next   sh    End   Sub   
 
Спасибо. Выдает следующее сообщение:Run-time error 1004: Нельзя установить свойство Locked класса Range. При этом для первых трех листов отрабатывает, далее нет.
Изменено: luckyman - 20.04.2023 16:24:06
Снятие защиты ячеек, Снятие защиты ячеек
 

Добрый день.

Нужен умный макрос для снятия галочки «Защищаемая ячейка» (в закладке «Защита» в меню «Формат ячеек») по ячейкам, закрашенным в желтый цвет (код цвета 65535). Данное действие нужно произвести по всем листам книги. Пример файла прилагается.

Заранее спасибо за подсказку и помощь.

Удаление нескольких страниц между двумя страницами
 
Работает
БОЛЬШОЕ СПАСИБО!!!
Удаление нескольких страниц между двумя страницами
 
Добрый день. Нужно с помощью макроса удалить большое количество листов, распложённых между двумя заданными листами (см. прикрепленный файл) "start" и "end". Как это лучше сделать? Спасибо.
Превращение формул в значения в больших таблицах
 
Количество столбцов в рабочей таблице составляет более 200 штук, количество строк – более 40 тыс строк. Столбцы с формулами расположены в разной последовательности и разных количествах. При этом первая ячейка столбца, содержащий формулы, закрашен в зеленый цвет. Макрос должен сначала анализировать в первые ячейки каких столбцов таблицы закрашены в зеленый цвет и по ним выполнять задачу копирования и превращения формул в значения. При этом формула в закрашенных в зеленый цвет ячейках должна остаться (см. пример).
Превращение формул в значения в больших таблицах
 
Добрый день.

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

Описание задачи.
Нужно скопировать формулы из закрашенных в зеленый цвет ячеек вниз до конца таблицы, после чего превратить формулы в значения, при этом оставить формулы в закрашенных в зеленый цвет ячейках. В таблице более 40 тыс строк и 200 столбцов. В прикрепленном файле приводит сокращенный пример.

Когда столбцы, содержащие формулы, идут подряд, это делается очень просто (см. ниже макрос), а когда столбцы расположены в разной последовательности, и их более 200 штук требуется написать более умный макрос, в чем заключается задача.
Для подряд идущих столбцов использовал такой макрос:
Код
Range("AO5:AR37388") = Range("AO5:AR5").Formula
Range("AO6:AR37388").Formula = Range("AO6:AR37388").Value

Заранее спасибо за подсказку и помощь.
Изменено: vikttur - 26.08.2021 16:27:30
Масштабирование в MacOS, Масштабирование в MacOS
 
Добрый день.

При открытии таблиц эксель, ранее созданных в Windows, в MacOS масштаб не соответствует тому, что было в Windows: чтобы получить аналогичный масштаб, приходится увеличить масштаб в MacOS до 150%. Как можно сделать так, чтобы исходный масштаб остался или какое есть решение данного вопроса?

Спасибо
Вставка таблиц из MS Excel в MS Word (искажение шрифтов), Вставка таблиц из MS Excel в MS Word
 
После того, как я открыл файл в другом компьютере мне стало понятно, что в целом вставка таблиц в ворд происходит нормально, при этом именно через новый монитор изображение мне видится в искаженном виде, шрифты растягиваются. Как это можно исправить так, чтобы мой монитор нормально показывал изображение, попробовал подобрать разные разрешения монитора и шрифта, не помогает...
Вставка таблиц из MS Excel в MS Word (искажение шрифтов), Вставка таблиц из MS Excel в MS Word
 
Добавил скрин
Вставка таблиц из MS Excel в MS Word (искажение шрифтов), Вставка таблиц из MS Excel в MS Word
 

Добрый день.

При вставке таблицы из  MS Excel в MS Word идет искажение вида таблицы, а именно буквы и числа в таблице становятся расплывчатыми, таблица растягивается, ничего невозможно делать. Это произошло после замены монитора 17 дюмов на 27 дюмов.

Вставку делаю через кнопку «Вставить»/Специальная вставка/Свзяать/Лист Microsoft Excel (объект). Данным методом я пользуюсь очень много лет, всегда такой способ вставки должным образом работал.

Скажите, пожалуйста, какие у вас есть мысли по данному вопросу?

Спасибо за советы.

Изменено: luckyman - 02.08.2019 19:43:52 (Вложение)
Страницы: 1 2 След.
Наверх