хитро сломанный файл, уменьшилось количество доступных строк
Пользователь
Сообщений: Регистрация: 31.12.2012
11.12.2024 00:02:03
Hugo, спасибо, точно! но похоже что проблема была не в этом помогите пожалуйста ещё понять что заставляет отображаться все миллион строк и как их удалить?
хитро сломанный файл, уменьшилось количество доступных строк
Пользователь
Сообщений: Регистрация: 31.12.2012
10.12.2024 23:22:01
добрый день
получил от коллег для возможного ремонта эксель файл. В файле перестали нажиматься кнопки макросов. Визуально то пропадали то появлялись. При нажатии вели себя как будто в режиме конструктора, а если нажимались то не отжимались. Также на листе правая полоса прокрутки прокручивалась до последней возможной строки (миллион с чем-то). Удаление пустых строк с переоткрытием файла не помогало от них избавиться. Методом исключения начал искать проблему. Поудалял все макросы, все объекты с листа, обычные и условные форматирования, данные ячеек, связи. Даже пересохранил в другой формат (был xlsm). В итоге остался пустой файл с одним листом и максимальным количеством строк. И вот после удаления первого столбца получился лист в котором 1963 строки. Впервые в жизни такое вижу. Другие листы создаются нормальными. Подскажите что его заставляет быть таким и как вернуть лист в норму? Понимание необходимо для ремонта изначального файла (там много всего на листе и переносить вручную на вновь созданный лист затруднительно)
Экспорт из Excel в XML с помощью макроса на VBA, Выгрузка в XML
Пользователь
Сообщений: Регистрация: 31.12.2012
27.10.2022 15:53:09
Андрей VG, за Процедуру для придания XML читабельного вида (с отступами) отдельное спасибо!
Скрытый текст
Код
Sub transformXML(ByRef xml As Variant)
'Cоздание объекта XSL
Set xsl = CreateObject("MSXML2.DOMDocument")
'Загрузка XSL из строки (не требует наличия отдельного XSL-файла)
xsl.LoadXML ("<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" & vbCrLf & _
"<xsl:output method='xml' version='1.0' encoding='windows-1251' indent='yes'/>" & vbCrLf & _
"<xsl:template match='@*|node()'>" & vbCrLf & _
"<xsl:copy>" & vbCrLf & _
"<xsl:apply-templates select='@*|node()' />" & vbCrLf & _
"</xsl:copy>" & vbCrLf & _
"</xsl:template>" & vbCrLf & _
"</xsl:stylesheet>")
'Выполнение преобразования
xml.transformNodeToObject xsl, xml
End Sub
ничего непонятно, но работает прекрасно - магия)
загрузка файла на сайт через форму с помощью VBA
Пользователь
Сообщений: Регистрация: 31.12.2012
28.01.2022 16:54:05
боюсь что офтоп..но и всё же
Jungl, благодаря вашему коду, спустя всего-то каких-то 2 года ) я разобрался с процессом валидации xml на сайте
Подгонка одного значения из четырех для получения результата
Пользователь
Сообщений: Регистрация: 31.12.2012
30.06.2021 21:26:33
buchlotnik искренне спасибо Вам за то что вникли в вопрос. простите за резковатый ответ. согласен что не очень корректно изначально сформулировал вопрос, но если бы описал реальный пример, то вообще запутался бы в объяснении. понял что универсального подхода нет. пошёл изучать ЛИНЕЙН(). ещё раз спасибо
Подгонка одного значения из четырех для получения результата
Пользователь
Сообщений: Регистрация: 31.12.2012
30.06.2021 18:35:46
пример на то и пример. зависимость в нём специально тупая и очевидная.
у меня задача не определить зависимость в этом примере (я её сам придумал), а найти способ определять эту зависимость с помощью экселя.
как вы определили что в моём примере зависимость "сумма первых двух минус третье"? вот мне нужно чтобы это эксель мне определил.
Изменено: - 30.06.2021 18:38:25
Подгонка одного значения из четырех для получения результата
Пользователь
Сообщений: Регистрация: 31.12.2012
29.06.2021 22:42:57
есть 4 числа. Какие-то математические действия с первыми 3 из них приводят к получению 4го числа. 1е и 2е число во всех наборах одинаковые, а 3е меняется. есть несколько таких наборов по 4 числа и в каждом из них одинаковая, неизвестная мне зависимость. есть ли способ с помощью экселя, имея большое количество таких наборов, определить эту зависимость?
в файле примера в каждом столбце первые 3 числа (зелёные ячейки), 4е число - жёлтые ячейки.
Изменено: - 30.06.2021 00:55:03
Проверка даты с Интернет ресурса (с помощью VBA)
Пользователь
Сообщений: Регистрация: 31.12.2012
12.05.2021 22:01:30
не побоюсь поднять некропост... вот ещё сайт. прям самое точное время в стране) точнее нЕкуда
Получение куков из уже залогиненного в Хроме сайта
Пользователь
Сообщений: Регистрация: 31.12.2012
02.03.2021 15:34:47
мне нужно чтобы макрос везде мог работать, без доустановки специфических плагинов
Получение куков из уже залогиненного в Хроме сайта
метод открытия сайта в хроме - CreateObject("WScript.Shell").Run "адрес_сайта" работает с сайтами и не работает с адресом "chrome://settings/cookies/detail?site=адрес_сайта" буду очень признателен если подскажете как средствами VBA открыть такого вида адрес
Получение куков из уже залогиненного в Хроме сайта
Пользователь
Сообщений: Регистрация: 31.12.2012
01.03.2021 16:36:33
это бесспорно..но я в питон вообще не умею. нужно учиться. это тоже очевидно..
Получение куков из уже залогиненного в Хроме сайта
Пользователь
Сообщений: Регистрация: 31.12.2012
01.03.2021 15:24:13
спасибо за ответ!
по пути C:\Users\имя_пользователя\AppData\Local\Microsoft\Windows\INetCookies у меня нет куков. там только лежит файл "deprecated.cookie" весом 1 кб датированный концом прошлого года в котором одна запись - "Cookies are no longer stored in files. Please use Internet*Cookie* APIs to access cookies."
актуальные куки у меня лежат по пути C:\Users\имя_пользователя\AppData\Local\Google\Chrome\username\Default\ там файл без расширения "Cookies"
подставляю его в вашу функцию. содержимое считывается но на этапе разделения a = Split(sContent, vbLf & "*" & vbLf) массив не набивается. не видит он такого разделителя.
во вложении кусок файла с нужной мне кукой "session" в непонятной мне кодировке. Есть ли возможность перевести её на человеческий язык (средствами VBA)?
Изменено: - 01.03.2021 15:51:25
Получение куков из уже залогиненного в Хроме сайта
Пользователь
Сообщений: Регистрация: 31.12.2012
26.02.2021 23:38:20
Добрый день!
подскажите возможно ли получить значение куки из уже залогиненного в хроме сайта?
авторизоваться силами 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() не помогает, т.к. нет залогинивания, да и в респонсе нет куков. они только в реквесте
Кодировка бинарного вида файла
Пользователь
Сообщений: Регистрация: 31.12.2012
28.01.2021 14:13:52
огромное спасибо за все советы! Попробую разобраться с Curl
Кодировка бинарного вида файла
Пользователь
Сообщений: Регистрация: 31.12.2012
27.01.2021 20:56:57
да, там multipart/form-data запрос из трёх частей - 2 пдф и строка json. с json вроде как проблем не было. сервер ожидает увидеть запрос такого вида:
тут текст файла diplom.pdf ------WebKitFormBoundaryOtMjnxAQ1j0yc83f Content-Disposition: form-data; name="education-0-document"; filename="tk.pdf" Content-Type: application/pdf
тут текст файла tk.pdf ------WebKitFormBoundaryOtMjnxAQ1j0yc83f Content-Disposition: form-data; name="json"
тут строка json ------WebKitFormBoundaryOtMjnxAQ1j0yc83f--
с заголовками вроде бы тоже всё понятно. другие запросы на этот сервер, состоящие только из json, отправляются нормально может я сначала неправильно сформулировал вопрос. Я решил что пдф файл разложенный на текст и есть "бинарный вид файла", текст которого мне нужно вставить в запрос
если важно - ответ сервера в норме такой - "data:Object { status: "success", errors: [] }"
Кодировка бинарного вида файла
Пользователь
Сообщений: Регистрация: 31.12.2012
27.01.2021 19:18:04
Спасибо вам за помощь!
все ваши замечания применил. кажется стало более похоже, но отправка всё равно не удаётся во вложении файл с макросом
ваш макрос посмотрел - у меня вроде похоже
Кодировка бинарного вида файла
Пользователь
Сообщений: Регистрация: 31.12.2012
27.01.2021 16:46:51
честно говоря, получается что эксель файла-то и нет. я пытаюсь с помощью VBA отправить POST запрос с прикреплённым pdf файлом.
я преобразовываю файл в текст функцией указанной в моём первом посте. Открываю в блокноте, вижу то что на скриншоте. Смотрю в браузере, когда делаю запрос средствами браузера, и вижу похожее, но немного другое (на втором скриншоте) Думаю проблема в кодировке. Вычитал что для post запроса файл нужно конвертировать в base64, нашёл необходимую функцию, файл конвертируется в впечатляющий массив латинских букв и цифр, но такой запрос тоже не проходит
подскажите как пребразовать пдф в такой же текст, как в браузере?
Изменено: - 27.01.2021 17:01:59
Кодировка бинарного вида файла
Пользователь
Сообщений: Регистрация: 31.12.2012
27.01.2021 00:40:50
Добрый день!
для отправки файла с помощью 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
сюда копирую текст и он уже по-другому выглядит.. если я правильно понимаю дело в кодировке? как получить правильный вид, подскажите пожалуйста
во вложении тот файл
Изменено: - 27.01.2021 02:04:21
CDO.Message замораживает эксель, после использования CDO.Message эксель начинает вести себя странно до перезагрузки
Пользователь
Сообщений: Регистрация: 31.12.2012
23.07.2020 15:46:37
в общем..как обычно проблема была совсем не там)
я перемудрил с SetForegroundWindow Application.hWnd.
тему можно закрывать)
CDO.Message замораживает эксель, после использования CDO.Message эксель начинает вести себя странно до перезагрузки
Пользователь
Сообщений: Регистрация: 31.12.2012
23.07.2020 14:01:51
Добрый день!
для отправки писем использую вот такой макрос:
Скрытый текст
Код
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. Мне это не помогло
Изменено: - 23.07.2020 14:07:52
открыть файл из VBA без обновления связей, открыть файл из VBA без обновления связей
Пользователь
Сообщений: Регистрация: 31.12.2012
26.05.2020 18:01:29
он может быть открыт на другом компе.
я думал что без обновления связей файл будет быстрее открываться, но сейчас сравнил варианты Workbooks.Open с UpdateLinks:=0 и GetObject - никакой разницы (
так что вопрос снимаю..
открыть файл из VBA без обновления связей, открыть файл из VBA без обновления связей
Пользователь
Сообщений: Регистрация: 31.12.2012
26.05.2020 17:19:30
Получаю объект:
Код
Dim objDWE As Object
objDWE = GetObject(strPTmp & "TempPas.xls")
Этот объект содержит связи и начинает их обновлять. Как этот запрос перехватить и не обновлять связи?
Такое есть в методе Open но мне это не подходит т.к. он может быть уже открыт, его нужно только получить.
Изменено: - 26.05.2020 17:19:52
Найти максимальное значение, которое удовлетворяет двум условиям
Пользователь
Сообщений: Регистрация: 31.12.2012
01.07.2019 21:21:34
спасибо! не знал что можно и без ЕСЛИ обойтись!
Найти максимальное значение, которое удовлетворяет двум условиям
нужно было самому себе объяснить и всё стало понятно )
спасибо )
Изменено: - 01.07.2019 22:12:47
Найти максимальное значение, которое удовлетворяет двум условиям
Пользователь
Сообщений: Регистрация: 31.12.2012
01.07.2019 20:58:13
добрый день!
у меня есть формула, которая с помощью суммпроизв сравнивает значения массивов (столбцов). для каждого массива задано своё условие. в предпоследнем действии расчёта получаются 3 массива в последнем действии они перемножаются и складываются. Мне же нужно их только перемножить, получив массив из 3х значений {20;0;21}, и последним действием мне нужно получить максимальное значение из этих трёх (21)
похоже что я не к месту использую суммпроизв и нужно использовать какую-то другую функцию.
помогите пожалуйста.
Изменено: - 01.07.2019 21:10:11
формула массива в VBA, расчёт значения без использования ячейки листа
Пользователь
Сообщений: Регистрация: 31.12.2012
20.06.2019 22:17:49
я Вас понял, спасибо!
последний ответ чётко и понятно
Цитата
Sanja написал: Записать формулу массива с листа в код VBA напрямую, именно как формулу, не получится.
это и есть ответ на мой вопрос. если я буду пытаться сделать это по-другому (через открытие книги например) и у меня не будет это получаться и я не найду ответа на форме, то я создам новую тему с тем вопросом который у меня возникнет.
спасибо!
формула массива в VBA, расчёт значения без использования ячейки листа
Пользователь
Сообщений: Регистрация: 31.12.2012
20.06.2019 20:05:45
Цитата
Nordheim написал: скорее всего переменная будет определена как текстовая и на выходе вы получите не тот результат , который хотите
результат этой формулы массива в ячейке - число. двузначное число.
формула массива в VBA, расчёт значения без использования ячейки листа
Пользователь
Сообщений: Регистрация: 31.12.2012
20.06.2019 19:56:13
я читаю. пытаюсь разобраться. просто вроде как не отвечать на Ваши вопросы - некрасиво. а отвечаю - считаете что я сижу ничего не делаю и только f5 жму. я уже решил проблему (временно). формула рассчитывается в другом файле и результат извлекается из ячейки (их закрытого файла) с помощью ExecuteExcel4Macro.
по WorksheetFunction - я не смог разобраться как переписать мою формулу функциями vba. не хватает мне ума.
я возможно (абсолютно точно) иду к решению многих задач очень не рационально. но я дохожу до решения, получая рабочий инструмент который экономит много времени. мне практически безразлично то, что он затрачивает в 1млн раз больше ресурсов и время выполнения занимает не одну наносекунду, а одну секунду. главное что работает и удовлетворяет МОИМ потребностям а не потребностям тех кто будет смотреть как написан код и сокрушённо взмахивать руками.
при этом я крайне благодарен этому форуму. без него ничего бы небыло. но блин - очень раздражают уточняющие вопросы которые предлагают не решение проблемы, а сомневаются в наличии вопроса.
Изменено: - 20.06.2019 20:02:01
формула массива в VBA, расчёт значения без использования ячейки листа
Пользователь
Сообщений: Регистрация: 31.12.2012
20.06.2019 19:49:37
при всём огромном уважении ко всем кто отвечает - я не прошу Вас сейчас помогать мне решать прикладную задачу, предлагать оптимальные алгоритмы её решений и убеждать меня в том что я делаю что-то не рационально и не оптимально. я прошу Вас ответить ровно на тот вопрос который я задал.
формула массива в VBA, расчёт значения без использования ячейки листа