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

» Excel VBA (часть 3)

Автор: BullVinkL
Дата сообщения: 25.06.2010 16:41
Добрый день.

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

Пока что остановился на этом

Sub macros1()
Columns("A:A").Select
Selection.Find(What:="-", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Select
End Sub

т.е. ищу значение по 1 колонке и выделяю его.

Тут я и застрял
Автор: vlth
Дата сообщения: 25.06.2010 18:28
BullVinkL

Код: Dim c As Range
Set c = Columns(1).Find(What:="-", LookIn:=xlFormulas, _
LookAt:=xlPart)
Range(Cells(c.Row, 1), Cells(c.End(xlDown).Row, 1)).Delete
Автор: ElchinAz
Дата сообщения: 26.06.2010 11:39
Здравствуйте. Как автоматически запустить макрос, при введении в ячейку недопустимого значения?
Автор: vlth
Дата сообщения: 26.06.2010 13:25
ElchinAz
Вы уверены, что нужен именно макрос? - может быть, достаточно "проверки данных"?
(Данные->Проверка...)
Автор: ElchinAz
Дата сообщения: 26.06.2010 14:03
Хотелось бы, чтоб при вводе определённого числа в данную ячейку, появлялось окно с сообщением. Вот макрос, только не работает.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "XXX" Then
MsgBox ("Ошибка!")
End If
End Sub

Добавлено:
Спасибо! Точно, можно и без макроса. )
Автор: filemoto
Дата сообщения: 26.06.2010 19:49
Hugo121
любопытный ход.
а как суммировать значения, если в полях они уже есть?
задача собрать данные с разных листов, в одном.
все листы-источники имеют одинаковые адреса ячеек со значениями.
Автор: oshizelly
Дата сообщения: 26.06.2010 20:35
Прошу знающих людей помочь с исправлением кода макроса. По моей слезной просьбе два отзывчивых человека наваяли и выложили в смежной теме варианты макроса для упрощенного создания комментариев.
Однако оба варианта имеют свои недостатки.
Вариант макроса, предложенный LaCastet не позволяет использовать в окне ввода клавиши навигации курсора, что очень сильно затрудняет жизнь.
Вариант, предложенный vlth, этого недостатка лишен. Но зато при вводе с клавы или вставке из буфера символов, содержащих диакритические знаки, например, немецкие буквы с умляутами Ä, Ö, Ü и пр., они почему-то отображаются и вставляются в документ в виде букв кириллицы.
Нельзя ли как-то доработать один из вариантов, чтобы устранить один недостаток, не добавляя при этом другой?
Заранее спасибо за помощь!
Автор: vlth
Дата сообщения: 27.06.2010 00:33
oshizelly, попробуйте это. (Форму нужно импортировать в проект - Ctrl + M).
Автор: Hugo121
Дата сообщения: 27.06.2010 00:43
oshizelly
Недовыход в варианте vlth - заменять эти символы в выходном стринге по-одному, например:
kom = InputBox("", "Введите комментарий", "пример")
kom = Replace(kom, "м", ChrW(291))
и так ниже все свои символы перечислите.
Написать кириллицей уже ничего не получится, эти символы будут заменены.
В комментарии будут нужные буквы, но в инпутбоксе к сожалению кириллица.
Ваши умляуты можете найти при помощи этого кода:
For i = 1 To 30000
Cells(i, 1).Value = ChrW(i)
Next i
Автор: filemoto
Дата сообщения: 27.06.2010 05:53
Hugo121
вот, чёрт, а почему пропал ваш пример решения моей задачи?
как бы это его вернуть?
Автор: vlth
Дата сообщения: 27.06.2010 10:08
filemoto

Цитата:
Hugo121
вот, чёрт, а почему пропал ваш пример решения моей задачи?
как бы это его вернуть?

Это про последнее сообщение на стр. 33?
Автор: surgutfred
Дата сообщения: 27.06.2010 12:35
Спецы, подскажите новичку.
Копирую значения ячеек с одного листа в другой:
Worksheets(period).Range("D2").Value = Worksheets(Otchet).Range("C3").Value
Все ок, но потом мне нада скопировать в ячейку, координаты которой заданы переменными, если делаю по аналогии
Worksheets(period).Range(stroka, Column).Value = Worksheets(Otchet).Range("C1").Value, то похоже не правильно делаю, т.к. получаю ругачку "Application-defined jr object-defined error"
stroka, Column - integer
Автор: Hugo121
Дата сообщения: 27.06.2010 12:42
Worksheets(Period).Cells(stroka, Column).Value = Worksheets(Otchet).Range("C1").Value
Автор: surgutfred
Дата сообщения: 27.06.2010 13:20
Hugo121, спс вроде пробовал cells сам, но видно где то неправильно указал что то, не прокатывало. Щаз идет.
Автор: BullVinkL
Дата сообщения: 28.06.2010 08:51
vlth
Спасибо, практически то что надо


Код: Dim c As Range
Set c = Columns(1).Find(What:="-", LookIn:=xlFormulas, LookAt:=xlWhole)
Range(Cells(c.Row, 1), Cells(c.End(xlDown).Row, 1)).EntireRow.Delete
Автор: filemoto
Дата сообщения: 28.06.2010 12:45
народ, я не понимаю, почему этот код не складывает значение в ячейках,

Set sSheet = Workbooks("Child").Worksheets(1)
Set dSheet = Workbooks("Main").WorkSheets(1)
For i = 1 to 2
sSheet.Range("A1:B2").Copy
dSheet.Range("A1:B2").PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
Next

Значения не прибавляются к тем, что уже есть, а просто заменяются...
Автор: LaCastet
Дата сообщения: 28.06.2010 13:01
filemoto

Цитата:
Значения не прибавляются к тем, что уже есть, а просто заменяются...

У меня всё нормально сделалось.
Автор: filemoto
Дата сообщения: 28.06.2010 13:26
LaCastet
да, странно,
но если файл новый открывать, то значения затираются...
ща буду тогда ковырять дальше...
Автор: oshizelly
Дата сообщения: 28.06.2010 17:06
Подскажите, как решить вот такую задачу. Если очень упрощенно: в столбце числовые значения, допустим, от 1 до 9, надо, чтобы каждое число отображалось своим цветом.
Первая мысль, конечно, условное форматирование, но Excel 2003 не позволяет задать более 3-х условий, а в этом примере их нужно 9.
(Кстати, я где-то читал, что есть какой-то способ при помощи программирования задать в условном форматировании более 3-х условий, но как именно - совершенно не запомнил, тогда не надо было.)

Кстати, еще вопрос на ту же тему. Можно ли при установлении условия условного форматировании для текстовых ячеек вместо критерия "равно" использовать критерий "включает" ("содержит")? Например, некоторые ячейки содержат текст "красные яблоки", а другие "зеленые яблоки", но нужно, чтобы и те, и другие отображались одинаково.

Спасибо!

Автор: vlth
Дата сообщения: 28.06.2010 18:55
oshizelly

Цитата:
Подскажите, как решить вот такую задачу. Если очень упрощенно: в столбце числовые значения, допустим, от 1 до 9, надо, чтобы каждое число отображалось своим цветом.
Первая мысль, конечно, условное форматирование, но Excel 2003 не позволяет задать более 3-х условий, а в этом примере их нужно 9.

В модуле листа:

Код: Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target, Range(Me.Cells(1, 1), Me.Cells(9, 1))) Is Nothing Then
For Each c In Target
With c.Font
Select Case c
Case 1: .ColorIndex = c + 2
Case 2: .ColorIndex = c + 2
Case 3: .ColorIndex = c + 2
Case 4: .ColorIndex = c + 2
Case 5: .ColorIndex = c + 2
Case 6: .ColorIndex = c + 2
Case 7: .ColorIndex = c + 2
Case 8: .ColorIndex = c + 2
Case 9: .ColorIndex = c + 2
Case Else: .ColorIndex = xlAutomatic
End Select
End With
Next
End If
End Sub
Автор: vlth
Дата сообщения: 28.06.2010 21:04
Забыл указать в пояснении: Range(Me.Cells(1, 1), Me.Cells(9, 1))) задаёт диапазон A1:A9
Автор: KolyaP
Дата сообщения: 29.06.2010 15:33
Хотелось бы узнать как удаленно работать с диапозонами не активируя книгу, в которой они находятся.

Например
Текущая книга "a2.xls"

Workbooks("a1.xls").Worksheets("Товары").Range(Cells(2, 13), Cells(max_pos, 13)).ClearContents

не работает.
Автор: Johnson Finger
Дата сообщения: 29.06.2010 15:48
KolyaP - не верно Я тоже в свое время долго трахался над возможностью удаленного управления книгой, без её активации.
Итак, переиначивая твой макрос:

Range(Workbooks("a1.xls").Sheets("Товары").Cells(2, 13), Workbooks("a1.xls").Sheets("Товары").Cells(2, 2)).ClearContents



Координаты Cells подставляй уже сам, т.к. я не знаю, какая координата у тебя подразумевается под max_pos, поэтому в моем примере макрос просто удаляет фиксированный диапазон.
Автор: KolyaP
Дата сообщения: 29.06.2010 16:00
Johnson Finger
Спасибо!

Вы уверены, что нет ошибки?
Попробовал, Ваш пример не работет.
Автор: vlth
Дата сообщения: 29.06.2010 16:26
oshizelly

Вопрос из Excel FAQ (часть 5)

Код: Dim oCell As Range, oFont As Font

Set oFont = Me.Styles("Normal").Font
For Each oCell In Selection
With oCell.Font
.Size = oFont.Size
.Bold = oFont.Bold
.Name = oFont.Name
.FontStyle = "normal"
.Strikethrough = oFont.Strikethrough
.Superscript = False
.Subscript = False
.OutlineFont = oFont.OutlineFont
.Shadow = oFont.Shadow
.Underline = oFont.Underline
.Color = oFont.Color
End With
Next
Автор: KolyaP
Дата сообщения: 29.06.2010 18:04
Вот пример буквальный

Public Sub hjj()
Range(Workbooks("pivot1.xls").Sheets("Òîâàðû").Cells(2, 13), Workbooks("pivot1.xls").Sheets("Òîâàðû").Cells(500, 13)).ClearContents
End Sub

Выдает Run-time error 1004

Книга и лист существуют.
VB 6.3
Автор: vlth
Дата сообщения: 29.06.2010 18:27
KolyaP
Попробуйте
Код: With Workbooks("pivot1.xls").Worksheets("Товары")
Range(.Cells(2, 13), .Cells(500, 13)).ClearContents
End With
Автор: ElchinAz
Дата сообщения: 29.06.2010 22:50

Цитата:
Вы уверены, что нужен именно макрос? - может быть, достаточно "проверки данных"?
(Данные->Проверка...)

Не получается, если требуется выполнение двух условий. В Проверке невозможно ставить выполнение условий, только конкретные данные. Пробовал использовать побочную ячейку, не получается.
Автор: KolyaP
Дата сообщения: 29.06.2010 22:52
Ошибка возникает, но она не подсвечивается интерпретатором в редакторе.

Возникает диалоговое окно с надписью
Run-time error '1004':

Application-defined or object-defined error
Автор: vlth
Дата сообщения: 29.06.2010 23:04
ElchinAz
Цитата:
В Проверке невозможно ставить выполнение условий, только конкретные данные
Это не так. Используйте формулу (выбирайте в комбобоксе не 'Значение', а 'Формула').

KolyaP
Цитата:
Ошибка возникает, но она не подсвечивается интерпретатором в редакторе
Пройдите код пошагово, тогда сможете конкретизировать источник ошибки.


Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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