При этом ни один из фрагментов не выдал ошибки (типа папка создана, файл сохранен) Вопрос, где эта папка, где этот файл, и почему нет ошибки? Debug.Print= 0 dsfdfsfd 0
PS Не думаю, что критично, но работаю из Access. PPS C правильным путем работает правильно.
Мяв. Навеяно ответом Дмитрий(The_Prist) Щербаков в этой теме Имеем дату 22.05.2022 15:30:24 Пытаемся ее вывести в формате "ДД ММ мм сс" До формата "ДД ММ мм" все штатно, но стоит добавить секунды, Excel тут же превращает формат в "ДД мм мм сс", и вместо месяца показывает секунды минуты. Функция Format идет на поводу у Excel, что, правда не очень удивительно, ибо "mm" для минут не ее родной формат, хотя иногда и прокатывает, a вот Application.Text как-то умудряется их различить.
Код
Sub qq()
'[a1].NumberFormat = "ДД мм мм сс"
[e1] = Format([a1], [a1].NumberFormat) 'Return "22 05 05 24"
[f1] = Application.Text([a1].Value, [a1].NumberFormat) 'Return "22 05 30 24"
End Sub
Private Function DownloadFile(ByVal URL$, ByVal LocalPath$) As String
' Функция скачивает файл по ссылке URL$
' и сохраняет его под именем LocalPath$
Dim XMLHTTP, ADOStream, fileName
' On Error Resume Next: Kill LocalPath$
10 Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
'10 Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
20 XMLHTTP.Open "GET", Replace(URL$, "\", "/"), "False"
'C мозилой понимает язык русский IE не катит
30 XMLHTTP.setRequestHeader "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"
40 XMLHTTP.setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"
50 XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
60 XMLHTTP.send
' responseText
70 If XMLHTTP.statustext = "OK" Then
Debug.Print URL
80 Set ADOStream = CreateObject("ADODB.Stream")
90 ADOStream.Type = 1
100 ADOStream.Open
110 ADOStream.Write XMLHTTP.responseBody
120 ADOStream.SaveToFile LocalPath$, 2
130 ADOStream.Close: Set ADOStream = Nothing
140 DownloadFile = True
150 Else
'MsgBox "Не удаётся скачать файл " & XMLHTTP.statustext
160 End If
170 Set XMLHTTP = Nothing
End Function
вместо картинок стала грузить файлы с расширением jpg, но с таким содержимым <html><head><script>function set_cookie(){var now = new Date();var time = now.getTime();time += 19360000 * 1000;now.setTime(time);document.cookie='beget=begetok'+'; expires='+now.toGMTString()+'; path=/';}set_cookie();location.reload();;</script></head><body></body></html> Что за беда, и как забороть?
Приветствую. При экспорте файла в PDF макросом (ExportAsFixedFormat Type:=xlTypePDF) вылетает сообщение "Публикация". Application.DisplayAlerts не помогает. Как его забороть?
Приветствую! Сейчас озадачили. Файл создается на 1 компьютере, а печатается на другом. На том компе, на котором он создается последний разрыв страницы установлен правильно, а на том, где печатают он сдвинулся. Почему такое происходит? И как с этим бороться?
Мяв! Не так давно (возможно после обновления винды)появилось - при открытии файла даблкликом с какого-то перепуга создается новый экземпляр Excel. При этом он создается очень хитро - открытый файл есть, но в диспетчере его нет. В этом файле можно перемещаться по ячейкам, но лента не доступна. Причем это происходит как-то весьма выборочно. Т.е. один файл открывается нормально, а другой - так. Или во втором экземпляре вдруг оказывается копия открытого файла. Win 10, Excel 2010. Что такое могло приключиться?
Мяв. Знаю, что вопрос изъезжен, но все же. Пошел проторенным путем - создаю копию листа, удаляю объединение и далее по тексту. Но, столкнулся с непонятками. в то же время ширина объединенной ячейки, и столбца той же ширины не совпадают. Где собака порылась, и что же делать, как же быть?
Мяв. Вчера хотел поглядеть файлик из этой темы. И возникла проблема - Excel вылетает без каких либо сообщений. Методом научного тыка выяснил, что это происходит на строке
Код
Set objHTMLDoc = New HTMLDocument
При этом ссылка на библиотеку в наличии. Файлик C:\Windows\SysWOW64\mshtml.tlb тоже. Где собака порылась? Win10, Ofis2010/32
Мяв! Имеется код, выполняющий определенную обработку группы файлов в папке. По каким-то причинам этот код работает не стабильно, и может в любой момент выдать ошибку. Причем, после нажатия F5 он совершенно спокойно продолжает работать. Проблема в том, что сей код расположен в надстройке, проект которой закрыт паролем (обычным, без ухищрений). Запуск кода выполняет VBS скрипт. Ручками снимать пароль с надстройки перед запуском, и вновь ставить, как-то грустно. Тут есть фраза
Цитата
Я лично знаю два способа снять пароль программно: через метод SendKeys и использовании функций API. Т.к. второй способ довольно громоздкий и сложный для понимания - я в данной статье опишу лишь первый способ.
Но, применять глючный метод для лечения глючного кода, это только плодить глюки, а найти решение через API, к сожалению, не удалось. Люди добрые, поможите, чем можите..
Мяв! Имеется код для создания КП. Из книги с расчетами копируется 4 листа, удаляются лишние формулы, строки и т.д. При запуске этого кода в цикле, первая итерация отрабатывает без проблем, а вот далее код встает на строке 2260 При нажатии F5 код совершенно спокойно, и корректно продолжает выполняться. Пр нажатии F8 delRange из Nothing превращается в Range Адрес собран правильно, до этой строки аналогичные команды на других листах выполняются не однократно. Нужный лист активен. В какую сторону покопать? PS Код расположен в надстройке.
Код
Sub KomPred(wbold As Workbook, load_pic As String)
....
', vbc As VBComponent
190 Set wbKP = ActiveWorkbook
200 With wbKP
220 With .Worksheets(gsMAIN_NAME) '!!!
.....
280 End With
290 With .Worksheets(gsABOUT_NAME) ' О НАС
...
430 End With
440 With .Worksheets(gsSMETA_NAME) ' СМЕТА
большая куча кода, в том числе удаление строк и столбцов
2100 End With
2110 With .Worksheets(gsOPTION_NAME) ' ОПЦИИ
собираем адреса удаляемых строк
2250 s = Mid(s, 2)
на строке 2260 ошибка, диапазон Nothing
2260 Set delRange = .Range(s).EntireRow
2261 delRange.Delete
....
2330 End With
2340 With .Worksheets(gsMAIN_NAME)
...
2630 End With
2640 End With 'wbKP
...
End Sub
Мяв. Имеем нехитрую формулу =ВПР(I20;{0;5:13;3};2;1) При попытке вставить аргументы в Application.VLookup VBA вгоняется в краску, и работать отказывается. Сей массив в метод напрямую воткнуть можно? Утки (альтернатива) не интересно.
Мав! Клиент пожаловался на работу макроса. Однако, когда стали разбираться, выяснилось, что Excel 2019 при копировании листа полностью убивает правила УФ, содержащие ссылки на другой лист. Т.е. в новой книге создаем правило, и копируем этот лист в новую книгу. И все, правила нет. Как корова языком слизнула. В 2010 все нормально, в 2016 у клиента тоже было нормально, но ему захотелось 2019. И приплыли. Это глюк его сборки, или в 2019 корова поселилась? Или, может, где то в настройках поковыряться?
Мяв. Имеем файл xltm, который пересохраяется в том же формате. При сохранении вылетает системное сообщение. подробности в этой теме
При работе из кода надстройки DisplayAlerts подавляет это сообщение, и, соответственно удалось достигнуть массового пересохранения без тычков в кнопку.. Но осталась проблема, которая висит, оказывается, уже много лет (я в свое время решения не нашел, согласились на "пущай ругается", а после и вовсе забыл) - при обычном сохранении от этого сообщения избавится не удается. Такое ощущение, что DisplayAlerts в процедуре Workbook_BeforeSave просто игнорируется. Есть ли способ решить проблему?
Мяв! После перехода на 10 винду стали странно открываться окна Excel. Имеем 4 открытых файла, а при наведении мыша на значек Excel в трее видим только 2. увидеть остальные, чтобы переключиться между файлами, можно только выключив полноразмерное отображение. Уж дюже достало. Excel стоит все тот-же, 10/32. Где тут собака порылась?
Returns or sets the formula that the name refers to. The formula is in the language of the macro, and it's in R1C1-style notation, beginning with an equal sign. Read/write String.
Приветствую. Имеем чистый лист Excel с установленными параметрами - ориентация, поля. При переходе в режим разметки видим диапазон страницы. Вопрос - как кодом определить этот диапазон? Куда порыть? Итоговая задача - вставить картинки (1 картинка на 1 страницу).
Приветствую всех. Решил написать UDF с использованием ParamArray. Несколько неожиданно оказалось, что ParamArray является массивом массивов. Решил пошариться по этому вопросу. Нашарил использование цикла по массиву первого уровня. Раз это написано, то, наверное, кому-нибудь нужно. Но у меня не получилось создать массив первого уровня с числом элементов больше 1. Вопрос - в какой ситуации массив первого уровня может содержать более 1 элемента?
Код
Sub test()
[a1:b2] = Array(1, 2)
a = "2"
Debug.Print fTest(a)
a = Array(1, 2)
Debug.Print fTest(a)
a = [a1:b2].Value
Debug.Print fTest(a)
a = [a1:b2]
Debug.Print fTest(a)
End Sub
Function fTest(ParamArray args())
fTest = UBound(args)
' в какой ситуации этот цикл нужен?
For Each arg In args
Next
End Function
Мяв. Для работы кода требуется функционал Application.Trim, но Application.Trim использовать нельзя. Я написал аналог, но, мне кажется, что получилась пушка слишком крупного калибра. Может в закутках VBA найдется калибр поменьше?
Код
Sub test()
txt = " aa bb dd ee "
t = AccTrim(txt)
tt = Application.Trim(txt)
Debug.Print t
Debug.Print tt
End Sub
Function AccTrim(txt)
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "( {2,})"
AccTrim = Trim(.Replace(txt, " "))
End With
End Function
До обеда числовые данные грузились как Double, в листе отображались с запятой. Сейчас включил комп, а они в листе с точкой, и типом String. И это не один Listbox, а все. При этом, при загрузке через RowSourse, типы распределяются правильно.
В чем причина такого поведения? Как с этим бороться? (Имею в виду не преобразование типа при вычислениях, а при записи)
Мяв. Используя ссылки и бесценные советы Doober'a, поиск, и свою фантазию был сочинен код для обработки и сохранения файлов, открытых в отдельных процессах Excel. По результатам последнего тестирования, получаем следующее Win7/32 Of 2010/32 Не зависимо от числа файлов, открытых в родительском процессе, число вызовов приложения Set xl = ob.Application колеблется от 1 до общего количества процессов Excel.
Win7/64 of 2016/32 При наличии в родительском процессе 1 файла, количество вызовов 1 шт. При наличии в родительском процессе 2 и более файлов, вызов приложения попадает в бесконечный цикл. (в коде установлен счетчик для прерывания, очень тупой, на 500 итераций)
Интересует поведение данного кода в различных версиях Ofis, и различных ОС. А так же очень интересует более адекватный (?) способ прерывания (гусары, молчать! )
В первой части тестирования уже принимали участие голодный котяра, и обкурившийся ведмедь, за что им отдельная благодарность.
Общий инструктаж распаковать архив запустить TEST нажать кнопку 1 - 4 остальных файла откроются в новых процессах (эмуляция работы "сторонней программы") Нажать кнопку 2 - запустится рабочий макрос, который сохранит файлы, открытые в других процессах по заданным местам, и закроет все лишнее.
Мяв! Имеется макрос, работающий с файлами, открытыми в разных процессах. команда
Код
xl.Quit
закрывает приложение, но в диспетчере продолжают болтаться лишние процессы. Накропал код, который, вроде, позволяет убить лишние процессы.
Код
Sub Test()
Dim myPrC, myProg
Set myProg = GetObject("winmgmts:")
Set myPrC = myProg.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'EXCEL.exe'")
For Each x In myPrC
Debug.Print x.Name & " " & x.ProcessID
' If x.ProcessID <> 3624 Then x.Terminate
' If x.Name = "EXCEL.EXE" Then Stop
Next
End Sub
Однако, остался вопрос, как определить процесс, из которого запущен макрос?
Мяв! Гранд смета при пакетной выгрузке файлов в Excel выгружает их каждый в своем экземпляре Excel в виде новой книги (путь и расширение отсутствуют). При этом имена файлов имеют вид "очень длинное имя" (у каждого файла свое) Наброски кода для обработки всего этого безобразия имеются. Встал вопрос тестирования. кодом
Код
Sub tt()
Dim xl As New Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set wb = xl.Workbooks.Add
'wb.Name = "очень длинное имя"
End Sub
попытаться эмулировать выгрузку. Не работает однако. Создает файлы "Книга1", а дальше затык. Что делать несчастному коту?
Sub test1()
txt = "text123"
k1 = r1(txt)
k2 = r2(txt)
End Sub
Function r1$(txt)
Static objRegExp As Object
If objRegExp Is Nothing Then Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "[a-z]+"
r1 = objRegExp.Execute(txt)(0)
End Function
Function r2$(txt)
Static objRegExp As Object
If objRegExp Is Nothing Then Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "\d+"
r2 = objRegExp.Execute(txt)(0)
End Function
где каждая функция использует свой RegExp. После задумался, есть ли смысл переделать на код с одним RegExp?
Код
Sub test2()
Dim objRegExp As Object
txt = "text123"
Set objRegExp = CreateObject("VBScript.RegExp")
k1 = r11(objRegExp, txt)
k2 = r21(objRegExp, txt)
End Sub
Function r11$(objRegExp As Object, txt)
objRegExp.Pattern = "[a-z]+"
r11 = objRegExp.Execute(txt)(0)
End Function
Function r21$(objRegExp As Object, txt)
objRegExp.Pattern = "\d+"
r21 = objRegExp.Execute(txt)(0)
End Function