Всем добрый день! Неудачно вчера выключил компьютер после чего сломался Personal.xlsb, некоторые макросы, выведенные на кнопки работают на одном очень сильно зависают. Но самая большая проблема - нет возможности редактировать код в модулях, они попросту не открываются, не экспортируются, не удаляются.
Перепробовал все что можно - перезагружал пк всякими способами, запускал excel в безопасном режиме, убирал из папки файл с макросами, создавал новый - он работает безупречно.
Что еще можно сделать и как можно сохранить скрипты из поломанного файла?
Доброго времени суток, столкнулся с трудностями, код не видит файл с именем "ПРАЙС.XLS", когда пытаешься найти правильное имя, он выдает "ПРАИ?С.XLS ". Судя из этой информации он некорректно считывает имя файла, при этом если его перезаписать, не изменяя, vba его читает корректно, в чем может быть проблема?
Ознакомился с этой статьей и этой, вторую использовал для того чтобы понять как vba видит название файла.
Файл регулярно скачивается через код и обрабатывается дальше, но на этапе взаимодействия с файлом перестает его видеть.
Дмитрий(The_Prist) Щербаков, Возникает проблема иногда, этот код разархивирует файл, но он появляется только после обновления папки, а дальнейший код его не видит и выдает ошибку, как это исправить?
Дмитрий(The_Prist) Щербаков, Так блин за дурака полного принимать меня не надо, читал определенную информацию. Да не все знаю.
Я ставил переменную вверх модуля option explicit и там она выдает ошибку, переменная используется в 20+ процедурах, в sub переместил и ошибку перестал выдавать
Код
Sub b()
Dim DownloadFolder As String
DownloadFolder = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
Debug.Print DownloadFolder
End Sub
Написал хороший код для разархивации файлов, для zip файлов подходит идеально, но вот rar не читает. Буду благодарен если кто объяснит как ему скормить архивы RAR
Код
Option Explicit
Sub UnRar()
Dim DownloadFolder As String
DowloadFolder = "C:\Users\Менеджер\Documents\"
Dim UnRar As New Shell32.Shell
UnRar.Namespace(DowloadFolder).CopyHere _
UnRar.Namespace(DowloadFolder & "Архив.zip").Items, 16
'Unrar.Namespace(DowloadFolder &"Архив.rar").Items, 16
End Sub
с другими файлами и сайтами разобрался как авторизоваться с помощью Selenium через webelements и методы FindelementsBy
Тут же выскакивает диалоговое окно (прикреплено в фото)
Как взаимодействовать с этим окном?
код такой:
Код
Option Explicit
Dim Ch As Selenium.ChromeDriver
Dim URL As String
Dim FindBy As New Selenium.By
Dim Login As String
Dim Password As String
Sub PA_Download()
On Error GoTo ErrorHandl
Set Ch = New Selenium.ChromeDriver
URL = "https://dealer.pasystem.ru/Ostatki_price.xlsx"
Login = "example"
Password = "12345678"
Ch.Start
Ch.Get URL
'на этом этапе выскакивает окно, с которым не могу взаимодействовать как с webelemnt
Exit Sub
ErrorHandl:
Debug.Print "Артикул " & Article & " не загружен. Изменилась ссылка или таблица"
End Sub
Public Function MyIFS(ParamArray args() As Variant) As Variant
On Error Resume Next
Dim i As Integer
'Debug.Print "Количество аргументов - " & UBound(args()) + 1
For i = 0 To UBound(args())
'Debug.Print " Аргумент" & i + 1 & ": " & args(i)
'Debug.Print " Аргумент" & i + 2&; ": " & args(i + 1)
If args(i) = True Or args(i) = 1 Then
MyIFS = args(i + 1)
'Debug.Print "На экране должно быть: " & args(i + 1)
Exit Function
End If
i = i + 1
Next i
On Error GoTo ErrHandl
ErrHandl:
MyIFS = CVErr(xlErrValue)
End Function
Вроде разобрался, формула ломалась, когда аргумент выдавал ошибку. Работает, но писец долго)
Есть подозрения что ЕСЛИМН встроенный ломается так же от ошибок в аргументах
Попробовал написать свою функцию подобную ЕСЛИМН, буду признателен если поможете оптимизировать/упростить код. Работает на простых вариантах с недлинным размером аргумента, в примере 1 не работает. Еще очень странно обновляется, если протянуть формулу до конца таблицы, везде пишет значение первой строки, если сохранить файл уже обновляет значения
Код
Public Function MyIFS(Condition_1 As Boolean, Value_1 As String, Optional Condition_2 As Boolean, Optional Value_2 As String, _
Optional Condition_3 As Boolean, Optional Value_3 As String, Optional Condition_4 As Boolean, Optional Value_4 As String, _
Optional Condition_5 As Boolean, Optional Value_5 As String, Optional Condition_6 As Boolean, Optional Value_6 As String, _
Optional Condition_7 As Boolean, Optional Value_7 As String, Optional Condition_8 As Boolean, Optional Value_8 As String, _
Optional Condition_9 As Boolean, Optional Value_9 As String, Optional Condition_10 As Boolean, Optional Value_10 As String, _
Optional Condition_11 As Boolean, Optional Value_11 As String, Optional Condition_12 As Boolean, Optional Value_12 As String, _
Optional Condition_13 As Boolean, Optional Value_13 As String, Optional Condition_14 As Boolean, Optional Value_14 As String, _
Optional Condition_15 As Boolean, Optional Value_15 As String, Optional Condition_16 As Boolean, Optional Value_16 As String, _
Optional Condition_17 As Boolean, Optional Value_17 As String, Optional Condition_18 As Boolean, Optional Value_18 As String, _
Optional Condition_19 As Boolean, Optional Value_19 As String, Optional Condition_20 As Boolean, Optional Value_20 As String) As String
On Error GoTo ErrHandl
Dim i As Integer
Dim Conditions(1 To 20) As Boolean
Conditions(1) = Condition_1
Conditions(2) = Condition_2
Conditions(3) = Condition_3
Conditions(4) = Condition_4
Conditions(5) = Condition_5
Conditions(6) = Condition_6
Conditions(7) = Condition_7
Conditions(8) = Condition_8
Conditions(9) = Condition_9
Conditions(10) = Condition_10
Conditions(11) = Condition_11
Conditions(12) = Condition_12
Conditions(13) = Condition_13
Conditions(14) = Condition_14
Conditions(15) = Condition_15
Conditions(16) = Condition_16
Conditions(17) = Condition_17
Conditions(18) = Condition_18
Conditions(19) = Condition_19
Conditions(20) = Condition_20
Dim Values(1 To 20) As String
Values(1) = Value_1
Values(2) = Value_2
Values(3) = Value_3
Values(4) = Value_4
Values(5) = Value_5
Values(6) = Value_6
Values(7) = Value_7
Values(8) = Value_8
Values(9) = Value_9
Values(10) = Value_10
Values(11) = Value_11
Values(12) = Value_12
Values(13) = Value_13
Values(14) = Value_14
Values(15) = Value_15
Values(16) = Value_16
Values(17) = Value_17
Values(18) = Value_18
Values(19) = Value_19
Values(20) = Value_20
For i = 1 To 20
If Conditions(i) = True Then
MyIFS = Values(i)
Debug.Print ActiveCell.Address
Debug.Print i & ". " & Values(i)
Exit Function
End If
Next i
ErrHandl:
MyIFS = CVErr(xlErrValue)
End Function
UPD: прикрепил файл, где немного изменил формулы (вставил динамический диапазон) - так тоже выдает ошибки? Еще заметил, что ошибки у вас в тех формулах, которые ссылались на ячейки с формулами. Точно такая же формула в столбце D ошибок не выдает.
Очень странно. У всех все работает норм у меня выдает ошибки... Я перепробовал несколько сборок офиса, от чего ситуация не поменялась. Почему в этом файле все работает тоже не понимаю, все формулы те же, лишь ссылки другие. При этом при повторном запуске, выдал ошибку в ячейках в которых проверял формулу
Уже неделю ломаю голову над тем чтобы перенести обработку прайсов из Google Sheets в Excel чтобы наименование выглядело приемлемым и стандартизированным. Писал формулы пол года назад и делал это в Google Таблицах, потому что там работали регулярки, сейчас активно стал изучать Excel смог написать функции RegExpExtract и Replace и самой непреодолимой задачей для меня стала формула ЕСЛИМН (в Google Таблицах - IFS). Проблема в том, что в первоисточнике проблем не возникало, но при импортировании формул в Excel, функция ЕСЛИМН периодически стала выдавать ошибку #ЗНАЧ. Я перелопатил все что можно, офф сайт Microsoft не работает, единственное что смог узнать, так это то что формула не вывозит большое количество вложений функций ЕСЛИ, ЕСЛИОШИБКА и тп, но даже без них она порой выдает ошибки из-за непонятный мне причин. Пример в прикрепленном файле (ошибка происходит в крайних правых ячейках). Таких прайсов у меня штук 20 и все разные, у некоторых формула IFS набирает до 40 параметров, вторым файлом приложил еще один пример. Не хотелось бы их заново переписывать под Excel. Если проследить формулу по вычислению, то можно заметить что все ее отдельные части вычисляются нормально, но общий результат выдает #ЗНАЧ...
Необходимо чтобы формула работала так же гладко как и в Google. На основе ее делаю макрос который скачивает прайсы обрабатывает их и подготавливает для загрузки в 1С.
Ваши предложения? Я думаю тут либо что-то с формулой сделать чтобы она заработала, либо написать свою IFS для Excel, или же решить этот вопрос через код VBA ( как я понял так быстрее, что не мало важно при наличии гигантских прайсов.
Уже неделю ломаю голову над тем чтобы перенести обработку прайсов из Google Sheets в Excel чтобы наименование выглядело приемлемым и стандартизированным. Писал формулы пол года назад и делал это в Google Таблицах, потому что там работали регулярки, сейчас активно стал изучать Excel смог написать функции RegExpExtract и Replace и самой непреодолимой задачей для меня стала формула ЕСЛИМН (в Google Таблицах - IFS). Проблема в том, что в первоисточнике проблем не возникало, но при импортировании формул в Excel, функция ЕСЛИМН периодически стала выдавать ошибку #ЗНАЧ. Я перелопатил все что можно, офф сайт Microsoft не работает, единственное что смог узнать, так это то что формула не вывозит большое количество вложений функций ЕСЛИ, ЕСЛИОШИБКА и тп, но даже без них она порой выдает ошибки из-за непонятный мне причин. Пример в прикрепленном файле (ошибка происходит в крайних правых ячейках). Таких прайсов у меня штук 20 и все разные, у некоторых формула IFS набирает до 40 параметров, вторым файлом приложил еще один пример. Не хотелось бы их заново переписывать под Excel. Если проследить формулу по вычислению, то можно заметить что все ее отдельные части вычисляются нормально, но общий результат выдает #ЗНАЧ...
Хотелось бы чтобы формула работала так же гладко как и в Google. На основе ее делаю макрос который скачивает прайсы обрабатывает их и подготавливает для загрузки в 1С.
Ваши предложения? Я думаю тут либо что-то с формулой сделать чтобы она заработала, либо написать свою IFS для Excel, или же решить этот вопрос через код VBA ( как я понял так быстрее, что не мало важно при наличии гигантских прайсов.