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

» Excel VBA (часть 2)

Автор: q1wed
Дата сообщения: 20.09.2008 13:31
понавтыкай в разные места MsgBox - и смотри где сработает, а где нет, а еще надо значения проверить для этого делай типа MsgBox (Range("D20").Value). Макрос3 и Макрос7 тож надо проверить - я считаю что в них чтото. Образец смотрел уж больно что то все намудрено - разбираться не стал
Автор: Pravoved90
Дата сообщения: 20.09.2008 14:11
Вот е-мое. Нашел))Оказывается End if не поставил после события. Зато оно случайно стояло как лишнее после всех событитй, потому VBA и не показывал ошибку, а значение глючило)))

Подскажите, как задать в макрос такое.
Если A1 = "слово"
A2 = формуле: (A3*5/7))
Спасибо
Автор: Oyger
Дата сообщения: 20.09.2008 15:32
Pravoved90
If LCase(Range("A1").Value)=LCase("слово") Then Range("A2").FormulaLocal="=A3*5/7"
Автор: Pravoved90
Дата сообщения: 22.09.2008 12:57
Oyger
Благодарю за ответ. Так и есть))

Подскажите, как сделать в макросе примерно такое:
Если A1 = "слово", к цифре в A2 прибавляется 1.
Автор: chuda4ka
Дата сообщения: 22.09.2008 15:49
Добрый вечер!
Подскажите, пожалуйста, как в сводной таблице оставиьь в поле только
один элемент (Перебирать все элементв и ставить
pvt.pivotfield(1).pivotitem(i).visible = false для всех i кроме нужного
не очень-то хочется, так как слишком много элементов и каждый раз
обращаться к списку не хочется)
Автор: Pravoved90
Дата сообщения: 23.09.2008 12:21
Добрый день, Господа. Подскажите, будьте любезны, как саписать в макрос примерно такое:
Если Ячейка A1 = "слово", к цифре в значении A2 прибавляется 1.
Спасибо

Автор: Pravoved90
Дата сообщения: 23.09.2008 14:42
Сделал временный вариант:
Например, надо увеличить на 1 цифру в ячейке A1. Создаю макрос: Значение A1 копировать в B1. В A1 пишу формулу B1+1. Тогда при выполнении макроса получаю результат.
Но мне этот вариант кажеться немного безумным)). подскажите, если знаете лучший способ.
Автор: MaximuS G
Дата сообщения: 23.09.2008 15:21
Добрый день!
Подскажите пожалуйста следующий вопрос:
Есть ряд ячеек со значениями... мне нужно вытянуть эти значения в массив, и потом просматреть каждое значение на предмет запрещенных символов(для имени книг, листов и т.д.)... Что интрересует, как найти этот символ и как его заменить?..
Например range(1, 1).value = "привет/привет"
a = range(1, 1).value, теперь надо просматреть есть ли в значении символ "/", если да то заменить его на "-" например... значение ячейки менять нельзя, то-есть изменения только в самой программе... Спасибо за помощь!
Автор: q1wed
Дата сообщения: 23.09.2008 19:20
Pravoved90
If Range("A1").Value = "слово" Then Range("A2").Value = Range("A2").Value + 1

Добавлено:
MaximuS G чем не устраивают обычные формулы? PS значения исходных ячеек останутся не тронутыми
Автор: dneprcomp
Дата сообщения: 23.09.2008 19:25
MaximuS G
Используй функцию Replace
Автор: Pravoved90
Дата сообщения: 23.09.2008 20:25
q1wed
Огромное спасибо))Все работает как надо))
Автор: bomond5
Дата сообщения: 24.09.2008 05:48
очень срочно надо вот такой макрос:

есть лист экселя с колонками: е-мейл сотрудников (совпадает с именем), оборудование, с какой даты взято, когда обещали вернуть (эти самые сотрудники).

надо макрос, который бы при исполнении проверял текущую дату с датой возврата. если дата просрочена, то автоматически отправлял бы письмо этому сотруднику с наименованием этого оборудования, текущей датой и датой возврата.

да, у нас используется ексчейндж сервер для почты, поэтому настройки там менять нельзя.

заранее спасибо!
Автор: MaximuS G
Дата сообщения: 24.09.2008 08:39
q1wed

Цитата:
чем не устраивают обычные формулы? PS значения исходных ячеек останутся не тронутыми

dneprcomp

Цитата:
Используй функцию Replace


можна по подробней... ниже привел пример...схематично

For i = 1 to 4
arr(i) = sheets("1").cells(i , 3).value
next i

For i = 1 to 4
If в значении arr(i) есть елемент "/" then
символ "/" заменить на "-"
оставить в массиве под тем же номером
Else
Рассматрюем дальше
Next
Автор: Pravoved90
Дата сообщения: 24.09.2008 11:37
Добрый день господа. Помогите разобраться с таким действом. Вроде простая задачка, но немного запутался:

Есть список из, допустим, 10 значений. К каждому из них привязаны несколько своих макросов, которые в свою очередь зависят от слова в ячейке.
Задача состоит в следующем: После того, как я введу все необходимые значения в ячейки, двойным кликом по специально для этого созданной ячейке А1, запустить макросы для всех значений (естественно в соответствии с написанными в них словами).
Запутался в самих расстановках If. Если несложно напишите примитивный пример типа: Если дв.клик по А1 - выполнить макрос1(если В1 = "слово"), выполнить макрос2(если B1 = "слово2"), выполнить макрос3(если С1 = "слово3"),выполнить макрос4(если С1 = "слово4") и тд. по каждой ячейке.
Заранее благодарю за любую подсказку.
Автор: MaximuS G
Дата сообщения: 24.09.2008 12:01
В добавок к первому вопросу, если не сложно:

Private Sub Worksheet_Change(ByVal Target As Range)
что добавить, что бы макрос запускался при изменении КОНКРЕТНОЙ ячейки,
а не любой на листе ?
Автор: q1wed
Дата сообщения: 24.09.2008 12:10
Pravoved90 3 или уже 4 раз пишу тебе чтоб не использовал многочисленные If. Есть прекрасный оператор Select как раз предназначенный для того что бы в зависимости от большого кол-ва условий выполнять определеннное действие. Харэ уже игнорить это предложение!!!

Добавлено:

Код: Select Case Range("A1").Value
Case "слово1"
Макрос1
Case "слово2"
Макрос2
Case "слово3"
макрос3
Case "слово4"
макрос4
Case "слово5"
макрос5
Case "слово6"
макрос6
Case "слово7"
макрос7
Case "слово8"
макрос8
Case "слово9"
макрос9
Case "слово10"
макрос10
Case Else
MsgBox ("такого не предусмотрено")
End Select
End Sub
Автор: Pravoved90
Дата сообщения: 24.09.2008 12:27
q1wed
Пардон, пардон И не игнорирую, просто уже наштамповал этих If с сотню штук по всему документу, вот и не могу переключиться..
Благодарю за ответ. Пошел копаться))
Автор: q1wed
Дата сообщения: 24.09.2008 12:47
Експерты по VBA обратите пожалуйста внимание на мой вопрос вот на этой ветке
http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=5312&start=280#lt
Автор: WowGun
Дата сообщения: 24.09.2008 13:07
MaximuS G

If Target.Address = "$A$1" Then
MsgBox ("!!!")
End If
Автор: Oyger
Дата сообщения: 24.09.2008 13:21
q1wed
Создай массив. Закинь в него все вопросы с подпунктами и ответами, так, чтобы каждый элемент массива - билет и ответ на билет.
А дальше запусти цикл на случайное выдерание элементов из массива, пока они не отработают все и чтобы не повторялись.
Автор: MaximuS G
Дата сообщения: 24.09.2008 13:32
WowGun

Цитата:
If Target.Address = "$A$1" Then

Спасибо, не знал что надо ставить знак "$", в прошлом вашем примере не было его просто... А по-поводу первого вопроса не подскажите ? Он выше на несколько сообщений, про изменение знака "/"...
q1wed
Что нибудь скажите по тому же вопросу ?
Автор: Solenaja
Дата сообщения: 24.09.2008 13:33
SERGE_BLIZNUK

Цитата:
угу. имхо, легко. попробуйте, перед тем, где присвоение:

Код:if inStr(1,s,"'")<>1 then s = "'" & s
If WasChanged Then Cells(i, "A").Value = Mid(s, 1, Len(s) - 1)

а можете ткнуть носом куда вставлять, что-то не соображу и закрывать Ifы где?
Автор: q1wed
Дата сообщения: 24.09.2008 13:45
MaximuS G
http://slil.ru/26109157 этот файл делался по другому вопросу, и не я, но тебе он тоже подойдет (колонка ОК)

Добавлено:
Oyger
мне это надо в ворде.
в екселе я бы это сделал даже не прибегая к помощи макросов, но тогда возникнут проблемы с обратной вставкой в Ворд тк список преобразуется в таблицу.
Кхм, может тогда сделать макрос который бы в Ворде таблицу преобразовывал бы в список??
В ворде никогда маркосов не делал потому как то даже и не знаю как это....
Автор: MaximuS G
Дата сообщения: 24.09.2008 14:17
q1wed
Спасибо, но мне надо немного другое ... замена должна происходить в самой программе, без использования елементов книги (ячеек) ...
P.S. Хотя этого я тоже не знал
Автор: WowGun
Дата сообщения: 24.09.2008 15:00
MaximuS G

достаточно ПОДРОБНО

http://www.sql.ru/forum/actualthread.aspx?bid=46&tid=471234&hl=%f1%e8%ec%e2%ee%eb%fb
Автор: Oyger
Дата сообщения: 24.09.2008 15:21
q1wed
Опять предлагаю свое: заносишь ячейки таблицы в массив - далее запускаешь макрос и случайным порядком заново заполняешь эту таблицу из массива.
Автор: MaximuS G
Дата сообщения: 24.09.2008 15:38
WowGun
q1wed
Спасибо большое, но ... наверное я не правильно объясняю, сейчас
дам пример точнее...
допустим пользователь должен ввести через input какие 3 значения
он вводит мы поочереди заносим их в переменные
теперь у нас есть 3 значения переменных, нужно проверить в каких из них
есть запрещенные символы... Как это сделать ?
P.S. Нет никаких ячеек Все внутри кода
Спасибо за терпение
Автор: WowGun
Дата сообщения: 24.09.2008 16:01
MaximuS G
"он вводит мы поочереди заносим их в переменные" - а ЗАЧЕМ?
проверяйте КАЖДОЕ значение, например при потере фокуса конкретным полем .... и если в введеной строке ЕСТЬ какие-то НЕ нужные символы - или заставьте ПЕРЕПИСАТЬ или ИСПРАВЬТЕ ...
Автор: MaximuS G
Дата сообщения: 24.09.2008 16:24
WowGun
Ясненько, значит буду заменять через ячейки.
Спасибо
Автор: WowGun
Дата сообщения: 24.09.2008 16:46
MaximuS G
смотрите как удобнее .. а для текстового поля ..

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(TextBox1.Text, "/") Then
MsgBox ("!!!")
End If
End Sub

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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