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

» Excel VBA (часть 3)

Автор: Alex_B
Дата сообщения: 26.02.2015 09:31
SAS888
Спасибо, это то, что мне нужно. Двойной клик по нужной ячейке (Worksheet_BeforeDoubleClick) вызывает пользовательскую форму (UserForm), а в ней выбор команды перехода в желаемое место. Так можно обойти ограничение в Excel, связанное с отсутствием текстовых гиперссылок.

Если есть иной способ, будет интересно узнать.
Автор: Winand
Дата сообщения: 28.02.2015 14:42
Alex_B там есть гиперссылки. Можно даже на ячейку ссылаться: правый клик на ячейке - Гиперссылка - Место в документе.
з.ы. а вместо привязки к даблклику по ячейке можно просто кнопку сделать. Хотя это зависит от того, что собссно вы сделать хотите.)
Автор: ALeXkRU
Дата сообщения: 28.02.2015 15:21
Winand

Цитата:
зависит от того, что собссно вы сделать хотите

две гиперссылки (или больше) в одну ячейку (каждому слову - свою, например)
Автор: Alex_B
Дата сообщения: 01.03.2015 11:01

Цитата:
там есть гиперссылки

Гиперессылки есть, но не там.
Гиперссылка есть ИЗ ячейки (или из графического объекта), но нет разных гиперссылок ИЗ разных слов в одной текстовой ячейке.
Автор: Fsp050
Дата сообщения: 02.03.2015 12:01
Подскажите ,есть ли такой конвертер формул экселя в запросы sql и наоборот
например простейшее скулевское выражение
case when x1=1 then 'r' else 'e' end as 'так то'
тоже самое что
Если х1=1;r
ну я утрировано пишу.
Автор: Winand
Дата сообщения: 03.03.2015 10:33
Alex_B пришла идея, что можно отслеживать в каком месте ячейки сделан клик на событии SelectionChange. Не уверен, что это в принципе может помочь, но оставлю написанное тут.) Делал в 2013ом офисе, не уверен, что структура окон в других офисах такая же

Код: Private Function topix(ByVal points As Long) As Long
topix = points / 72 * 96
End Function

Sub xy_cell()
Dim pt As POINTAPI, hw As Long, hh As Long
CR = Selection.row
cc = Selection.Column

hw = 26 'Ширина хедера
hh = 20 'Высота хедера

Set wnd = ActiveWorkbook.parent.Windows(1)
lr = wnd.VisibleRange.row
lc = wnd.VisibleRange.Column
xldesk = FindWindowEx(Application.hwnd, 0, "XLDESK", vbNullString)
excel7 = FindWindowEx(xldesk, 0, "EXCEL7", vbNullString)
Set rng = Range(Cells(lr, lc), Cells(CR, cc))

GetCursorPos pt
ScreenToClient excel7, pt

cell_w = topix(Cells(CR, cc).Width)
cell_h = topix(Cells(CR, cc).Height)
cell_x = topix(rng.Width) - cell_w
cell_y = topix(rng.Height) - cell_h
Debug.Print pt.x - hw - cell_x, pt.y - hh - cell_y
End Sub
Автор: kok80
Дата сообщения: 03.03.2015 23:25
Сломал голову:
Office 2010
лист Excel->разработчик-> вставить-> Элементы ActiveX->другие элементы управления->windows Media Player

даю ему ссылку "http://translate.google.com/translate_tts?tl=en&prev=input&q=Hello"
играет, все в порядке
дяю ему ссылку на руский текст в utf-8
http://translate.google.com/translate_tts?tl=ru&q=%EF%F0%E8%E2%E5%F2
какую-то ботву говорит

если ссылку в броузере открыть - читает нормально

вот код, хотя он и не важен, ввожу в параметры в URL эту ссылку - тоже самое

Sub test()
Dim wmp As WindowsMediaPlayer
Set wmp = ThisWorkbook.Sheets(1).WindowsMediaPlayer1
wmp.URL = "http://translate.google.com/translate_tts?tl=ru&q=%EF%F0%E8%E2%E5%F2"
End Sub

гуглил, в яндексе искал - ничего не могу найти.

Добавлено:
Сломал голову:
Office 2010
лист Excel->разработчик-> вставить-> Элементы ActiveX->другие элементы управления->windows Media Player

даю ему ссылку "http://translate.google.com/translate_tts?tl=en&prev=input&q=Hello"
играет, все в порядке
дяю ему ссылку на руский текст в utf-8
http://translate.google.com/translate_tts?tl=ru&q=%EF%F0%E8%E2%E5%F2
какую-то ботву говорит

если ссылку в броузере открыть - читает нормально

вот код, хотя он и не важен, ввожу в параметры в URL эту ссылку - тоже самое

Sub test()
Dim wmp As WindowsMediaPlayer
Set wmp = ThisWorkbook.Sheets(1).WindowsMediaPlayer1
wmp.URL = "http://translate.google.com/translate_tts?tl=ru&q=%EF%F0%E8%E2%E5%F2"
End Sub

гуглил, в яндексе искал - ничего не могу найти.
Автор: Winand
Дата сообщения: 04.03.2015 08:15
kok80
Вы, если не ошибаюсь, передаёте строку в cp1251. Нормально получилось в utf-8 с указанием кодировки. Попробуйте url-encode-decode.com
url="http://translate.google.com/translate_tts?ie=UTF-8&tl=ru&q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82"
з.ы. контрол WMP можно положить на userform, чтобы не мешался на листе.
Автор: kok80
Дата сообщения: 04.03.2015 11:22
действительно с правильной UTF8 всё работает. Но с другой стороны - какая WMP разница в какой кодировке ему дают ссылку, его дело открыть. Броузер же нормально прослушивает, хотя может броузер что-то перекодирует
Автор: Futurism
Дата сообщения: 02.04.2015 22:18
Посдкажите, как написать макрос. в файле надо удалить все столбцы кроме столбца С и отображалась кнопка "удалить столбцы" жмешь и все удаляется)
Автор: Winand
Дата сообщения: 03.04.2015 09:42
Futurism удалить столбцы или только их содержимое?
Автор: Futurism
Дата сообщения: 04.04.2015 14:00
Winand
их содержимое.
Автор: Winand
Дата сообщения: 04.04.2015 14:50
привязать к кнопке макрос с кодом Range("A:B,D:XFD").ClearContents()
Автор: superpsih
Дата сообщения: 13.04.2015 10:42
Здравствуйте.
Подскажите пожалуйста как повесить на кнопку следующую процедуру:
Пользователь выделяет ячейки, нажимает на кнопку. К выделенным ячейкам применяется условие If (например если число в ячейке больше 1, то) и если условие выполняется, то ячейка заливается красным цветом, если нет, то жёлтым.
Автор: vikkiv
Дата сообщения: 13.04.2015 11:44
superpsih
Код: Sub test(): Dim r As Range, c As Range
Set r = Application.Selection: For Each c In r
If c > 0.5 Then c.Interior.ColorIndex = 3 Else c.Interior.ColorIndex = 6
Next c: End Sub
Автор: superpsih
Дата сообщения: 13.04.2015 13:53
Спасибо!
Автор: Fsp050
Дата сообщения: 13.04.2015 16:23
подскажите. вот для примера набор данных. Взял из головы
http://rghost.ru/8Q2fhh2DB
столбец A это id
B-фио
С номер кейса
D-состояние
E номер телефона

как можно сделать чтобы отобразились те данные, где
в столбце А тип number (4)

в столбце B тип varchar(20 char)
в столбце С тип varchar(12 char)
В столбце D тип number(1)
в столбце E тип number(11)
Автор: Winand
Дата сообщения: 14.04.2015 20:21
Fsp050
Я бы забил справа вот страшную формулу ниже и "заполнил вниз" до конца данных, затем можно отфильтровать по значению ИСТИНА.
=И(
ЕЧИСЛО(A1);ДЛСТР(A1)=4;
ЕТЕКСТ(B1);ДЛСТР(B1)<=20;
ЕТЕКСТ(C1);ДЛСТР(C1)=12;
ЕЧИСЛО(D1);ДЛСТР(D1)=1;
ЕЧИСЛО(E1);ДЛСТР(E1)=11
)
Автор: Fsp050
Дата сообщения: 15.04.2015 19:39
Winand
не-не, тут именно макросом надо) задачка так стоит)
Автор: Winand
Дата сообщения: 15.04.2015 22:06
Fsp050 ну например вот так. ищет и выводит в консоль не подходящие по условиям строки

Код: Sub findNotGood()
rs = Selection.Row
re = Selection.Row + Selection.Rows.Count - 1
For i = re To rs Step -1
good = True
v = Cells(i, 1)
If Not (Len(v) = 4 And IsNumeric(v)) Then good = False
If Not (Len(Cells(i, 2)) <= 20) Then good = False
If Not (Len(Cells(i, 3)) = 12) Then good = False
v = Cells(i, 4)
If Not (Len(v) = 1 And IsNumeric(v)) Then good = False
v = Cells(i, 5)
If Not (Len(v) = 11 And IsNumeric(v)) Then good = False
If Not good Then
Debug.Print i, "not good"
End If
Next i
End Sub
Автор: Fsp050
Дата сообщения: 17.04.2015 11:30
Winand
макром запустил ,но что-то не сработало)
проверьте, плиз на этих данных
http://rghost.ru/7Tp5yPPXD
Автор: Winand
Дата сообщения: 18.04.2015 18:06
Fsp050 отнюдь. Во-первых, там нет ни одного значения в первом столбце длиной 4 знака.) Или вы под NUMBER(4) имеете в виду числа от 0 до 9999?
Автор: Fsp050
Дата сообщения: 19.04.2015 18:48
Winand
в этом файле, что я прислал там 104 строки))
берем А4 здесь 7,71, а намбер (4) подразумевает, что правильное то что тип числовой и имеет длину 4 знака

как бы сказать
Исходя из описанного ниже формата нужно выделить только корректные записи, т.е. записи такого вида.
Название поля    Тип (длина)    Обязательность
1    ID     number (4)     NOT NULL
2    FIO     varchar (20 char ) NOT NULL
3    Document     varchar (12 char NOT NULL
4    Type_phone number (1)     NULL
5    Phone    number (11)     NULL
Автор: Winand
Дата сообщения: 20.04.2015 08:20
Fsp050
дело в поле Document, который у меня должен был быть длиной ровно 12 символов.
Находит подходящие строки и выделяет жёлтым.

Код: Sub findGood()
Range("A:E").Interior.Pattern = xlNone
st = ActiveSheet.UsedRange.Row
For i = st To st + ActiveSheet.UsedRange.Rows.Count - 1
good = True
v = Cells(i, 1): If Not (Len(v) = 4 And IsNumeric(v)) Then good = False
If Not (Len(Cells(i, 2)) <= 20) Then good = False
If Not (Len(Cells(i, 3)) <= 12) Then good = False
v = Cells(i, 4): If Not (Len(v) = 1 And IsNumeric(v)) Then good = False
v = Cells(i, 5): If Not (Len(v) = 11 And IsNumeric(v)) Then good = False
If good Then _
Range("A" & i & ":E" & i).Interior.Color = vbYellow
Next i
End Sub
Автор: ptr73
Дата сообщения: 22.04.2015 08:19
Fsp050
А что вообще такое number(4)?
Вот с этого и нужно начинать.
Обычно под этим подразумевают число в котором не более 4 знаков перед запятой и 0 после запятой.
Т.е. тебе нужно:
1) проверить IsNumeric(v.Value)
2) проверить, что v.Value целое
3) проверить, что v.Value < 10000 и v.Value > -10000

а проверки типа Len(v) вообще вырезать, в крайнем случае оставить Len(v.Text) для строк


Автор: Bozoman
Дата сообщения: 29.04.2015 00:22
Заранее прошу не пинать))
Товарищи, подскажите пожалуйста как сделать чтобы макрос выделял строку над той где стоит курсор.
Автор: ptr73
Дата сообщения: 29.04.2015 05:49
включаешь запись макроса
переводишь курсор
выделяешь строку
останавливаешь запись макроса
изучаешь полученный код
PROFIT
Автор: KDPoid
Дата сообщения: 29.04.2015 05:54
Bozoman,
ActiveCell(0).Activate

Добавлено:
ptr73,
...Останавливаешь запись и видишь код макроса для вставания в конкретную ячейку, а не "на одну вверх от текущего положения".
Автор: ptr73
Дата сообщения: 29.04.2015 07:20

Цитата:
ActiveCell(0).Activate

и каким же образом здесь идёт выделение строки? а каким образом хочет выделять Bozoman?

Цитата:
видишь код макроса для вставания в конкретную ячейку

нет, видишь код для выделения строки
а уж как выделить нужную строку догадаться не сложно

Автор: KDPoid
Дата сообщения: 29.04.2015 08:00
Bozoman,
А, ну да, строку...

Код:
ActiveSheet.Rows(ActiveCell.Row - 1).Select

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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