Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: vlth
Дата сообщения: 10.02.2010 23:11
V4mp

Цитата:
только не могу понять, почему фокус теряется..

По-моему - всё логично: нажимая сочетание alt-tab, ты активируешь Excel, а в ней активна вторая форма. Если же щёлкать по иконке на панели задач, в обход окна-родителя активируешь форму 1 (Excel-то невидима, и в панели задач её иконка также отсутствует).
Автор: V4mp
Дата сообщения: 11.02.2010 00:59
vlth

Цитата:
По-моему - всё логично: нажимая сочетание alt-tab, ты активируешь Excel, а в ней активна вторая форма. Если же щёлкать по иконке на панели задач, в обход окна-родителя активируешь форму 1 (Excel-то невидима, и в панели задач её иконка также отсутствует).

Может оно то и логично, но потеря фокуса - это серьезный минус. не каждый ведь догадается нажать alt-tab. тем более форма 2 может быть меньше формы 1 и спрятаться за ней. и получается картина - в панели задач нажал - появилась форма 1, но в ней ничего нажать нельзя - и все))

вот думаю, как теперь фокус на форму поместить. перебрать циклом все открытые формы, поставить фокус на нужную, только вот нет вроде у формы setfocus

вот и не знаю, что делать(

Добавлено:

Цитата:
нажимая сочетание alt-tab, ты активируешь Excel

хм.. эксэль то в этом случае тоже скрыт, и в окне по alt-tab выбирается тоже не эксэль, а формочка. Однако фокус не терятся в этом случае.
Автор: vlth
Дата сообщения: 11.02.2010 02:46

Цитата:
Цитата:нажимая сочетание alt-tab, ты активируешь Excel

хм.. эксэль то в этом случае тоже скрыт, и в окне по alt-tab выбирается тоже не эксэль, а формочка. Однако фокус не терятся в этом случае.


Думаю, всё-таки Excel, пускай он и скрыт (формой 2 ты ведь управлять напрямую не можешь?!), но утверждать это не берусь: это всего лишь интуитивное предположение, не подкреплённое знаниями.

Не пробовал, загружая форму 2, скрывать форму 1 (UserForm1.Hide)?


Добавлено:

Цитата:
нет вроде у формы setfocus


Можно попробовать show. Форма тогда должна получить фокус

Добавлено:
vasiliy74

Цитата:
как проще всего реализовать механизм преобразования формул суммирования вычитания строк?
например запись в ячейке =А1+А2-А3 преобразвываем как запись в ячейке 1+2-3
или =SUM(А1:А3) преобразовываем как 1+2+3 и т.п.


Так что нужно-то? - из вопроса ничего не понять...
Автор: timsyk
Дата сообщения: 13.02.2010 20:10
Alexikit

Спасибо вам огромное, всё работает прекрасно. Спасибо, очень помогли!!!!!!!!!!!!!!!!!!!!!

Автор: virtuNBK
Дата сообщения: 15.02.2010 18:44
подскажите куда рыть...
нужно что бы в ячейке А проставлялась текущая дата если в масиве Б изменились какие либо данные (была изменена цыфра в ячейке)
Автор: ZlydenGL
Дата сообщения: 16.02.2010 08:08
virtuNBK, копаешь в сторону процедуры SelectionChange (смотришь в браузере объектов), если Target.Address находится в столбце B - в ячейку А1 пишешь Now().
Автор: Anton T
Дата сообщения: 16.02.2010 11:29
virtuNBK
А об изменениях в комментарии ячеек не хочешь?
[more=Пробуй]
Код: Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim cell As Range
Dim OldText As String, NewText As String
For Each cell In Target
With cell
On Error Resume Next
OldText = .Comment.Text
If Err <> 0 Then .AddComment
NewText = OldText & "Изменено на " & cell.Text & ". " & Application.UserName & ", " & Now & vbLf
.Comment.Text NewText
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End With
Next cell
End Sub
Автор: ZlydenGL
Дата сообщения: 16.02.2010 11:36
Anton T, жесть, если надо хранить историю изменений - проще включить режим Share workbook/track changes. Хранить такую инфу в комментарии... А если в столбец B пишется куча текста?
Автор: Anton T
Дата сообщения: 16.02.2010 12:19
ZlydenGL
Это на ваше усмотрение
Автор: virtuNBK
Дата сообщения: 17.02.2010 12:28
спасиб за советы.
но я пока так и не разобрался как этот самый скрипт добавить и что самое важное что бы он работал...
ткните в ман, или здесь подскажите
гуглю у меня пока не получилось задать правильный вопрос
Автор: ZlydenGL
Дата сообщения: 17.02.2010 12:34
virtuNBK, Alt + F11 откроет окно редактора VBA. Даблклик по нужному листу выдаст модуль этого листа (по умолчанию пустой). В окне модуля в левом выпадающем списке выбираем пункт Worksheet вместо General, в правом - событие Change. У тебя в окне модуля автоматически появится "заготовка"

Код: Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
Автор: GenyaMS
Дата сообщения: 18.02.2010 12:28
Доброго Времени Суток! Гуру скажите пожалуйста - как сделать такое:
Задача - в ячейке хранится ссылка на адрес в Инете.
Делаю ячейку активной запускаю макрос - по нему:
Если опера не открыта то оператор shell ее запускает, если она открыта то создает в Опере новую страницу с заданным адресом.

Труднось в том: 1 - как проверить из VBA наличее запущенного процесса оперы.
2 - как передать в оперу новую ссылку(с адресом) и принудительно из VBA создать новую страницу.

Очень нуждаюсь паре строчек КОДА по указанному выше вопросу...
Автор: vlth
Дата сообщения: 18.02.2010 14:32
GenyaMS

Цитата:
Очень нуждаюсь паре строчек КОДА по указанному выше вопросу...

Увы, получается только одна строка
Код: Shell "C:\Program Files\Opera\opera.exe http://www.yandex.ru"
Автор: NJCorp
Дата сообщения: 18.02.2010 18:01
Есть форма NewP. Запускаем кнопкой.
Private Sub NewPButton_Click()
newp.Show
End Sub
Надо чтоб при запуску форми виполнянся определенний код.
(заполнить поля, к примеру NameFirst.Text = "Петров")
СПС
Автор: ZlydenGL
Дата сообщения: 18.02.2010 19:18
NJCorp, странный вопрос. Свойство OnLoad/OnActivate формы вам в помощь Ну или прямо в NewPButton_Click() перед отображением формы вставить нужный код. Вариация огромная!
Автор: Johnson_Finger
Дата сообщения: 18.02.2010 19:33
Кстати, господа, подскажите такую штуку, есть ячейка, в ячейке есть число, скажем 10000,0031548, но отформатированным оно выглядит как 10 000,00. Есть ли возможность сделать так, чтобы msgbox показывал именно отформатированное значение, т.к. тот же "msgbox activecell.value" отображает только 10000,0031548, а нужно чтобы показывал 10 000,00, т.е. отформатированное число (с разделителями и т.д.)
Автор: ZlydenGL
Дата сообщения: 18.02.2010 19:35
Johnson_Finger, format() тебе в помощь
Автор: V4mp
Дата сообщения: 19.02.2010 01:58
Johnson_Finger
ну или использовать activecell.Text вместо activecell.value

Добавлено:
vlth
с получением фокуса пока ничего не придумал. буду копаться в интернете...
Автор: NJCorp
Дата сообщения: 19.02.2010 03:11
ZlydenGL
Спасибо, разобрался.

Теперь такой вопрос
есть 2 форми. из 1-вой будет визиватся вторая (мультистраничная) из нескольких мест.
можна ли при визове форми скрить определенние елементи (в первую очередь страници)

так не виходит (в принципе догадивабсь почему)

Код:
UserForm.Show
Page2.Visible = False
Автор: Anton T
Дата сообщения: 19.02.2010 11:41
NJCorp

Код: UserForm.MultiPage1.Pages(1).Visible = False
Автор: NJCorp
Дата сообщения: 19.02.2010 12:05
Anton T
Спасибо, но не то.
Форма должна запустится уже с скритими елементамі.
Автор: Anton T
Дата сообщения: 19.02.2010 12:43
NJCorp
В форму можно проинициализировать:

Код: MultiPage1.Pages(1).Visible = False
Автор: vlth
Дата сообщения: 19.02.2010 17:21
NJCorp

Цитата:
Форма должна запустится уже с скритими елементамі


Код: Private Sub UserForm_Initialize()
me.MultiPage.Pages(1).Visible = False
End Sub
Автор: NJCorp
Дата сообщения: 19.02.2010 20:46
Да, ет все хорошо, но не то.

Форма визивается из нескольких мест, и при етом скито/отображено разние елементи.
Суть сводится к тому, чтоб не писать несколько форм (их полусится штук с 20), а воспользоватся одной (отображая/скривая нужние елементи).

Получается что нужно запустить форму и передать ей код, которий она должна виполнить (или чтото вроде того)

На ум приходит использовать общую переменную, но чтото не получается.
делаю так:
Обявляю переменную (кстати где ее обявить, в модуле или в форме?)

Код:
Public wisa As String
Автор: Anton T
Дата сообщения: 19.02.2010 21:54

Цитата:
Обявляю переменную (кстати где ее обявить, в модуле или в форме?)

Можно в модуле, либо в форме.


Цитата:
запускаю форму и присваиваю значение переменной
...
Считиваю переменную а она пустая


Код: Public wisa As String, wisa1 As String

Private Sub CheckBox1_Change()
If CheckBox1.Value = True Then
UserForm2.Show
MsgBox wisa
Else
Unload UserForm2
MsgBox wisa1
End If
End Sub

Private Sub UserForm_Initialize()
wisa = "вторая форма открыта"
wisa1 = "вторая форма закрыта"
End Sub
Автор: NJCorp
Дата сообщения: 19.02.2010 22:10
ShowModal у меня True,
пока все работает

заштопорился тут:
чекбокс с количеством (1,2,3...10)
соответственно к вибраному нужно отобразить такое количество текстбоксов

Код:
Private Sub kilkist_Change()
Dim intShow As Integer, x As String
int = Me.kilkist.Value
For i = 1 To int
x = "TextBox_d" & i
'TextBox_d(i).Visible = False
x.Visible = False
Next i
End Sub
Автор: GenyaMS
Дата сообщения: 20.02.2010 05:53
Доброго времени суток! подскажите пожалуйста ещё такую вещь:
как записать в активную ячейку листа Excell - адресс запущенной (открытой и активной) страницы в Опере ?

Скопировать и вставить - не подходит, нужен текст макроса который выполнит это автоматически...
Автор: Anton T
Дата сообщения: 20.02.2010 12:50
NJCorp
Этот код один чекбокс из несколько текстбоксов:
Код: Dim MyControl As Control

Private Sub CheckBox1_Change()
For Each MyControl In Controls
If (MyControl.Name Like "TextBox*") Then
MyControl.Visible = CheckBox1.Value
End If
Next
End Sub

Private Sub UserForm_Initialize()
CheckBox1.Value = False
For Each MyControl In Controls
If (MyControl.Name Like "TextBox*") Then
MyControl.Visible = False
End If
Next
End Sub
Автор: NJCorp
Дата сообщения: 21.02.2010 03:06
спасибо, я пошол другим путем...

Подскажите плз кодик для написания Фамилии Имени и По-батюшки с большой букви.
Ето один текстбокс. Ну и запрет двойного пробела.
Уже башка не варит.
Спасибо большое.
Автор: dneprcomp
Дата сообщения: 21.02.2010 04:30
NJCorp
[more=PROPER(text)]
Text is text enclosed in quotation marks, a formula that returns text, or a reference to a cell containing the text you want to partially capitalize.1

A2 = "this is a TITLE"
A3 = "2-cent's worth"
A4 = "76BudGet"

Formula Description (Result)
=PROPER(A2) Proper case of first string (This Is A Title)
=PROPER(A3) Proper case of second string (2-Cent'S Worth)
=PROPER(A4) Proper case of third string (76Budget)
[/more]
Двойной пробел чистится в Replace

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.