Пополняемый список полезных запросов Teradata, которые могут пригодиться в работе.
Поиск представлений, использующих искомую таблицу:
SELECT * FROM dbc.tablesv tbl WHERE 1=1 AND tbl.RequestText LIKE '%table@_namet%' escape '@' AND tbl.Tablekind IN ('V'); |
Поиск представлений, с искомым полем/столбцом:
SELECT DatabaseName, TableName FROM dbc.columnsv tbl WHERE ColumnName = 'column_name'; |
Продолжить чтение »
Действие книги происходит на необитаемом острове, куда случайно каким-то образом (возможно крушение самолёта) попадают эвакуированные во время неизвестного ядерного конфликта мальчики разных возрастов. Среди них изначально выделяются два лидера, Ральф и Джек. Также особую роль занимает рассудительный, но слабый и несуразный толстый мальчик в очках и с астмой, которого вопреки его воли стали называть Хрюшей. На первоначальном сходе мальчики решают выбрать главного, им становится в результате голосования Ральф. Что огорчило Джека Мередью, которые в обычной жизни руководит церковным хором и на острове превращает своих хористов с согласия Ральфа в охотников на свиней, обитающих на острове. Изначально мальчики, гордящиеся своим английским происхождением, стремятся наладить честное, равноправное взаимодействие, где право голоса будет у каждого. Для этого используется раковина-горн, символ главенства Ральфа. Тот у кого раковина — может высказывать свои мысли, а другие должны его слушать. Тем не менее уже с самого начала этот принцип начинает немного нарушаться в пользу того, что кто сильнее — тот и прав. Джек, особо сильно невзлюбивший Хрюшу, постоянно игнорирует под разными предлогами и без них, право последнего на слово, унижает и обзывает его. С Ральфом же у них вначале завязываются дружеские отношения. Получив право быть главным Ральф не сразу понимает что делать, ему не хватает сообразительности и рассудительности, которая есть у Хрюши, предлагающего разумные шаги.
Продолжить чтение »
Изначально перед прочтением книги никаких особых ожиданий не было. Даже не знал кто такой «пересмешник», ассоциации были только с «перебежчиком».
Действие происходит в вымышленном американском южном городе Мейкомб, столице вымышленного округа, в 30-е годы XX века.
Повествование ведётся от лица 6-ти летней девочки, Джин-Луизы Финч, живущей с рождения в этом городе. У неё есть отец-адвокат, Аттикус Финч, которому уже есть 50 лет, родной старший брат Джим и тётя Александра. Мать умерла, когда ей было 2 года, и большую часть обязанностей матери по дому, включая отчасти и воспитание, взяла на себя негритянка-домработница. Девочка рассказывает о своей жизни в городе, происходящих с ней происшествиях и приключениях, отношениях и играх с братом и друзьями, первых днях и дальнейшей учёбе в школе, о летних каникулах, первом снеге.
Продолжить чтение »
В Андроид 9 на телефонах Google Pixel и Nexus по-умолчанию включена далеко не всем необходимая функция левого дополнительного рабочего стола с лентой новостей и приложений.
Причем, если, например, на телефонах Samsung подобный экран отключается достаточно просто, то в случае с гугловскими телефонами отключение запрятано достаточно далеко. Заветный переключатель запрятан в дополнительных настройках Pixel Launcher.
Итак, как его отыскать.
Продолжить чтение »
Мне поступил заказ на разработку макроса для Outlook, который будет сразу после поступления письма, без какого бы то ни было участия, распечатывать само письмо, его вложения (файлы *.doc, *.docx, *.xls, *.xlsx а также *.jpg и *.pdf). А если в письмо вложен архив, то макрос должен его распаковать и распечатать находящиеся внутри документы.
Задача показалась мне интересной и я взялся за неё.
Поискав в сети, я нашел готовое решение, которое позволяло частично выполнить задачу.
Документы печатать было уже можно (должен быть установлен MS Office). Однако оставалось решить ещё несколько проблем:
- При попытке напечатать таким образом изображения появляется окно вывода на печать, где требуется ещё нажать кнопку. Т.е. уже не выполняется условие «без участия пользователя».
- Для печати PDF не получится воспользоваться средствами MS Office.
- Нужно добавить распаковку *.rar и *.zip архивов
Для решения первой проблемы решено было использовать Paint, который установлен практически на любом компьютере с Windows. Вторая проблема решается установкой на компьютер Adob Reader и печатью силами данной программы. А третья проблема легко будет устранена если на компьютере стоит WinRAR.
В итоге получился следующий код:
'С 64-битным Outlook нужно использовать Declare PtrSafe Function Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private WithEvents Items As Outlook.Items Private Sub Application_Startup() Dim olNameSpace As Outlook.NameSpace Dim Folder As Outlook.MAPIFolder Set olNameSpace = Application.GetNamespace("MAPI") Set Folder = olNameSpace.GetDefaultFolder(olFolderInbox) Set Items = Folder.Items End Sub Private Sub Items_ItemAdd(ByVal Item As Object) If TypeOf Item Is Outlook.MailItem Then PrintAttachments Item End If End Sub 'Печать вложений из письма Private Sub PrintAttachments(olItem As Outlook.MailItem) On Error Resume Next Dim colAtts As Outlook.Attachments Dim olAtt As Outlook.Attachment Dim sFile As String Dim sDirectory As String Dim sFileType As String Dim pa As PropertyAccessor Dim is_attach As Boolean Const PR_ATTACH_CONTENT_ID As String = "http://schemas.microsoft.com/mapi/proptag/0x3712001F" Const PR_ATTACHMENT_HIDDEN As String = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B" Dim str1() As String Dim str2() As String sDirectory = "C:\Test\" Set colAtts = olItem.Attachments If colAtts.Count Then For Each olAtt In colAtts is_attach = False 'Проверяем не является ли файл элементом оформления письма Set pa = objAtt.PropertyAccessor cid = pa.GetProperty(PR_ATTACH_CONTENT_ID) If Len(cid) > 0 Then If InStr(itm.HTMLBody, cid) Then is_attach = False Else 'Если не существует PR_ATTACHMENT_HIDDEN, то возникнет ошибка 'Просто игнорируем эту ошибку и интерпретируем как False On Error Resume Next If Not pa.GetProperty(PR_ATTACHMENT_HIDDEN) Then is_attach = True End If On Error GoTo 0 End If Else is_attach = True End If 'определение расширения файла str1 = Split(olAtt.FileName, ".") sFileType = "." & LCase(str1(UBound(str1))) Select Case sFileType Case ".xls", ".xlsx", ".doc", ".docx" sFile = sDirectory & "FileForPrint_" & olAtt.Index & sFileType olAtt.SaveAsFile sFile ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0 Case ".pdf" sFile = sDirectory & "FileForPrint_" & olAtt.Index & sFileType olAtt.SaveAsFile sFile 'Прописать путь к AcroRd32.exe Shell "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe /p /h " & sFile Case ".jpg", ".png" sFile = sDirectory & "FileForPrint_" & olAtt.Index & sFileType olAtt.SaveAsFile sFile 'Прописать путь к mspaint.exe Shell "C:\WINDOWS\system32\mspaint.exe " & sFile & " /p" Case ".zip", ".rar" sFile = sDirectory & "FileForPrint_" & olAtt.Index & sFileType sDir = sDirectory & "FileForPrint_" & olAtt.Index If Dir(sDir, vbDirectory) <> "" Then Kill sDir & "\*.*" RmDir sDir End If olAtt.SaveAsFile sFile 'Прописать путь к winrar.exe Shell "C:\Program Files\WinRAR\winrar.exe e " & sFile & " " & sDir & "\" strFileName = Dir(sDir & "\" & "*.*") Do While strFileName <> "" 'До тех пор пока файлы "не закончатся" 'MsgBox strFileName str2 = Split(strFileName, ".") sFileType2 = "." & LCase(str2(UBound(str2))) Select Case sFileType2 Case ".xls", ".xlsx", ".doc", ".docx" ShellExecute 0, "print", sDir & "\" & strFileName, vbNullString, vbNullString, 0 Case ".pdf" 'Прописать путь к AcroRd32.exe Shell "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe /p /h " & sDir & "\" & strFileName Case ".jpg", ".png" sFile = sDirectory & "FileForPrint_" & olAtt.Index & sFileType olAtt.SaveAsFile sFile 'Прописать путь к mspaint.exe Shell "C:\WINDOWS\system32\mspaint.exe " & sDir & "\" & strFileName & " /p" End Select strFileName = Dir 'Следующий файл Loop End Select Next End If End Sub 'Процедура печать текста письма Private Sub PrintMessage(sDir) On Error Resume Next ShellExecute 0, "Print", sDir, vbNullString, "", 1 End Sub Public Sub PrintMessageAndAttach(itm As Outlook.MailItem) Dim objAtt As Outlook.Attachment Dim saveFolder As String 'Нужно создать папку, куда временно будут сохраняться письма и их вложения перед печатью (прописывается без обратного слеша в конце) saveFolder = "C:\\Test" If Dir(saveFolder, vbDirectory) = "" Then MkDir saveFolder End If 'Сообщение, которое всплывает после получения письма 'Для наглядности оно отображает Тему письма, email отправителя, и количество вложений If MsgBox("Вы хотите распечатать входящее письмо и все его вложения?" & Chr(10) & _ "Тема: " & itm.Subject & Chr(10) & _ "Отправитель: " & itm.SenderEmailAddress & Chr(10) & _ "Вложения: " & itm.Attachments.Count, vbYesNo, "Печать письма и вложений") = vbYes Then 'Сохранение письма и его печать itm.SaveAs (saveFolder & "\Message_For_Print.msg") PrintMessage saveFolder & "\Message_For_Print.msg" 'Печать вложений PrintAttachments itm End If End Sub |
Продолжить чтение »
На просторах Интернета не сложно найти SQL функцию, которая считала бы аннуитетный платёж по данным о величине кредита, процентной ставке и сроку кредита. Но вот готовой функции для другой задачи, а именно поиска процентной ставки по данным об аннуитете, сроке и величине кредита, мне найти не удалось. Решение данной задачи не тривиальное и требует применения численных методов. В Excel есть очень удобная для этого функция СТАВКА(), на аналог которой на языке PHP я наткнулся на StackOverflow. Мне оставалось только переписать код для SQL. Результат можно увидеть ниже.
nper — количество платёжных периодов; pmt — аннуитетный платёж; pv — величина кредита. Для поиска решения используется метод хорд.
CREATE OR REPLACE FUNCTION RATE (nper NUMBER, pmt NUMBER, pv NUMBER) RETURN NUMBER AS v_result NUMBER; fv NUMBER:= 0.0; s_type INT:= 0; guess NUMBER := 0.1; FINANCIAL_MAX_ITERATIONS INT := 5000; --количество итераций FINANCIAL_PRECISION NUMBER:= 1.0e-08; --точность y NUMBER; y0 NUMBER; y1 NUMBER; f NUMBER; i NUMBER; x0 NUMBER; x1 NUMBER; BEGIN v_result := guess; IF (abs(v_result) < FINANCIAL_PRECISION) THEN y := pv * (1 + nper * v_result) + pmt * (1 + v_result * s_type) * nper + fv; ELSE f := EXP(nper * ln(1 + v_result)); y := pv * f + pmt * (1 / v_result + s_type) * (f - 1) + fv; END IF; y0 := pv + pmt * nper + fv; y1 := pv * f + pmt * (1 / v_result + s_type) * (f - 1) + fv; -- поиск корня методом хорд i := 0; x0 := 0; x1 := v_result; while ((abs(y0 - y1) > FINANCIAL_PRECISION) AND (i < FINANCIAL_MAX_ITERATIONS)) loop v_result := (y1 * x0 - y0 * x1) / (y1 - y0); x0 := x1; x1 := v_result; IF ((nper * abs(pmt)) > (pv - fv)) THEN x1 := abs(x1); END IF; IF (abs(v_result) < FINANCIAL_PRECISION) THEN y := pv * (1 + nper * v_result) + pmt * (1 + v_result * s_type) * nper + fv; ELSE f := EXP(nper * ln(1 + v_result)); y := pv * f + pmt * (1 / v_result + s_type) * (f - 1) + fv; END IF; y0 := y1; y1 := y; i:=i+1; END loop; RETURN v_result; END; |
Есть несколько способов поиска определённого текста в теле письма с помощью VBA. Можно воспользоваться функциями InStr, Len, Left или Right, чтобы найти и извлечь текст, а можно воспользоваться регулярными выражениями. Именно о применении регулярных выражений в коде VBA пойдёт речь в данной статье.
Например, требуется извлечь код отслеживания посылки UPS, отправленной с Amazon.com. Такой код имеет формат как на скриншете ниже:
Нужно находить в тексте слова «Carrier Tracking ID», затем, возможно, пробел и двоеточие.
.Pattern = "(Carrier Tracking ID\s*[:]+\s*(\w*)\s*)"
Такое выражение извлечёт из текста из примера цифро-буквенный код 1Z2V37F8YW51233715.
Продолжить чтение »
Если на этапе заполнения базы данных разработчики не предусмотрели механизма предварительной проверки правильности e-mail, то полезной будет следующая функция. Она возвращает 1, если адрес электронной почты корректен, и код ошибки в противном случае:
CREATE OR REPLACE FUNCTION EMAIL_CHECK (email varchar2) --проверяет адрес эл. почты 1 - else - not ok /********************************************/ --КОДЫ ОШИБОК --0 Пустой email --99 Нет символа @ или не заполнено имя пользователя или пароль --100 Введённый email содержит пробелы в имени пользователя. --101 Точка (.), в имени пользователя не может быть первым символом. --102 Минус (-), в имени пользователя не может быть первым символом. --103 Подчёркивание (_), в имени пользователя не может быть первым символом. --104 Введённый email содержит недопустимые символы в имени пользователя --105 Введённый email содержит пробелы в домене. --106 Домен должен содержать хотя бы одну точку (.). --107 Точка (.), в домене не может быть первым или последним символом. --108 Введённый email содержит недопустимые символы в домене --109 Введённый email содержит недопустимые символы в суффиксе домена (то, что написано после последней точки) /********************************************/ RETURN INT IS R INT:= 1; username VARCHAR(200); DOMAIN VARCHAR(200); msg VARCHAR(255); temp_str VARCHAR(200); len INT; BEGIN IF ltrim(rtrim(email)) IS NOT NULL THEN username:=LOWER(substr(email,1,instr(email,'@')-1)); DOMAIN:=LOWER(substr(email,instr(email,'@')+1,LENGTH(email)-instr(email,'@')+1)); -- проверка @ и длины имени пользователя и домена IF LENGTH(username)=0 OR LENGTH(DOMAIN)=0 THEN R := 99; END IF; -- проверка правильности имени пользователя IF instr(username,' ')!=0 THEN R := 100; END IF; IF substr(username,1,1)='.' THEN R := 101; END IF; IF substr(username,1,1)='-' THEN R := 102; END IF; IF substr(username,1,1)='_' THEN R := 103; END IF; temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(username,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'_',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9',''); IF LENGTH(temp_str)<>0 THEN R := 104; END IF; -- проверка правильности домена IF instr(DOMAIN,' ')!=0 THEN R := 105; END IF; IF instr(DOMAIN,'.')=0 THEN R := 106; END IF; IF substr(DOMAIN,1,1)='.' OR substr(DOMAIN,LENGTH(DOMAIN),1)='.' THEN R := 107; END IF; temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(DOMAIN,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9',''); IF LENGTH(temp_str)<>0 THEN R := 108; END IF; len:=LENGTH(DOMAIN); while len>0 loop IF substr(DOMAIN,len,1)='.' THEN exit; END IF; len := len - 1; END loop; temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(substr(DOMAIN,len+1,LENGTH(DOMAIN)-len+1),'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''); IF LENGTH(temp_str)<>0 THEN R := 109; END IF; ELSE R := 0; END IF; RETURN(R); END; |
Продолжить чтение »
Получать информацию о выполненных и будущих задачах, распланированных в соответствующем разделе Outlook, можно с помощью кода из этой статьи. Может, например, пригодиться для автоматического формирования перечня задач находящихся в работе и уже исполненных.
Private Sub LoadTask() Dim fTasks As Outlook.MAPIFolder Dim Tasks As Outlook.Items Set fTasks = Outlook.GetNamespace("MAPI").GetDefaultFolder(olFolderTasks) Set Tasks = fTasks.Items Tasks.Sort "[StartDate]", True For i = 1 To Tasks.Count 'Тема задачи ActiveSheet.Range("A" & i).Value = _ Replace(Trim(Tasks(i).Subject), Chr(10), " ") 'Статус задчи If Tasks(i).Complete Then ActiveSheet.Range("B" & i).Value = "Завершена" Else ActiveSheet.Range("B" & i).Value = "В работе" End If 'Тип задчи If Tasks(i).IsRecurring Then ActiveSheet.Range("C" & sr).Value = "Регулярная задача" Else ActiveSheet.Range("C" & sr).Value = "Единичная задача" End If ActiveSheet.Range("D" & sr).Value = Tasks(i).StartDate 'Срок окончания задачи ActiveSheet.Range("E" & sr).Value = Tasks(i).DueDate 'Дата выполнения ActiveSheet.Range("F" & sr).Value = Tasks(i).DateCompleted 'Описание задачи ActiveSheet.Range("G" & sr).Value = Tasks(i).Body ActiveSheet.Range("H" & sr).Value = Tasks(i).Owner Next i End Sub |
Продолжить чтение »
Следующий код, помещённый в VBA редакторе на соответствующий лист, позволяет двойным кликом левой кнопки мыши по ячейке в первом столбце устанавливать в ней попеременном галочку, либо крестик.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Column = 1 Then Select Case .Value Case Is = "a" .Font.Name = "Marlett" .Value = "r" Case Is = "r" .Font.Name = "Marlett" .Value = "a" Case Else .Font.Name = "Marlett" .Value = "a" End Select Cancel = True End If End With End Sub |
Результат работы макроса выглядит следующим образом:
Если, например, требуется получить одно единственное значение с помощью запроса к базе данных (сам запрос может иметь заранее заданную конструкцию, меняющуюся в зависимости от определённых условий), то пригодится следующией код.
Для MS SQL
Sub Get_MSSQL_Data() Dim db As ADODB.Connection Dim rs As ADODB.Recordset Dim sqlStr As String Set rs = CreateObject("ADODB.Recordset") Set db = New ADODB.Connection db.Open _ "DRIVER={SQL Server};SERVER=SName;UID=UserName;PWD=Password;DATABASE=DBName" sqlStr = "SELECT Count(*) as cnt FROM [DBName].[DB].[Table]" rs.Open sqlStr, db While Not rs.EOF str1 = rs.Fields("cnt").Value rs.MoveNext Wend rs.Close db.Close End Sub |
Продолжить чтение »
Задача: Есть набор целых чисел (числа не повторяются)
1 3 5 7 8 9 11 2 25 30 |
Необходимо в Excel написать макрос, который выводит на лист «Результат» все комбинации чисел из набора, дающие в сумме 40. Каждое число можно использовать один раз. Полный перебор комбинаций нежелателен.
Дано: Книга Excel, сотоящая из двух листов. На первом листе (sh1) во второй строке располагается набор целых чисел, а в четвертой строке – необходимая сумма. На втором листе (sh2) будут хранится временные массивы и итоговый результат.
Продолжить чтение »
Полезное руководство по преобразованию запросов из формата Microsoft SQL в Teradata SQL.
В приведенных примерах ссылка на объект «mufford» — это некое личное хранилище. Следует заменять на собственное.
Команда SELECT
Простой SELECT
SQL Server
1 2 3 4 5 6 | USE AdventureWorksDW2012; GO SELECT TOP 10 ProductKey , EnglishProductName FROM dbo.DimProduct; |
или
1 2 3 | SELECT TOP 10 ProductKey , EnglishProductName FROM AdventureWorksDW2012.dbo.DimProduct; |
Teradata
1 2 3 | SELECT TOP 10 P_PartKey , P_Name FROM retail.Product; |
Продолжить чтение »
Нижеследующий код позволяет создать новую книгу Excel из листов текущей книги, содержащей макросы. Также удаляются ненужные кнопки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub ToNewFile() pathNewBook = "C:\Temp\" 'Путь сохранения новой книги nameNewBook = "Название книги (" & Format(Now, "MMMM YYYY") & ").xlsx" Application.ScreenUpdating = False Application.DisplayAlerts = False Application.SheetsInNewWorkbook = 1 'Количество листов в новой книге Set NewWB = Workbooks.Add ThisWorkbook.Activate Sheets("Лист 1").Copy Before:=NewWB.Sheets(1) NewWB.Sheets(2).Delete 'Удаляем кнопки NewWB.Sheets("Лист 1").Shapes.Range(Array("cbButtonName")).Delete NewWB.SaveAs Filename:=pathNewBook & nameNewBook NewWB.Close True 'Сохраняем Application.CutCopyMode = False If Dir(pathNewBook & nameNewBook) <> "" Then MsgBox "Создан файл: " & pathNewBook & nameNewBook Else MsgBox "Не удалось создать файл!" End If End Sub |
Sub ToNewFile() pathNewBook = "C:\Temp\" 'Путь сохранения новой книги nameNewBook = "Название книги (" & Format(Now, "MMMM YYYY") & ").xlsx" Application.ScreenUpdating = False Application.DisplayAlerts = False Application.SheetsInNewWorkbook = 1 'Количество листов в новой книге Set NewWB = Workbooks.Add ThisWorkbook.Activate Sheets("Лист 1").Copy Before:=NewWB.Sheets(1) NewWB.Sheets(2).Delete 'Удаляем кнопки NewWB.Sheets("Лист 1").Shapes.Range(Array("cbButtonName")).Delete NewWB.SaveAs Filename:=pathNewBook & nameNewBook NewWB.Close True 'Сохраняем Application.CutCopyMode = False If Dir(pathNewBook & nameNewBook) <> "" Then MsgBox "Создан файл: " & pathNewBook & nameNewBook Else MsgBox "Не удалось создать файл!" End If End Sub
Продолжить чтение »
Создание примечания для ячейки в Excel с помощью макроса, которое также имело бы сложное внутреннее форматирование, не самая тривиальная задача. Для этого можно воспользоваться например таким кодом:
With Worksheets(1).Cells(4, 12).Comment .Visible = False .Text "Жирный шрифт:" & Chr(10) & "курсив" .Shape.DrawingObject.Characters(1, 13).Font.Bold = True .Shape.DrawingObject.Characters(15, 20).Font.Italic = True End With |
В итоге получится примерно такое примечание:
Продолжить чтение »
Столкнулся с проблемой ограничения числа пунктов в верхнем меню шаблона WordPress. Если количество пунктов в шаблоне Deep Silent превышает 6, то появляется дополнительный пункт «More Pages»:
После продолжительных поисков нашлось решение. В папке с темой хранится файл script.js. В данном файле изменить в строке:
var lastlis = clearlis.slice(6); |
цифру 6 на нужное количество пунктов:
var lastlis = clearlis.slice(9); |
В итоге можно увеличить отображаемое количество разделов меню:
При создании сохранении новой книги Excel может возникнуть сообщение:
Предупреждение о конфиденциальной информации: документ содержит макросы, элементы управления ActiveX, данные пакета расширения XML или веб-компоненты. Они могут включать личные сведения, которые нельзя удалить с помощью инспектора документов.
Решение проблемы:
- Откройте книгу в Excel.
- Откройте центр управления безопасностью в Excel.
- На вкладке Параметры конфиденциальности снимите флажок Удалять личные сведения из свойств файла при сохранении.
- Сохраните книгу и закройте Excel.
Чтобы в случае ввода ошибочных данных в таблицу Excel (например, слово вместо цифры в столбец «Номер») ячейки с ошибками подсвечивались красным фоном, можно воспользоваться условным форматированием. Данный способ удобнее, чем проверка данных, в случае массовой вставки данных из внешнего источника.
Для Excel 2010. Нужно открыть «Условное форматирование» -> «Управление правилами…» -> «Создать правило…» -> «Использовать формулу для определения форматируемых ячеек» и в поле «Форматировать значения, для которых следующая формула является истинной» ввести условие форматирования. Затем, с помощью кнопки «Формат…» выбрать способ подсветки значения.
Продолжить чтение »