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

» Excel VBA (часть 2)

Автор: MILL_YNKAS
Дата сообщения: 20.10.2008 12:20
ВСех приветствую. Имеется ситуация, которую не могу решить. Сам я не программер, но малость начал изучать.
Сама ситуация:
Имеется таблица Excel построенная на каких-то данных
ФИО ЧИСЛО
ПЕТР 54
СЕТР 34
и тд.
НА этих данных сделал круговую("кусковая") диаграмму. Теперь самое главное, мне нужно, чтоб при нажатии на кусок из диаграммы сработала гиперссылка.
КАк это сделать ?


p.s. Воспользовался записью макросов. Вот что он пишет когда я кликаю на куске из диаграммы:

Sub Макрос2()
'
' Макрос2 Макрос


ActiveSheet.ChartObjects("Диаграмма 2").Activate
ActiveChart.SeriesCollection(1).Points(3).Select
End Sub

Но как определиться, что человек кликнул(onClick какой-то должен быть) не знаю

В общем жду подсказок для решения моей задачи.
Автор: WowGun
Дата сообщения: 20.10.2008 15:16
MILL_YNKAS
это, скорее всего, надо писать обработчик нажатия клавиши мыши ... или поискать в сети где-нить готовый ... и туда прикручивать проверку названия диаграммы, потом названия или номера конкретного КУСКА .... и тогда лепить гиперссылку ...

не совсем простое занятие ... но вполне можно сделать ...
Автор: 5tas
Дата сообщения: 20.10.2008 15:59
http://forum.ru-board.com/topic.cgi?forum=33&topic=8273&start=859&limit=1&m=1#1
Подскажите пожалуйста, как обратиться к полученной библиотеке из другой процедуры.
Автор: MILL_YNKAS
Дата сообщения: 20.10.2008 18:51
WowGun
Мдееее. Значит гиблое дело . Так как я новичок в этом деле.
Автор: q1wed
Дата сообщения: 20.10.2008 18:51
MILL_YNKAS Вот что нарыл методом проб и ошибок. Имеем табличку: Петя, Ваня, Света. Строим диаграмму, обязательно помещаем её на отдельный лист. Вставляем следующий макрос:
Код: Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
Select Case Arg2
Case 1
MsgBox ("Петя")
Case 2
MsgBox ("Ваня")
Case 3
MsgBox ("Света")
End Select
End Sub
Автор: MILL_YNKAS
Дата сообщения: 20.10.2008 18:54
q1wed
Спасибо, опробую завтра. Уже домой с работы ухожу. Завтра отпишусь.
Автор: bdfy
Дата сообщения: 20.10.2008 19:51
из смежной ветки по екселю переношу
вот есть в ексель понятие абсолютной ссылки. т.е типа $A$1. вопрос - есть ли комбинация клавиш чтобы в формулу вставлялся адрес ячейки в абсолютном формате, т.е $A$1, а не A1 просто. ибо руками при необходимости каждый раз дописывать ой как неудобно...
может можно сделать макрос который бы в зависимости от нажатости Ctrl (например) вставлял абсолютную ссылку ?
Автор: crotoff
Дата сообщения: 21.10.2008 08:36
bdfy
ставишь курсор на A1 в строке формул и жмёшь F4 (несколько раз и $ будет меняться циклично)
Автор: bdfy
Дата сообщения: 21.10.2008 17:14
crotoff
уже обсуждали. да лучше чем руками набивать но все таки не то. хочется чтобы при клике на ячейку на которую ссылаюсь - ссылка на нее сразу вставлялась в нужной форме.
Автор: MILL_YNKAS
Дата сообщения: 21.10.2008 17:22
чего-то ничего не получается .
Автор: q1wed
Дата сообщения: 21.10.2008 18:04
bdfy на самом все сводится к тому чтобы изменить макрос который я по ссылке давал и немного изменить начало - чтоб срабатывание происходило на выделенном диапазоне по нажатии чего либо.
MILL_YNKAS ну могу выложить файл, пробовал в 2007 и 2003 офисе - макрос работает.
Автор: CEMEH
Дата сообщения: 21.10.2008 22:18
q1wed

Цитата:
ПОДПРОГРАММА

Спасибо! Оказывается как все просто!
И еще: При переходе в подпрограмму переменные обнуляются? Так и должно быть? Есть какое-нить средство от этого?
Автор: Snym
Дата сообщения: 22.10.2008 09:12
Здравствуйте! Прошу о помощи... Есть лист .xls, нужно из него сделать выгрузку в файл .txt в следующем формате:
! 0000 559 01 08 06 1557;
Автор: Fynjy257
Дата сообщения: 22.10.2008 10:04
Добрый день!
может быть такой вопрос уже повторялся тут, но я что то не нашел. Яндекс привел сюда. Надеюсь, что местные гуру Excel мне помогут.
Необходимо удалить каждую вторую строчку из массива данных. Google посоветовал мне вот такой макрос:
-------------------------------------------------------------------------
Sub Delete_Every_Other_Row()

' Переменные размерности.
Y = False ' Измените значение на True, если необходимо
' удалить строки 1, 3, 5 и т.д.
I = 1
Set xRng = Selection

' Цикл по всем строкам выделенного диапазона.
For xCounter = 1 To xRng.Rows.Count

' Если Y = True, тогда...
If Y = True Then

' ...удалить целую строку ячеек.
xRng.Cells(I).EntireRow.Delete

' В противном случае...
Else

' ...увеличить переменную I на единицу и продолжить выполнение цикла по диапазону ячеек.
I = I + 1

End If

' Если Y = True, изменить значение на False; если Y = False, изменить значение на True.
Y = Not Y

Next xCounter

End Sub
--------------------------------------
Однако он не работает, то есть работает, но удаление происходит как то странно - удаляются так же и необходимые данныею. например 200 строк, в которых полезных данных 100. после реализации макроса остаются 100 строк, но уже с полезными данными 50.
Вот такая беда.
Автор: q1wed
Дата сообщения: 22.10.2008 11:56
Fynjy257 Я канешн не Гуголь, но предлагаю использовать макрос попроще
Код: Sub удалить_строки()
For i = 1 To 100
Rows(i).Delete
Next
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 22.10.2008 12:54
q1wed
не, так нечестно. Это хакерские приёмы.. да ещё и не наглядно... А если нужно будет каждую третью строку удалять? всё, кирдык?
да и вообще, при удалении строк всегда лучше цикл крутить снизу вверх...
вот так, например (удалить каждую вторую строку начиная с 21 и заканчивая 1-й):

Код: Sub DelRow()
Dim i%
For i = 21 To 1 Step -2
Rows(i).Delete
Next
End Sub
Автор: q1wed
Дата сообщения: 22.10.2008 13:18
SERGE_BLIZNUK ну согласен что не наглядно, но сам же говорил: проще надо быть;).
Для удалить через три: For i = 1 To 12 Step 2, где 12 (кол-во_строк)-(кол-во_строк)/3

Цитата:
Step -2
Спасибо, не думал о том что шаг может быть отрицательным.
PS Согласен, что твой метод универсальней моего и в общем случае проще

Автор: MaximuS G
Дата сообщения: 22.10.2008 14:40
Всем добрый день!
Может кто знает, почему в Outlook нельзя объявить обработчик событий, типа так:
Private WithEvents olInboxItems As Items
Выдает ошибку: Only valid in object module
И тоже самое - нельзя создать модуль с таким же именем... Плз Хелп.. СПС

Добавлено:
Вопрос снимается... добавил строку в Class Module, теперь ошибки нет, но код все равно ни фига не работает , есть ли сдесь или на forum.ru-board спецы по withevents ? Все топики по outlook старые...
Автор: terehoff777
Дата сообщения: 22.10.2008 16:45
Доброго дня!

Очень нужен макрос. Задача такая: В первом столбце EXCEL в каждой ячейке есть набор слов - количество разное, длина слов разная. Нужно во второй столбец в каждую ячейку проставить последнее слово из ячейки первого столбца т.е. найти последний пробел и оставить текст ПОСЛЕ него.

ПРИМЕР!

Исходный столбец (A) Результат (B)
Вешалка 60 см 3224-31 3224-31
Вешалка 60 см 8924А-26С-08 ...


Помогите пожалуйста, заранее благодарен!
Автор: 5tas
Дата сообщения: 22.10.2008 17:23
Добрый вечер.
Макрос сравнивает имена в двух книгах и, если они совпадают, то он копирует имена и и числовое значение из соседней ячейки в одну из сравниваемых книг на другой лист. Но проблема в том, что значение rowLast определяется неправильно, если активен файл "2008 Sep.xls", а если активен "Имена сотрудников1.xls", то неправильно определяется значение rowLastpp. Из-за этих неправильных значений сравниваются не все значения. Скажите пожалуйста, что можно сделать.:

Код: Sub Mail()
Dim w1, w2, w3 As Worksheet
Dim rowLast, rowLastpp, iiRow, iRow As Long
Dim n As Integer
Set w1 = Workbooks("Имена сотрудников1.xls").Worksheets("Names")
Set w2 = Workbooks("2008 Sep.xls").Worksheets("2008 Sep")
Set w3 = Workbooks("Имена сотрудников1.xls").Worksheets("Лист4")
rowLast = Cells(w1.UsedRange.Rows.Count + 1, "A").End(xlUp).Row
rowLastpp = Cells(w2.UsedRange.Rows.Count + 1, "A").End(xlUp).Row
MsgBox rowLast
MsgBox rowLastpp
w3.Cells(1, "A").Value = "Пользователи"
w3.Cells(1, "B").Value = "Полученный траффик (почта)"
n = 3
For iiRow = 1 To rowLastpp
For iRow = 1 To rowLast
If w2.Cells(iiRow, "B").Value = w1.Cells(iRow, "A").Value Then
w3.Cells(n, "A").Value = w2.Cells(iiRow, "B").Value
w3.Cells(n, "B").Value = w2.Cells(iiRow, "D").Value
n = n + 1
End If
Next iRow
Next iiRow
End Sub
Автор: nopoxz
Дата сообщения: 22.10.2008 17:27
Добрый день.

Хочу сделать так, но конфликт с символами "" :

Код:
Activecell.Value = "OOO"KUKU""
Автор: CEMEH
Дата сообщения: 22.10.2008 18:25
nopoxz

Код:
' так
A="""
Activecell = "OOO" & A & "KUKU" & A
'или так
Activecell = "OOO""KUKU"""
Автор: CMD
Дата сообщения: 22.10.2008 19:26
Подскажите как получить букву столбца активной ячейки.
Номер столбца очень просто (ActiveCell.Column), а вот букву??
Автор: q1wed
Дата сообщения: 22.10.2008 19:29
terehoff777 если в первом столбце список, то во втором столбце для первых трех строк этот макрос выведет последнее "слово" из первого столбца

Код: Sub Right_Word()
For i = 1 To 3
Cells(i, 2) = Right(Cells(i, 1), Len(Cells(i, 1)) - InStrRev(Cells(i, 1), " "))
Next
End Sub
Автор: q1wed
Дата сообщения: 23.10.2008 03:26
CMD показательный макрос по твоему вопросу:
Код: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox (Selection.Address() & vbCr & Selection.Address(RowAbsolute:=False, ColumnAbsolute:=False) & vbCr & Selection.Address(ReferenceStyle:=xlR1C1))
End Sub
Автор: CMD
Дата сообщения: 23.10.2008 06:10

Цитата:
CMD показательный макрос по твоему вопросу:

сделал так:
MsgBox Left(ActiveCell.Address(False, False), 1 - (ActiveCell.Column > 26))
Автор: q1wed
Дата сообщения: 23.10.2008 06:35

Цитата:
1 - (ActiveCell.Column > 26)
почему (1 - True)=2 ? То есть почему True = -1, а не 1?
Автор: MILL_YNKAS
Дата сообщения: 23.10.2008 09:31
q1wed
Спасибо, я понял. У меня макрос не на (Диаграмма1.Диаграмма1.) как у тебя, а на лист было сделано, дурень Я

Сейчас у себя переделал и заработало )

p.s. Единственное, что не удобно, придётся сделать 10 закладок с типом ДИАГРАММа . Раньше было 10 диаграмм на одном листе.
Автор: nopoxz
Дата сообщения: 23.10.2008 13:05
CEMEH, спасибо.

q1wed, не работает.


Автор: 5tas
Дата сообщения: 23.10.2008 20:06
q1wed
Спасибо, тепрь всё работает как надо

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


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