Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Работа с командной строкой cmd из VBA
 
Это отличный вариант для работы с Oracle, спасибо.
Но вопрос о программном переключении раскладки по умолчанию ещё актуален.
Работа с командной строкой cmd из VBA
 
Нужен универсальный вариант, просто пару строк послать, работать с Oracle через SendKeys нет необходимости,  ADODB.Connection тоже не особо нужен, данные из базы в Excel не передаются.
Цитата
JayBhagavan написал: Gekan, раскладка по умолчанию какая?
Раскладка по умолчанию русская, поменял на английскую заработало. Не знаю, как поменять это программно, нашёл функцию для смены раскладки, но она не помогает, видимо SendKeys использует раскладку по умолчанию, а не текущую.
Код
Declare Function LoadKeyboardLayout Lib "user32" Alias _
"LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long 
'' Переключение на английскую раскладку
Function KBDToENG()
Call LoadKeyboardLayout("00000409", &H1)
End Function 

'' Переключение на русскую раскладку
Function KBDToRUS()
Call LoadKeyboardLayout("00000419", &H1)
End Function
Работа с командной строкой cmd из VBA
 
Спасибо, с задержкой работает, только вместо английских букв посылаются русские.
Работа с командной строкой cmd из VBA
 
Это был просто как бы пример. Интересно узнать, как правильно послать нажатие клавиш в стороннее приложение. Вот пример по ссылке выше, но он почему-то не работает, по крайней мере у меня.

Код
Sub test()
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("notepad")
WshShell.AppActivate WshExec.ProcessID
WshShell.SendKeys "0123456789"
End Sub
Работа с командной строкой cmd из VBA
 
Спасибо за ссылку. Скорее всего надо будет использовать SendKeys.
Работа с командной строкой cmd из VBA
 
Добрый день.
Допустим, что в ячейках столбца А есть такие данные.
sqlplus system/123
drop user test1 cascade;
create user test1 identified by 123;
grant connect, resource, create view   to  test1;
disconnect
connect test1/123
Первая команда - подключение к базе данных Oracle, а дальше работа в системе.
Как правильно всё это запустить?
Вот как не получается, потому что команды, начиная со 2-ой, не для cmd а для Oracle:

Код
Sub sqlplus()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
whatToDo = Range("A1")
    For i = 2 To 6
        whatToDo = whatToDo & "&" & Range("A" & i)
    Next i
wsh.Run whatToDo
Set wsh = Nothing
End Sub
Создание/удалении линий тренда с помощью чекбоксов
 
Супер. Спасибо, теперь всё работает как надо.
Интересная "фича" Excel.
Создание/удалении линий тренда с помощью чекбоксов
 
Спасибо, но у меня почему-то не работает.
Нажимаю на 1-ый чекбокс, потом на 2-ой чекбокс, потом ещё раз на 2-ой и в итоге удаляется не та линия тренда.
Я никак не могу понять в чём причина.
Создание/удалении линий тренда с помощью чекбоксов
 
Так да, как раз хотел написать, 10 минут перепроверял)
Создание/удалении линий тренда с помощью чекбоксов
 
Прошу помочь разобраться с макросом.
Когда добавляю на диаграмму линию тренда (щелчком по чекбоксу), то всё ОК, и, даже если сразу отжать чекбокс, то тоже всё ОК.
Проблема возникает, когда выбрано больше 1 чекбокса, тогда удаление  корявое. Например, если выбрать 1-ый чекбокс, затем 4-ый, а потом отжать  4-ый, то удаляется не та линия тренда.
Отладчик мне не помогает, показывает вроде одно (скорее всего это просто я так вижу), в итоге удаляется другое.

Этот же вопрос ещё  находится и здесь:
http://programmersforum.ru/showthread.php?t=280025
Изменено: Gekan - 27.06.2015 11:40:00
Диаграмма на форме, Обновление диаграммы на форме
 
Ещё такой небольшой вопрос: как скопировать изображение активной формы в word.
Получается только скрин диапазона ячеек вот таким кодом.  
Код
Sub ворд()
Range("A1:B10").CopyPicture xlScreen
Set appWD = CreateObject("Word.Application")
appWD.Visible = True
appWD.Documents.Add
appWD.Activate
appWD.Selection.PasteSpecial
End Sub

Или с формой надо что-то типа:
Код
Application.SendKeys "%PRTSC"
Диаграмма на форме, Обновление диаграммы на форме
 
Цитата
Юрий М пишет:
Тогда можно на форме сделать MultiPage (для каждого вида диаграммы своя страничка с нужным набором контролов). Общие контролы - на самой форме.
А если делать PrintScreen, то эти странички на форме как бы не в тему. Да и придётся кода городить много.
Цитата
The_Prist пишет:
Чтобы не городить кучу кода в каждой форме - я бы вынес в отдельную процедуру. В общем все во вложении.
Да, так, конечно, код намного чище получается.
Я только не понял, зачем там Load oFrm (вроде и без этого работает), т.е. если форма открыта, то она обновляется с помощью
Код
LoadSelectedChart Sheets(имя_листа), имя_листа, oFrm

а вот если закрыть форму, то при изменении ячейки С3 она не появится (тогда как при изменении С2 появляется; в принципе можно по тому же принципу форму выгружать (unload) и опять show, но просто интересно, как её обновлять не выгружая, а если она закрыта, то перед этим соответственно загрузить, как-то так)
Можно изменить часть кода вот так:
Код
        Select Case [c2]
        Case "прямая": If UserForm1.Visible = False Then UserForm1.Show 0: Set oFrm = UserForm1
        Case "квадрат": If UserForm2.Visible = False Then UserForm2.Show 0: Set oFrm = UserForm2
        Case "куб": If UserForm3.Visible = False Then UserForm3.Show 0: Set oFrm = UserForm3
        End Select

Но тогда Excel "думает" и это мерцание заметно.
Диаграмма на форме, Обновление диаграммы на форме
 
The_Prist, спасибо, возьму на заметку.
Но в моём случае "работаем" только с листом данные, соответственно нет необходимости при переходе на другие листы что-либо делать (они просто содержат расчёты).
Смысл в том, что если изменяется ячейка С3, то форму можно просто перерисовать (Вы показали это в своём первом ответе), а если изменяется ячейка С2, то закрываем перебором все формы (хотя открыта одна, но я так понял к ней нельзя обратиться) и просто открываем нужную.
Я подозреваю, что сделал коряво, но вот пример, как оно приблизительно должно было работать.
Диаграмма на форме, Обновление диаграммы на форме
 
The_Prist, спасибо, принцип понятен. Остальное подстроил.
Диаграмма на форме, Обновление диаграммы на форме
 
Цитата
Юрий М пишет:
Но, надеюсь, мысль мою Вы уловили :)
Мысль я как раз уловил ещё до создания темы, поэтому и написал P.S. в файле.
Цитата
Юрий М пишет:
Элементы управления ведь всегда можно расположить выше/ниже/слева/справа от самой диаграммы. Впрочем,
решать это Вам
Эти элементы управления разные для каждого вида диаграммы.
Может быть не совсем понятно зачем, просто я хотел бы видеть, как реализовать именно то, о чём я изначально просил.
Диаграмма на форме, Обновление диаграммы на форме
 
Цитата
Юрий М пишет:
А вот от меня скрыт смысл наличия трёх форм - почему нельзя все диаграммы выводить на одну и ту же форму?
Я, конечно, новичок, но предвидел этот вопрос и в приложенном файле (т.е. для тех, кто заинтересуется и откроет файл) в P.S. написал ответ  ;)
Диаграмма на форме, Обновление диаграммы на форме
 
Спасибо, идея местами ясна, но кракозябры скрыли от меня самое главное.
Если написать
Код
Set sh = ThisWorkbook.Worksheets("прямая")

то при изменении ячейки  $C$3 диаграмма обновляется только для UserForm1, а у меня этих форм 3. Т.е. надо вместо конкретного названия листа прописать значения ячейки  $C$2 и вместо userform1 тоже подставить соответствующую форму, но как не знаю.
При изменении же ячейки  $C$2, например на "куб", надо закрыть активную форму (т.е. UserForm1 или UserForm2, если они открыты) и открыть UserForm3.
Диаграмма на форме, Обновление диаграммы на форме
 
Добрый день.
Ребята, подскажите, пожалуйста, как правильно обновлять диаграмму на форме при изменении ячеек на листе.
Как поместить её туда я нашёл пример, вроде подходит, не знаю как программно закрыть активную форму и можно ли обновить диаграмму не закрывая форму.
Пример во вложении.
Заранее спасибо за возможный проявленный интерес.
Обнуление суммы при попадании значения 0
 
Как вариант:

=ЕСЛИОШИБКА(НАЙТИ(0;--СЦЕПИТЬ(Y3;W3;U3;S3;Q3;O3;M3;K3;I3;G3;E3;C3))-1;СЧЁТЕСЛИ(C3:Y3;1))
Как написать форуму чтобы число в ячейке попадало в диапазон?
 
Ещё так можно:
=ЕСЛИ(A1<0;"ВТФ!?";1+(A1>150)+(A1>300)+(A1>600)+(A1>800)+(A1>1000))
Подбор формулы при нескольких если
 
Вроде здесь можно обойтись всего лишь одной функцией:

=$C6*((($E6="A")+($E6="B")*$D$3/$D6)*(СТОЛБЕЦ()=6)+(($E6<>"A")-($E6="B")*$D$3/$D6)*(СТОЛБЕЦ()=7))
склеивание нескольких ячеек по условию
 
Что-то типа этого:  
=СЦЕПИТЬ(2;ТЕКСТ(D6;"00");ТЕКСТ(E6;"000");ТЕКСТ(G6;"000");ТЕКСТ(I6;"0000"))
Найти слово в первом столбце и выдернуть значение второго столбца.
 
Если учитывать, что ИТОГО может находиться не в начале строки, тогда уже необходимо учитывать и полное отсутствие такого слова в диапазоне, что для функции ИНДЕКС особенно актуально, т.к. она походу умеет работать с 0 в качестве аргумента номера строки и поэтому возвратит неверный результат; функция же ПРОСМОТР просто выдаст ошибку.
При вырезании/вставке в другое место сбивается ссылка на эту ячейку
 
К содержимому формулы можно обратиться, написав функцию на VBA.  
Я с VBA познакомился недавно,поэтому пока моих знаний хватило только на такое.  
Функция годится только в том случае, если в ячейке с формулой участвуют только ячейки той же строки, т.е. как в вашем примере.  
 
Public Function Find_Error(rng)  
If Not rng.HasFormula Then  
Find_Error = "Нет формулы"  
Exit Function  
End If  
Set result = rng.Find(rng.Row, LookIn:=xlFormulas)  
Find_Error = IIf(result Is Nothing, "Ошибка", "OK")  
End Function  
 
Прикрепил пример, вроде работает.
Как задать множество условий для ЕСЛИ()?
 
{quote}{login=vikttur}{date=06.09.2012 11:42}{thema=}{post}Проще  
=(A1>3)-(A1<-3)  
{/post}{/quote}  
Это скорее называется не проще, а короче. У меня такой вариант тоже был, но считаю, что в формуле должна прослеживаться прямая логика.  
С таким же успехом можно вместо    
=ЗНАК(ОТБР(A1/4))  
записать  
=ЗНАК(ОТБР(A1/3))  
и ещё бесконечное число формул с делителем от 3 до 4 (можно и функцию ПИ() туда всунуть).  
А также формулы типа =(A1>3.1)-(A1<-3.1) и т.д., которые отличаются лишь количеством символов, а выбор чисел для сравнения в большей степени случаен.
Как задать множество условий для ЕСЛИ()?
 
Да, верно, я её по частям просто собирал, проще так записать:  
=(A1>=4)-(A1<=-4)
Как задать множество условий для ЕСЛИ()?
 
=--(A1>=4)---(A1<=-4)
Формулы массивов, кто может объяснить что это такое?
 
{quote}{login=Юрий М}{date=04.09.2012 11:25}{thema=Re: Re: }{post}{quote}{login=gekan}{date=04.09.2012 11:21}{thema=Re: }{post}{quote}{login=Юрий М}{date=04.09.2012 10:22}{thema=}{post}Я это понимаю. Но, согласитесь - AfterDoubleClick было бы логичнее: после того, как дважды кликнули :-){/post}{/quote}Ну не могу согласиться.{/post}{/quote}Ваше право. Я говорю лишь о том, что МОЕМУ "уху" более приемлемо :-){/post}{/quote}  
 
Для вас более приемлемым является другое название для этой процедуры, для других такое название и вовсе "несусветная глупость". Разработчики же, вероятно, при выборе названия руководствовались логикой (которая, быть может, не всегда и не всем ясна) и им в этом не откажешь.
Формулы массивов, кто может объяснить что это такое?
 
{quote}{login=Юрий М}{date=04.09.2012 10:22}{thema=}{post}Я это понимаю. Но, согласитесь - AfterDoubleClick было бы логичнее: после того, как дважды кликнули :-){/post}{/quote}  
 
Ну не могу согласиться.  
 
AfterDoubleClick - некоторое действие, которое должно было бы произойти после двойного клика. Но проблема в том, что по умолчанию такое действие уже предопределено.  
Т.е. после DoubleClick происходит переход в режим редактирования ячейки и по определению приостанавливается выполнение любых процедур.  
 
Опять же из справки:  
Some events can be used to substitute an action for the default application behavior, or to make a small change to the default behavior.  
 
BeforeDoubleClick и BeforeRightClick - это 2 процедуры, которые перехватывают стандартное поведение Excel соответсвенно при двойном клике ЛКМ или одинарном ПКМ. И при наличии таковых Excel заранее знает, как себя вести ещё до двойного клика.
Формулы массивов, кто может объяснить что это такое?
 
{quote}{login=Юрий М}{date=03.09.2012 03:50}{thema=}{post}А Worksheet_BeforeDoubleClick ЛИЧНО я переименовал бы на Worksheet_AfterDoubleClick – ведь мы что-то делаем ПОСЛЕ даблклика. {/post}{/quote}  
 
BeforeDoubleClick - имеется ввиду не перед самим двойным щелчком, а перед процедурой/действием, по умолчанию вызываемой/ым этим двойным щелчком.  
 
Из справки:  
Occurs when a worksheet is double-clicked, before the default double-click action.  
Ключевое слово здесь - action.
Страницы: 1 2 След.
Loading...