есть 4 числа. Какие-то математические действия с первыми 3 из них приводят к получению 4го числа. 1е и 2е число во всех наборах одинаковые, а 3е меняется. есть несколько таких наборов по 4 числа и в каждом из них одинаковая, неизвестная мне зависимость. есть ли способ с помощью экселя, имея большое количество таких наборов, определить эту зависимость?
в файле примера в каждом столбце первые 3 числа (зелёные ячейки), 4е число - жёлтые ячейки.
подскажите возможно ли получить значение куки из уже залогиненного в хроме сайта?
авторизоваться силами vba не вариант, т.к. происходит через госуслуги, очень заморочено. По итогу авторизации выдаётся токен. его значение можно легко увидеть по ссылке вида chrome://settings/cookies/detail?site=адрес_сайта. Можно было бы спарсить открывающуюся по этой ссылке страницу, но я не знаю как её открыть средствами VBA. с помощью WinHttp.WinHttpRequest.5.1 не получается. не получается открыть и таким образом - CreateObject("WScript.Shell").Run "chrome://settings/cookies/detail?site=адрес_сайта" можно было бы вытащить эту куку из файла с куками расположенного по C:\Users\username\AppData\Local\Google\Chrome\username\Default\cookies, но там всё толи зашифровано, толи я с кодировкой разобраться не могу. в общем тоже не получается.
getAllResponseHeaders() не помогает, т.к. нет залогинивания, да и в респонсе нет куков. они только в реквесте
для отправки файла с помощью post запроса перевожу его в текстовый вид функцией:
Код
Private Function File_Reader(ByVal file_path As String)
With CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Open
.LoadFromFile (file_path)
File_Reader = .ReadText()
End With
End Function
sub отправить_почту()
sUsername = "test@gmail.com" ' Учетная запись на сервере
sPass = "YCxAHX71" ' Пароль к почтовому аккаунту
sSubject = "тема письма"
sTo = "test1@gmail.com"
sFrom = "test@gmail.com"
sBody = "Здравствуйте"
sAttachment = ""
BCC = "test2@gmail.com"
SMTPServer = "smtp.gmail.com"
Call отправка_email(SMTPServer, sUsername, sPass, sTo, sFrom, sSubject, sBody, vFolders, BCC)
end sub
Sub отправка_email(SMTPServer, sUsername, sPass, sTo, sFrom, sSubject, sBody, sAttachment, Optional BCC)'отправляем почту
'======================
If sSubject = "" Then Exit Sub
If sTo = "" Then Exit Sub
sTo = WorksheetFunction.Trim(sTo)
Const CDO_Cnf = "http://schemas.microsoft.com/cdo/configuration/"
Dim oCDOCnf As Object, oCDOMsg As Object
' Dim SMTPserver As String, sUsername As String, sPass As String, sMsg As String
' Dim sTo As String, sFrom As String, sSubject As String, sBody As String, sAttachment As String
' On Error Resume Next
'sFrom - как правило совпадает с sUsername
If Len(SMTPServer) = 0 Then MsgBox "Не указан SMTP сервер", vbInformation, "www.Excel-VBA.ru": Exit Sub
If Len(sUsername) = 0 Then MsgBox "Не указана учетная запись", vbInformation, "www.Excel-VBA.ru": Exit Sub
If Len(sPass) = 0 Then MsgBox "Не указан пароль", vbInformation, "www.Excel-VBA.ru": Exit Sub
'Проверка наличия файла по указанному пути
' If Dir(sAttachment, vbDirectory) = "" Then sAttachment = ""
'Назначаем конфигурацию CDO
Set oCDOCnf = CreateObject("CDO.Configuration")
With oCDOCnf.Fields
.Item(CDO_Cnf & "sendusing") = 2
.Item(CDO_Cnf & "smtpauthenticate") = 1
.Item(CDO_Cnf & "smtpserver") = SMTPServer
'если необходимо указать SSL
.Item(CDO_Cnf & "smtpserverport") = 465 'для Яндекса и Gmail 465
.Item(CDO_Cnf & "smtpusessl") = True
'=====================================
.Item(CDO_Cnf & "sendusername") = sUsername
.Item(CDO_Cnf & "sendpassword") = sPass
.Update
End With
'Создаем сообщение
Set oCDOMsg = CreateObject("CDO.Message")
With oCDOMsg
Set .Configuration = oCDOCnf
.BodyPart.Charset = "Windows-1251"
.From = sFrom
.To = sTo
.BCC = BCC
.Subject = sSubject
.TextBody = sBody
If IsArray(sAttachment) Then
For n = 0 To UBound(sAttachment)
.AddAttachment sAttachment(n)
Next
ElseIf Len(sAttachment) > 0 Then
.AddAttachment sAttachment
End If
' If Len(sAttachment) > 0 Then .AddAttachment sAttachment
'On Error Resume Next
.Send
End With
Debug.Print Err.Number
' MsgBox Err.Number
' Select Case Err.Number
' Case -2147220973: sMsg = "Нет доступа к Интернет"
' Case -2147220975: sMsg = "Отказ сервера SMTP"
' Case 0: sMsg = "Письмо отправлено"
' Case Else: sMsg = "Ошибка номер: " & Err.Number & vbNewLine & "Описание ошибки: " & Err.Description
' End Select
On Error GoTo 0
' MsgBox sMsg, vbInformation
Set oCDOMsg = Nothing: Set oCDOCnf = Nothing
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.DisplayAlerts = True
ActiveSheet.EnableCalculation = True
Application.ScreenUpdating = True
End Sub
после его срабатывания эксель начинает вести себя странно - экран как будто заморожен - кликаешь на ячейку - ничего не происходит (даже не выделяется). делаешь двойной (или даже тройной) клик - ячейка становится редактируемся, вводишь данные, нажимаешь энтер - визуально данные не обновляются. помогает перещёлкивание листов с одного на другой.
также, например, на выбрать мышкой цвет заливки - выпадающее окно с разными цветами появляется, но ничего не выбрать мышкой. Однако tab-ом выбрать удаётся. с остальными меню примерно такая же история. в общем всё вроде работает но очень мучительно. помогает только закрытие файла и повторное открытие. как вы видите я уже добавил в конец макроса всё что знал про то, что может отключать нормальную работу экселя, но это не помогло.
также при сохранении файла появляется окно "файл сохраняется" и само больше не исчезает. Заставить его исчезнуть можно только нажав "отмена". Файл при этом на самом деле сохраняется, но ощущение неопределённости очень неприятное)
в интернетах нашёл человека с такой же проблемой вот тут и он её решил исключением из кода msgbox. Мне это не помогло
у меня есть формула, которая с помощью суммпроизв сравнивает значения массивов (столбцов). для каждого массива задано своё условие. в предпоследнем действии расчёта получаются 3 массива в последнем действии они перемножаются и складываются. Мне же нужно их только перемножить, получив массив из 3х значений {20;0;21}, и последним действием мне нужно получить максимальное значение из этих трёх (21)
похоже что я не к месту использую суммпроизв и нужно использовать какую-то другую функцию.
есть ячейки где применён апостроф " ' " для насильного преобразования числа в текст. При этом формат ячейки "Общий". Можно ли как-нибудь с помощью VBA определить такие ячейки?
пытался искать апостроф с помощь InStr - не находит. .NumberFormat - как уже писал выше везде одинаковый Gentral IsNumeric говорит что в таких ячейках числа
мне необходимо автоматизировать действия на сайте. одним из этих действий является выгрузка файла с диска на сайт через форму на сайте. вот сайт вот как я делаю:
Код
Function GetIE() As Object
For Each GetIE In CreateObject("Shell.Application").Windows() 'Loop to find
If (Not GetIE Is Nothing) And GetIE.name = "Internet Explorer" Then Exit For 'Found!
Next GetIE
If GetIE Is Nothing Then Exit Function
GetIE.Visible = True 'Make IE window visible
End Function
Sub upload()
Dim myShell As Object
Dim ie As Object
Set ie = GetIE
ie.Navigate ("https://xmltools.corefiling.com/miniSchemaValidate/index.jsp")
Do: DoEvents: Loop While ie.Busy Or ie.ReadyState <> 4
Set ElementCol = .getElementsByTagName("input")
For Each btnInput In ElementCol
If btnInput.name = "schema" Then
'btnInput.Click
btnInput.Value = "C:\Users\file.txt"
Exit For
End If
Next btnInput
.....
end sub
проблема в строке
Код
btnInput.Value = "C:\Users\file.txt"
она не присваивае т значение. т.е. не работает.
если я вручную тыкаю в форму и выбираю файл в открывшемся диалоговом окне, то после этого debug.print btnInput.Value показывает путь к файлу, но вот программно присвоить путь не получается.
помогите пожалуйста написать формулу. В ячейке, при определённом условии, появляется "да". Нужно чтобы это "да" выглядело как "да*" использую такую формулу
Function Extract_Value_ADO(sPath As String, sFileName As String, sShName_источник As String, sShName_цель As String, sRng As String) Dim objADO_Con As Object, objRS As Object
Dim sFullFileName As String, sADORng As String
sFullFileName = sPath & sFileName
With CreateObject("ADODB.Connection")
'подключаемся к файлу
.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=1;DBQ=" & sFullFileName & ";"
'извлекаем записи из указанного диапазона в objRS
Set objRS = .Execute("select * FROM [" & sShName_источник & "$" & sADORng & "]")
'выгружаем извлеченные данные на активный лист, начиная с ячейки А1
ActiveWorkbook.Sheets(sShName_цель).Cells(1, 1).CopyFromRecordset objRS
' Extract_Value_ADO = objRS.Fields(0).Value
End With
Set objRS = Nothing
End Function
пример с проблемами прикрепляю проблемы такие: 1. копируется диапазон начиная со второй строки. несмотря на то что указан диапазон "A1:af10000" 2. не могу понять как он задаёт типы данных. в каких-то случаях копирует как текст, в каких-то как число. из-за этого 2 проблемы - в столбцах где копирует как числа не отображается текст, в столбцах где копирует как текст числа сохраняются как текст. Например весь стобец "F" копируется как текст, а столбец "E" сохраняется как числа, и в нём исчезают все текстовые значения, например прочерки.
хотелось бы чтобы он просто копировал содержимое диапазона в том же формате и не выдумывал...
может есть у кого-нибудь макрос который выполняет проверку соответствия xml файла xsd-схеме? у меня xml формируется макросом и потом я его проверяю в онлайн приложении...не очень-то это удобно.
подскажите, существует ли способ сделать из прикреплённого примера нормальную таблицу?
это кусок действующего нормативного документа, содержимое которого кочует из редакции в редакцию, видимо, со времён когда его ещё на печатной машинке набирали
можно ли очень полезную пользовательскую функцию Substring написать формулой с штатными функциями без VBA?
спасибо
Код
Function Substring1(текст, разделитель, n) As String
Dim x As Variant
x = Split(текст, разделитель)
If n > 0 And n - 1 <= UBound(x) Then
Substring1 = x(n - 1)
Else
Substring1 = ""
End If
End Function
Добрый день! подскажите пожалуйста можно ли прописать формат ячейки так, чтобы при вводе числа к нему дописывалось "ч.", при этом чтобы при вводе дробного числа оно указывалось до десятых, а при вводе целого числа дробная часть вообще не отображалась
при вводе "1,5" отобразилось "1,5ч." при вводе "2" отобразилось "2ч." пробовал как-то так: 0,#"ч." - не получилось. оставляет "," после целого числа
ps примерно представляю как это сделать с помощью условного форматирования, но хочется именно через формат ячейки
Добрый день! подскажите пожалуйста как обойти ограничение элемента управления "счётчик" на минимальный шаг изменения 1? мне нужно сделать счётчик секунд в ячейке, а по-умолчанию такой счётчик начинает "отматывать" дни подозреваю что таким вопросом уже кто-то до меня точно задавался, но не смог придумать успешную формулировку для поиска в гугле и тут, на форуме. и как пожелание - было бы круто, если бы была возможность настройки шага изменения в зависимости от продолжительности нажатия стрелки прокрутки - чем дольше жмёшь, тем больше шаг. спасибо.
Добрый день! помогите пожалуйста исправить макрос, делает вот что:
на листе есть ячейки в которых при определённых условиях формулой пишется "скрыть". Макрос перебирает все строки в рабочем диапазоне и проверяет их на скрытость:
Скрытый текст
------------ смотрит строку: если строка НЕ скрыта смотрит ЕСТЬ ли в ней ячейка с "скрыть" если в строке ЕСТЬ ячейка с "скрыть", то добавляет эту строку в диапазон для дальнейшего скрытия если в строке НЕТ ячейки с "скрыть", то идём дальше если строка СКРЫТА смотрит есть ли в ней ячейка с "скрыть" если в строке НЕТ ячейки с "скрыть", то добавляет эту строку в диапазон для дальнейшего РАСкрытия если в строке ЕСТЬ ячейка с "скрыть", то идём дальше смотрит все остальные строки скрывает накопленный диапазон со строками подлежащими скрытию раскрывает накопленный диапазон со строками подлежащими раскрытию ------------
макрос неправильно ищет (или не ищет вообще) в скрытых строках заранее спасибо за помощь!
Код
Sub hide_unhide()
Dim ra As Range, unhidera As Range, hidera As Range
Application.ScreenUpdating = False
ТекстДляСкрытия = "скрыть"
For Each ra In ActiveSheet.UsedRange.Rows
'MsgBox ra.Row
If ra.EntireRow.Hidden = False Then 'если НЕскрыто, а "скрыть" ЕСТЬ
If Not ra.Find(ТекстДляСкрытия, , xlValues, xlPart) Is Nothing Then
If hidera Is Nothing Then Set hidera = ra Else Set hidera = Union(hidera, ra)
End If
Else 'если СКРЫТО, а "скрыть" НЕТ
If ra.Find(ТекстДляСкрытия, , LookIn:=xlFormulas) Is Nothing Then
If unhidera Is Nothing Then Set unhidera = ra Else Set unhidera = Union(unhidera, ra)
End If
End If
Next
If Not hidera Is Nothing Then hidera.EntireRow.Hidden = True
If Not unhidera Is Nothing Then unhidera.EntireRow.Hidden = False
Application.ScreenUpdating = True
ActiveSheet.Calculate
End Sub
Добрый день! у меня есть макрос который скрывает/раскрывает столбец листа с визуализацией..если можно так сказать - скрытие происходит посредством последовательного уменьшения ширины столбца, а раскрытие - посредством последовательного увеличения. проблема в том, что на когда я его делал он работал на 2х компах одинаково нормально (офис 2010 и 2013), а сегодня заметил что на одном работает (на 2010), а на другом пропала "визуализация". Скрытие/раскрытие происходит, но как будто Application.ScreenUpdating = false, хотя это не так... Подскажите пожалуйста в чём может быть причина?
у меня есть формула которая ищет в тексте кусочки текста приведённые в отдельной базе (диапазоне ячеек). Результат формулы "истина" или "ложь". Можно ли как-то определить координаты ячейки в базе "кусочков"? В идеале нужны даже не её координаты, а значение ячейки находящейся в той же строке, в столбце А.
путано наверное объяснил....прикрепляю пример заранее спасибо! ps искомый кусочек может находиться в любой части текста
хочу сделать вот что - переместить файл Excel.officeUI в дропбокс и сделать на него симлинк (или хардлинк). Повторить это процедуру на всех рабочих компах и получить один файл с настройками для всех офисов на компах. Но как я понял, хардлинки с офисом не дружат и разрываются при первом же сохранении файла. Симлинки вроде бы тоже, но если делать симлинк на всю папку то всё работает. Переносить целиком папку AppData\Local\Microsoft\Office не хочется. скажите есть ли способ как-то подружить сим (или хард) линки с экселем?
Добрый день! такой вопрос - если в ПОИСКПОЗ в искомое значение вписать "*?", то он будет искать любое всё не равное "". Что нужно вписать чтобы он искал всё не равное "-"?
опишу проблему: есть надстройка которая запускается автоматически при открытии определённого файла. В надстройке хранятся макросы и пользовательские функции. Чтобы повесить макрос на кнопку в этом файле достаточно было вписать имя макроса (без указания пути к нему). В один момент, при открытии файла (и всех его предыдущих копий) при нажатии ранее работающих кнопок пишет что по указанному пути на найден макрос (хотя надстройка установлена и работает как и раньше) и на кнопке прописан полный путь к макросу. такая же ерунда со всеми пользовательскими функциями. Чтобы всё заработало приходится для каждой кнопки переназначать макрос убирая полный путь и оставляя только имя макроса.
подскажите пожалуйста после чего могло такое произойти? и как вернуть всё не перетыкивая каждую кнопку ((
кстати такая же ерунда произошла и с кнопками в панели быстрого доступа, на которые были повешены макросы из этой надстройки
Необходимо связать лист экселя с базой данных и сделать возможность заполнения его при помощи выпадающих списков формирующихся по разным критериям из базы данных.
Имеется купленная программа на базе ворда. Необходимо сделать аналог на базе экселя.
По завершении работы будет необходимо потратить 2-3 часа (возможно меньше) на объяснение работы программы для дальнейшей самостоятельной корректировки и дополнений. Эта задача выполнима - я далеко не ас в программировании , но и не совсем дуб.
Бюджет 5000р, необходима личная встреча с исполнителем в СПб. Работа без предоплаты, оплата по завершении.
в 2010м экселе был такой прямоугольничек над стрелками прокрутки страницы, потянув за который можно было разделить экран. В 2013м такого прямоугольничка нет. Кто-нибудь знает можно ли его как-нибудь вернуть?
Нужна формула которая найдёт уникальное значение на листе и отобразит значение ячейки в найденной строке и первом столбце...в примере наверное понятнее