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

» Excel VBA (часть 2)

Автор: Voyager69
Дата сообщения: 10.02.2009 10:37

Цитата:
Private Sub Worksheet_Activate()

If [A2] > [B2] And [A3] > [B3] And [A4] > [B4] Then [C2:C4].Interior.ColorIndex = 3

End Sub


Спасибо, а как чтоб сразу считала при открытии документа, а не смене листа?
То же в Private Sub Workbook_Open() ?
Автор: DAD
Дата сообщения: 10.02.2009 10:44
Помогите настроить макрос для пакетного удаления данных из таблицы. В примере на Лист1 в колонке А имеется список (40 ячеек), который образуется из формул. На Лист2 есть таблица. Задача: удалить все данные из таблицы которые есть в списке. Пытаюсь использовать:


Код: Sub Find_Replace()
Dim myCount As Long, J%

ActiveSheet.Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
myCount = Selection.Rows.Count
Dim NTM As String
For J = 1 To myCount
NTM = Sheets("Sheet1").Range("A2").Offset(J - 1, 0)
Application.Goto Reference:="MYRANGE1"
Selection.Replace What:=NTM, Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Next J
On Error Resume Next
End Sub
Автор: Solenaja
Дата сообщения: 10.02.2009 10:55
SAS888
всё правильно и все работает как надо. единственно что возникает после открытия сформированных файлов (это было и в непоправленном макросе): "Возникла ошибка и Excel удалил часть форматов, чтобы предотвратить повреждение книги. Тщательно проверьте форматирование книги."
При открытии исходной общей книги со всеми листами Excel не ругается ни на что.

Поэтому приходится открывать каждый раз сформированный файл - жать на кнопку ОК в окне ошибки и сохранять файл.
Автор: NUB01
Дата сообщения: 10.02.2009 11:11
SAS888

Цитата:
Можно, например, с помощью небольшой процедуры.


Спасибо,SAS888.
Немного не так сформулировал вопрос, но Cell.MergeArea.(Columns.Count и Rows.Count) - именно то, что мне было нужно. Да и процедура полезная.
Автор: SAS888
Дата сообщения: 10.02.2009 11:13
DAD
Не могу "залить" Ваш файл-пример. Но если я правильно понял, что из именованного диапазона "MYRANGE1" нужно очистить ячейки, значения которых совпадает с любым значением из столбца "A" листа "Sheet1", то можно так:

Код: Sub Find_Replace()

Application.ScreenUpdating = False
[MYRANGE1].Activate
With Sheets("Sheet1")
arr = .Range(.[A1], .Cells(Rows.Count, "A").End(xlUp)).Value
End With
For Each x In arr
[MYRANGE1].Replace What:=x, Replacement:="", LookAt:=xlWhole
Next

End Sub
Автор: SergK80
Дата сообщения: 10.02.2009 11:54

Код: MyVar = Trim(Worksheets(1).Cells(counter, 1).Value)
If Not (MyVar = "") Then
ПОИСК И ЗАМЕНА
Автор: MaximuS G
Дата сообщения: 10.02.2009 12:03
Жаль что тут нет фишки, как на других форумах - где рейтинг можна для пользователей повышать! У нас бы SAS888 был бы наверное чемпионом по количеству решенных задач
Автор: DAD
Дата сообщения: 10.02.2009 12:08
SAS888

Код: [MYRANGE1].Activate
Автор: SAS888
Дата сообщения: 10.02.2009 12:53
DAD

Цитата:
Activate method of Range class failed
Заменил...

Совершенно верно [MYRANGE1].Activate будет работать тогда, когда лист, содержащий этот диапазон активен. Либо добавить ссылку на этот лист. Либо Ваше решение. В принципе, эту строку можно заменить активацией листа с этим диапазоном. Сам диапазон активировать совсем не нужно.

Добавлено:
Voyager69

Цитата:
а как чтоб сразу считала при открытии документа, а не смене листа?
То же в Private Sub Workbook_Open() ?

Да. Только нужно добавить ссылку на требуемый лист. Например:

Код: Private Sub Workbook_Open()

With Sheets(2)
If .[A2] > .[B2] And .[A3] > .[B3] And .[A4] > .[B4] Then .[C2:C4].Interior.ColorIndex = 3
End With

End Sub
Автор: MaximuS G
Дата сообщения: 10.02.2009 14:34
У меня тоже вопрос:
Как можна задавать путь через диалоговое окно ? Тоесть не через inputbox, а в диалоговом окне, наподобие Открыть файл и Сохранить файл ?
И еще можна как-то влепить перебор листов вот сюда? For each Cell in Selection, типа так:

В "каждой ячейки" на "Листе 1" в диапазоне [А1:А10]
делать то-то...

чтоб не делать так:

For each Worksheet in ActiveWorkbook
For each Cell in Selection

Спасибо!
Автор: Voyager69
Дата сообщения: 10.02.2009 15:45
Подскажите, как организовать цикл до тех пор пока в ячейке Аn не пусто.
Т.е. как перебрать А1,А2,А3..Аn ?
Автор: kalinakrasnay
Дата сообщения: 10.02.2009 15:56
Voyager69,

Цитата:
Подскажите, как организовать цикл до тех пор пока в ячейке Аn не пусто.
Т.е. как перебрать А1,А2,А3..Аn ?

Если я верно поняла задачу, то так:

Код:
Dim i As Integer
i = 1
Do While Cells(i, 1) <> ""
'твои действия
'например, мое - выдача значений ячеек
MsgBox (Cells(i, 1).Value)
i = i + 1
Loop
Автор: Solenaja
Дата сообщения: 10.02.2009 16:29
Подскажите какая функция делает возможным вставку примечаний в не защищенную ячейку в защищенном листе
Автор: filemoto
Дата сообщения: 10.02.2009 16:39
а есть вообще возможность контролирования страницы на уровне редактирования, что когда введен в числовое поле текст отличный от numeric, возникала ошибка? или может иные какие способы есть?

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

хелп. задолбали уже юзеры, кто 4 введёт - это правильно, а кто по приколу ч, а потом невозможно подсчёты вести.
Автор: Voyager69
Дата сообщения: 10.02.2009 16:41

Цитата:
kalinakrasnay


Вроде то, что думалось. Попробую. Спасибо.
Автор: MaximuS G
Дата сообщения: 10.02.2009 17:07
filemoto
Ну в екселе это просто Данные - Проверка - Целое число
Если надо через код, запишите макрорекодером и посмотрите что предложит
Автор: Voyager69
Дата сообщения: 10.02.2009 17:54
Подскажите в чем ошибка приведения типов?

If [G49] - Date <= 30 Then ..... OK
If (Cells(Counter, 7).Value) - Date <= 30 ........ Type mismatch




Автор: aks_sv
Дата сообщения: 10.02.2009 22:37
Всем очень здрасьте!
Вычитал у Уокенбаха "Перемещение опции в списке элемента управления ListBox". Все вроде сделал, как у него, а не получается. В чем дело?
В данном разделе вы узнаете, как можно перемещать опции вверх и вниз в списке элемента
управления ListBox. В VBA подобный метод применяется для предоставления пользователю
возможности указать порядок просмотра элементов управления в диалоговом окне UserForm.
На рис. 14.13 показано диалоговое окно, которое содержит элемент управления L i s t B o x
и два элемента управления CommandButton. Щелчок на кнопке Вверх приведет к переме-
щению выделенной опции вверх по списку элемента управления ListBox. Щелчок на кноп-
ке Вниз приведет к перемещению выделенной опции вниз по списку.

И еще. Как сделать, чтобы вместе с перемещением элементов в ListBox перемещались данные и в таблице?
Заранее благодарен.
Пример
Автор: SAS888
Дата сообщения: 11.02.2009 04:42
MaximuS G

Цитата:
Как можна задавать путь через диалоговое окно ? Тоесть не через inputbox, а в диалоговом окне, наподобие Открыть файл и Сохранить файл ?

В Excel, в helpe по VBA посмотрите Application.FileDialog, а так же методы Application.GetOpenFilename и Application.GetSaveAsFilename. Не вижу смысла переписывать оттуда сюда. Возникнут проблемы - спрашивайте.
Цитата:
влепить перебор листов вот сюда
Если на всех листах в одном и том же диапазоне, то лучше так:

Код: Dim i As Integer, Cell
For i = 1 To Sheets.Count
With Sheets(i)
For Each Cell In .[A1:A10]
'Ваш код
Next
End With
Next
Автор: aks_sv
Дата сообщения: 11.02.2009 07:23
SAS888
Спасибо за оперативный ответ. Только "Up" работает нормально, а "Down" смещает на одну позицию. И еще. А если количество записей неизвестно?
Автор: SAS888
Дата сообщения: 11.02.2009 08:02
aks_sv

Цитата:
"Up" работает нормально, а "Down" смещает на одну позицию.

Что значит смещает? Может быть Вы имеете ввиду, что при перемещении вверх, перемещается и выделенное значение в ListBox, а при перемещении вниз, выделение остается на месте? Если так, то не вопрос - сделаем, а если нет, то объясните подробнее, что происходит не так.

Цитата:
А если количество записей неизвестно?

Здесь реализованы Ваши пожелания.
Автор: aks_sv
Дата сообщения: 11.02.2009 08:46
SAS888
Огромное спасибо! Все отлично работает.
А в предыдущем примере отсутствовало:
If Mov = "Down" Then ListBox1.ListIndex = ListBox1.ListIndex + 1


Автор: Solenaja
Дата сообщения: 11.02.2009 09:04
SAS888
а без вставки в модуль этого нельзя реализовать?
сейчас пароли на листах ставятся так:

Код: Sub protect()

Dim PWORD As String
PWORD = "123"
For Each WkSht In Worksheets
WkSht.protect Password:=PWORD, AllowFormattingCells:=True
WkSht.EnableSelection = xlUnlockedCells
WkSht.EnableOutlining = True
Next WkSht
End Sub
Автор: SAS888
Дата сообщения: 11.02.2009 09:30
Solenaja

Цитата:
а без вставки в модуль этого нельзя реализовать?

А что? Есть проблемы? Если защита с паролем, то переменную PWORD нужно определить не в Вашем коде (убрать строку Dim PWORD As String), а в любом программном модуле как
Код: Public PWORD As String
Автор: Solenaja
Дата сообщения: 11.02.2009 10:09
SAS888
проблема в том, что макросы на сервере по умолчанию отключены, юзеры работают с Excel в терминале
Автор: SAS888
Дата сообщения: 11.02.2009 10:50
Solenaja

Цитата:
проблема в том, что макросы на сервере по умолчанию отключены

Тогда Вам Сюда. Может чем помогут.
Автор: MaximuS G
Дата сообщения: 11.02.2009 11:31
SAS888

Спасибо! Сделал через application.filedialog(msoFileDialogFolderPicker) !
Автор: Solenaja
Дата сообщения: 11.02.2009 13:18
SAS888
тк нужен макрос - значит здесь и стандартными методами сразу для целой кучи листов этого не сдеаешь
надо просто чтобы макрос выполнил единоразово действие назначения незащищенным ячейкам возможность добавления примечаний, форматирования и т.д. (это делается в моем Excel), т.е. чтобы макрос не сидел в структуре самого документа, т.к. пользователь работает с Excel, в котором макросы отключены и включить он их не может.
Автор: TXP
Дата сообщения: 11.02.2009 13:19
Интересует следующие как на основании имеющихся данных найти и выделить ячейку, например в ячейке:
А1 указан номер столбца,
В1 указан номер строки.
нужно найти и выделить ячейку по приведенным координатам.

Либо как вариант в ячейке "А1" с помощью фукции АДРЕС указывается месторасположение необходимой ячейки например "С16", как данные из ячейки "А1" вставить в код
Автор: xellga
Дата сообщения: 11.02.2009 13:38
Помогите пожалуйста написать программу к задаче по VBA в Excel:
Написать программу в которой вводится натуральное число n, а затем последовательность из n чисел; определяется, есть ли в последовательности отрицательные числа, и выдается соответствующий ответ.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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