можно конечно так - но IE прорывается все равно в случайном порядке(хотя обложил с двух сторон) - при этом методе хотелось бы чисто сделать когда прорвется на ссылку IE (нейтрализовать его в трей чтоб не мелькал на экране - поэтому и вопрос в теме - добавить скрытие IE в трей) либо есть у кого вариант нейтрализовать IE по умолчанию (совет браузер по умолчанию не подходит - файл с макросом портабле на флешке и тд включение на разных компах получается)
Код
If ActiveCell.Value Like "*http://*" Or ActiveCell.Value Like "*https://*" Then
Shell "cmd.exe /c " & "Taskkill" & " " & "/f" & " " & "/im" & " " & "iexplore.exe"
Shell KMeleonPath & " " & url, vbNormalNoFocus
Shell "cmd.exe /c " & "Taskkill" & " " & "/f" & " " & "/im" & " " & "iexplore.exe"
Else
Exit Sub
End If
Как запускать IE свернутым в трей при открытии ячейки со ссылкой ?? (и потом открыть своим браузером - эта часть понятна) Пробую так не получается все равно IE вылазит на экран
Код
Shell "C:\Program Files (x86)\Internet Explorer\iexplore.exe" & ActiveCell.Value, vbMinimizedFocus 'при 64 разр винде в 2-х местах сидит IE минимизируем окно открытия
Shell "C:\Program Files\Internet Explorer\iexplore.exe" & ActiveCell.Value, vbMinimizedFocus
Shell """" & ThisWorkbook.Path & "\OperaPortable\Opera.exe""" & ActiveCell.Value, vbNormalFocus 'открываем своим браузером
Как сминимизировать окно IE при открытии ссылки из активной ячейки ? Так не получается - активизируем Microsoft Internet Controls в reference
Код
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
Через командную строку так нормально прокатывает как в синтаксе "C:\KMeleonPortable\k-meleon.exe" www.yahoo.com те глюков нет Почему тогда через VBA не получается ?
Вопрос специфичный - столкнулся с такой проблемой Для открытия в портабельном браузере посредством макроса все получается в портабельных Chrom,Firefox,Opera в директории файла Excel
Пишет "Некорректный адрес URL недействителен и не может быть загружен.Синтаксис указанного адреса некорректен. Проверьте адрес на наличие ошибок и попробуйте снова."
2)Если пробуем так без адреса все корректно браузер запускается с домашней страницей
Open to a specific URL A URL for example: "C:\Program Files\K-Meleon\k-meleon.exe" www.yahoo.com
Пробую явно прописать директорию - ошибки нет но требуемую страницу не открывает (просто открывается с домашней страницы) .При этом другие браузеры на основе Cromium нормально работают с этим кодом.
Код
X = Shell("""C:\KMeleonPortable\k-meleon.exe""" & """https://google.com""", vbNormalNoFocus)
ошибки дает код ругается на строки Set Rng1 = AutoFilter.Range.Columns(7).SpecialCells(12) 'устанавливаем Rng1 для фильтрованного диапазона в колонке 7 Закрыть ошибку On Error Resume Next ??
Код
Dim Rng1 As Range, Rng2 As Range
With ThisWorkbook.ActiveSheet
Set Rng1 = AutoFilter.Range.Columns(7).SpecialCells(12) 'устанавливаем Rng1 для фильтрованного диапазона в колонке 7
Set Rng2 = AutoFilter.Range.Columns(18).SpecialCells(12) 'устанавливаем Rng2 для фильтрованного диапазона в колонке 18
End With
так получается и как сейчас перебрать значения ячеек отфильтрованных на совпадение или несовпадение значений ?
Код
Dim Rng1 As Range, Rng2 As Range
'определяем диапазоны Rng1 и Rng2 для условий для видимых ячеек после автофильтра
With ThisWorkbook.ActiveSheet
Set Rng1 = AutoFilter.Range.Columns(7).SpecialCells(12) 'устанавливаем Rng1 для фильтрованного диапазона в колонке 7
Set Rng2 = AutoFilter.Range.Columns(18).SpecialCells(12) 'устанавливаем Rng2 для фильтрованного диапазона в колонке 18
If ActiveSheet.AutoFilter.Filters(7).On Or ActiveSheet.AutoFilter.Filters(18).On Then 'если автофильтр в 7 или 18 столбце включен'и как прописать эти условия ??
If "Значения отфильтрованных ячеек в диапазоне Rng1 одинаковы" And "Все Значения отфильтрованных ячеек в диапазоне Rng1 = "Test""
And "Значения отфильтрованных ячеек в диапазоне Rng2 одинаковы" And "Все Значения отфильтрованных ячеек в диапазоне Rng2 > 0" Then
'Условие1
End If
If "Значения отфильтрованных ячеек в диапазоне Rng1 неодинаковы-несовпают" And "Значения отфильтрованных ячеек в диапазоне Rng2 неодинаковы-несовпают" Then
'Условие2
End If
Else
Exit Sub
End With
Всем здравствуйте ! Столкнулся с проблемой как прописать условие для видимых ячеек после автофильтра в диапазонах 7 и 18 столбца (начиная с 4 отфильтрованной строки до последней заполненной отфильтрованной строки)
думаю что алгоритм такой 1)определить Range диапазонов где будут выполняться условия 2)применить свои условия к ячейкам этого Range только в видимом диапазоне (после автофильтра) примерно так
но как задать требуемые условия для отфильтрованных ячеек не знаю (тк условие только для видимых ячеек)
Код
Dim Rng1 As Range, Rng2 As Range
'определяем диапазоны Rng1 и Rng2 для условий для видимых ячеек после автофильтра
'With ThisWorkbook.ActiveSheet.Range("A1:AH1000").SpecialCells(xlVisible)
'With ThisWorkbook.ActiveSheet.Range("A1:AH1000").SpecialCells(12)
With ThisWorkbook.ActiveSheet
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set Rng1 = .Range(.Cells(4, 7), .Cells(LastRow, 7))
Set Rng2 = .Range(.Cells(4, 18), .Cells(LastRow, 18))
If ActiveSheet.AutoFilter.Filters(7).On Or ActiveSheet.AutoFilter.Filters(18).On Then 'если автофильтр в 7 или 18 столбце включен
'и как прописать эти условия ??
If "Значения отфильтрованных ячеек в диапазоне Rng1 одинаковы" And "Значение отфильтрованных ячеек в диапазоне Rng1 = "Test""
And "Значения отфильтрованных ячеек в диапазоне Rng2 одинаковы" And "Значения отфильтрованных ячеек в диапазоне Rng2 > 0" Then
'Условие1
End If
If "Значения отфильтрованных ячеек в диапазоне Rng1 неодинаковы-несовпают" And "Значения отфильтрованных ячеек в диапазоне Rng2 неодинаковы-несовпают" Then
'Условие2
End If
Else
Exit Sub
End With
Тогда так делаем без снятия гиперссылок - вроде заработало
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(ActiveCell, Range("C4:C5003")) Is Nothing Then
If Target.Cells.Count > 1 Then Exit Sub
Dim url As String
Dim operaPath As String
operaPath = """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe"""
url = ActiveCell.Value
If ActiveCell.Value Like "*http://*" Or ActiveCell.Value Like "*https://*" Then
Shell operaPath & url, vbNormalNoFocus
Shell "cmd.exe /c " & "Taskkill" & " " & "/f" & " " & "/im" & " " & "iexplore.exe"
Else
Exit Sub
End If
End If
End Sub
Кажется нашел в каком направлении копать - нужно сначала снять гиперссылку в активной ячейке - потом открывать своим браузером - потом (после открытия страницы) по желанию вернуть гиперссылку на ячейку те если в ячейке только текст ссылки - не гиперссылка - то браузер по умолчанию не открывается и открывается только выбранный браузер однако сейчас в таком коде все равно лезет браузер по умолчанию - хотя с ячейки предварительно снимаю гиперссылку отдельным If
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(ActiveCell, Range("C4:С100")) Is Nothing Then
If Target.Cells.Count > 1 Then Exit Sub
Dim url As String
Dim operaPath As String
operaPath = """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe"""
url = ActiveCell.Value
If ActiveCell.Value <> "" Then
Selection.Hyperlinks.Delete
Else
Exit Sub
End If
If ActiveCell.Value Like "*http://*" Or ActiveCell.Value Like "*https://*" Then
'Selection.Hyperlinks.Delete
'Application.Wait Now + TimeSerial(0, 0, 10)
Shell operaPath & url, vbNormalNoFocus
Else
Exit Sub
End If
End If
End Sub
вы какбы обходите администратора можно под администратором ведь пароль и логин администратора знаю комп локальный решение не сетевое значит батники пишем в реестр а что делать тупо но надежно ( хотя с какой стороны посмотреть ?? - антивирус точно будет ругаться на макрос на изменение в реестре) тупик .... будем искаать
Jungl изменил текст путь 2 Батник делаем 2 шт - один меняет другой возвращает ? Если так то делаем *.bat файл со сменой значения реестра потом по условию клика "не в диапазоне" делаем 2 *.bat файл который возвращает значения реестра ? Ни разу не делал такого - интересно
а что делать легких путей не ищем будем искать на англицком я думаю что проще изменить браузер по умолчанию программно а потом вернуть как это сделать пока на знаю но это снимает промежуточные проблемы тут подходит ваш путь 2 regedit
че то не хочется колдовать с Replace и загонять в переменные хочется более изящное решение и плюсом проблема одновременного открытия 2 браузеров не решится только гиперссылка решится
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(ActiveCell, Range("C4:C100")) Is Nothing Then
If Target.Cells.Count > 1 Then Exit Sub
If InStr(Target.FormulaLocal, "ГИПЕРССЫЛКА") > 0 Then
Shell """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & "ГИПЕРССЫЛКА", vbNormalFocus
End If
End If
End Sub
Добрый вечер всем ! Данная тема конечно подымалась на страницах форума но ответа для моего случая не нашел На листе в диапазоне С4:C100 в ячейках гиперссылки Их надо открывать только портабельным браузером Opera ("""" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""") - папка с портабельным браузером в директории файла При этом есть InternetExplorer который открывает ссылки по умолчанию - его надо исключить (советы по смене браузера по умолчанию в данной ситуации не подходят) Задаем чем открывать что открывать Чем открывать - ("""" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""") - папка с портабельным браузером Что открывать - активную ячейку только в диапазоне С4:C100 с гиперссылкой
1. Проблема1 -Вот так будет работать если явно задать www-адрес вариации разные 1.1) x = Shell("""" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & """http://www.planetaexcel.ru""", vbNormalNoFocus) 1.2)operaPath = """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" Shell (operaPath & " -url http://www.planetaexcel.ru"), vbNormalFocus 1.3)Shell """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & "http://www.planetaexcel.ru", vbNormalFocus итого Проблема1 - будет открываться Opera которая явно задана и одновременно автоматом другой браузер по умолчанию (а нужно чтобы только Opera открывалась)
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(ActiveCell, Range("C4:C100")) Is Nothing Then
If Target.Cells.Count > 1 Then Exit Sub
x = Shell("""" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & """http://www.planetaexcel.ru""", vbNormalNoFocus)
'operaPath = """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe"""
'Shell (operaPath & " -url http://www.planetaexcel.ru"), vbNormalFocus
'Shell """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & "http://www.planetaexcel.ru", vbNormalFocus
End If
Exit Sub
2.Проблема2 связанная - видимо нужно ввести myHyperlink.Address либо просто Hyperlink.Address либо ActiveCell.Text чтоб реагировало правильно на клик в ячейке 1.1) x = Shell("""" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & myHyperlink.Address, vbNormalNoFocus) 1.2)operaPath = """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" Shell (operaPath & " -url myHyperlink.Address"), vbNormalFocus 1.3)Shell """" & ThisWorkbook.Path & "\OperaPortable\OperaPortable.exe""" & myHyperlink.Address, vbNormalFocus
не получается так или Hyperlink.Address или его не использовать - сделать ActiveCell.Text ?
Как задать свой браузер чтоб открывался только он по клику на активную ячейку с гиперссылкой(а браузер по умолчанию не открывался при этом) и как ввести Hyperlink.Address правильно ?
Вечер добрый всем ! Нужно закрыть приложение по командной строке windows средствами VBA Вроде простая задача но почему так трудно .... Почему именно так - нужно закрыть браузер Chrom при открытии нескольких независимых окон - сделать так чтобы закрыть все окна Chrom и выйти из браузера Что имеем штатными средствами чтобы так сделать: 1) ключами после ..... /Chrome.exe - нет таких ключей что дебильно ключей туча и такого нет (полный список ключей на http://peter.sh/experiments/chromium-command-line-switches/) 2)Горячие клавиши Выход Ctrl + Shift + q (Выход) и Ctrl + Shift + w (Закрыть все открытые вкладки и браузер) ( (https://support.google.com/chrome/answer/157179?hl=ru) путем Application.SendKeys ("^+(w)") и Application.SendKeys ("^+(q)") не работает в VBA при скрытии нескольких окон браузера в трей - окна неактивны получается и горячие клавиши не помогут
Есть путь к файлу chrome.exe C:\Program Files (x86)\Chrome\Chrome.exe и процесс в диспетчере задач windows Остается убить процесс в диспетчере чтоб все окна закрылись и выйти из Chrome
Как это сделать средствами VBA макросом ? Есть конечно Taskkill - завершение процесса из командной строки(http://sys-team-admin.ru/videouroki/administrirovanie/86-taskkill-zavershenie-protsessa-iz-komandnoj...) или по этому пути Shell ("c:\windows\system32\cmd.exe /c dir > C:\Program Files (x86)\Chrome\Chrome.exe") но как это сделать макросом или проще есть методы ? Так не работает к сожалению Shell ("c:\windows\system32\cmd.exe Taskkill /f /im chrome.exe") и так Shell ("c:\windows\system32\cmd.exe /c dir > Taskkill /f /im chrome.exe") не получается
попробовал усовершенствовать функцию для цифр - если строка пустая или нет цифр в конце текста после пробела то выходим из функции на строку полностью пустую работает а вот на условие если нет цифр в конце текста после пробела не работает в чем ошибка?
Код
Public Function LastLongNumber(ByVal this As String) As String
Dim sSymbol As String 'заводим переменную для подсчета общего количества цифр в строке
If this = "" Then LastLongNumber = "": Exit Function ' если исходная ячейка пустая выходим из функции
With CreateObject("VBScript.RegExp")
.Pattern = "[^0-9,]" 'паттерн на все цифры
sSymbol = .Replace(srcStr, vbNullString) 'вводим в переменную все цифры
If Len(sSymbol) > 4 Then 'если общее количество цифр в строке >4 - а это значит что длинный номер в конце строки присутствует
.Pattern = " \d{6,20}$" 'паттерн на длинный номер после пробела в конце текста
LastLongNumber = Trim$(.Execute(this)(0).Value) ' извлекам номер от 6 до 20 символов после пробела в конце строки
Else 'иначе выходим из функции
Exit Function
End If
End With
End Function
Так получилось Для цифр (благодарю Андрей VG) - все работает кроме варианта если вдруг нет такого условия (паттерна нет такого)то ошибка идет - как побороть?
Код
Public Function LastLongNumber(ByVal this As String) As String
With CreateObject("VBScript.RegExp")
.Pattern = " \d{6,20}$"
LastLongNumber = Trim$(.Execute(this)(0).Value)
End With
End Function
Для текста так получилось - все вроде корректно работает без ошибок - не ругается на отсутствие условия (паттерна)
Код
Function TextOnly(srcStr As String) As String
Dim objRegEx As Object
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.Global = True
'.Pattern = "[0-9,]" ' так все цифры некорректно удаляет
.Pattern = " \d{6,20}$" ' все что до \d{6,20}$
TextOnly = .Replace(srcStr, vbNullString)
End With
Set objRegEx = Nothing
End Function
Добрый вечер всем ! Макрос вытаскивает из текста цифры и текст отдельно но критерии немного другие нужно Вытаскивать только цифры в конце текста: Цифры в конце текста: всегда начинаются с пробела всегда в конце текста количество от 6 до 20 цифр
Вытаскивать только текст: текст это то что остается после вытаскивания последних цифр
Как прописать .Pattern в макросе чтобы соответствовал этим критериям ?
Код
Function NumbersOnly(srcStr As String) As String
Dim objRegEx As Object
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.Global = True
.Pattern = "[^0-9,]" ' последние цифры нужны после [\s....] пробела
NumbersOnly = .Replace(srcStr, vbNullString)
End With
Set objRegEx = Nothing
End Function
Function TextOnly(srcStr As String) As String
Dim objRegEx As Object
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.Global = True
.Pattern = "[0-9,]" ' все что осталось после [^....]
TextOnly = .Replace(srcStr, vbNullString)
End With
Set objRegEx = Nothing
End Function
Sub TextDoCifr()
ActiveCell.Offset(0, 1).Value = TextOnly(ActiveCell.Text)
End Sub
Sub CifraRight()
ActiveCell.Offset(0, 2).Value = NumbersOnly(ActiveCell.Text)
End Sub