How can I tell Excel to highlight rows by their row number. For instance, let’s say I wanted row 6, 10, 150, 201 highlighted. Thanks.
asked Jun 6, 2012 at 22:12
Here is another one based on Mote’s .EntireRow.Interior.ColorIndex
This one doesn’t restrict you to enter the row numbers but gives the user the flexibility to choose the rows at runtime.
Option Explicit
Sub Sample()
Dim Ret As Range
On Error Resume Next
Set Ret = Application.InputBox("Please select the rows that you would like to color", "Color Rows", Type:=8)
On Error GoTo 0
If Not Ret Is Nothing Then Ret.EntireRow.Interior.ColorIndex = 6
End Sub
FOLLOWUP
Is there a way to write the macro to read the row numbers from a list and highlight the rows?
Yes there is a way. Let’s say the list in Cell A1 to A10 then you can use this code
Option Explicit
Sub Sample()
Dim i As Long, sh As Worksheet
On Error GoTo Whoa
Application.ScreenUpdating = False
'~~> Set this to the sheet where the rows need to be colored
Set sh = Sheets("Sheet2")
'~~> Change Sheet1 to the sheet which has the list
With Sheets("Sheet1")
For i = 1 To 10
If Not Len(Trim(.Range("A" & i).Value)) = 0 And _
IsNumeric(.Range("A" & i).Value) Then _
sh.Rows(.Range("A" & i).Value).Interior.ColorIndex = 3 '<~~ Red
Next i
End With
LetsContinue:
Application.ScreenUpdating = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Reafidy
8,2505 gold badges49 silver badges81 bronze badges
answered Jun 6, 2012 at 23:25
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges
2
As an alternative to Motes’ answer, you can use conditional formatting.
Eg: select A1:J500, Conditional formatting >> New rule >> Use a formula…
For the formula enter: =OR(ROW()=6, ROW()=10, ROW()=150, ROW()=201)
answered Jun 6, 2012 at 22:38
Tim WilliamsTim Williams
150k8 gold badges96 silver badges124 bronze badges
0
For basic VBA code, you can always start recording a macro, perform the action, stop recording, look at what code was generated, and then clean that up to do what you want. For example, recording the action of highlighting a row (setting the value of Interior.Color) gives you:
Rows("13:13").Select
Range("C13").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
The selection commands and extraneous Interior properties can be removed giving you:
Rows("13:13").Interior.Color = 65535
Adding in the row multi-select:
Rows("6:6,10:10,150:150,201:201").Interior.Color = 65535
Summary:
- Record macro
- View Excel’s version
- Use/Edit what code you need
answered Jun 6, 2012 at 22:36
Steve KonvesSteve Konves
2,6283 gold badges24 silver badges44 bronze badges
1
objWB.Cells(rowNum,201).EntireRow.Interior.ColorIndex = 6
etc
answered Jun 6, 2012 at 22:16
MotomotesMotomotes
3,8941 gold badge25 silver badges24 bronze badges
1
Update: Didn’t realize the date on this, but thought I’d add this in since it was relevant to the chosen answer.
In addition to Siddharth Rout’s answer, since I don’t have enough rep to comment yet, you can dynamically figure out how many rows there are in your worksheet with these two lines. xlCellTypeConstants
could be changed to another XlCellType constant that you need, and the range can always be changed to accommodate to your spreadsheet.
Dim numRows As Integer
numRows = Range("A2", Range("A1048576").End(xlUp)).SpecialCells(xlCellTypeConstants).Cells.Count
answered Mar 17, 2015 at 19:56
KelsiusKelsius
4132 gold badges5 silver badges19 bronze badges
Sorry if it is not as concise or elegant as other answers, but it gets the job done. When I was writing code for my own application I needed to loop through my code. Also, instead of highlighting the entire row, I only needed to highlight a portion of the rows.
Sub Highlight()
Dim ThisWB As Workbook
Dim ThisWS As Worksheet
Dim rows(0 To 3) As Integer
Dim test As String
Set ThisWB = ActiveWorkbook
Set ThisWS = ThisWB.Sheets("Sheet1")
rows(0) = 6
rows(1) = 10
rows(2) = 150
rows(3) = 201
For i = 0 To 3
test = "A" & rows(i) & ":H" & rows(i)
ThisWS.Range(test).Interior.ColorIndex = 15
Next i
End Sub
answered Jun 28, 2016 at 19:45
Автор moland, 04 октября 2017, 13:50
Подскажите как выделить диапазон строк от a до b
Public a, b As Integer
Sub asd()
a = Range(«диапазон»).Rows(Range(«диапазон»).Rows.Count).Row
b= UsedRange.Rows.Count
Rows(«a:b»).Select
End sub
Почему когда стоят переменные в скобках не выделяет строки, а скажем Rows(a).Select работает.
a и b находит верно я проверял через msgbox.
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Не ответ на ваш вопрос, просто замечание по коду.
В VBA нужно указывать тип данных для каждой переменной. Правильно так:
Public a As Integer, b As Integer
В вашем же случае у переменной «a» тип данных «Variant», а не «Integer», как вы предполагали.
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Не ответ на ваш вопрос, просто замечание по коду.
В экселе 2007+ 1 млн строк на листе. Поэтому даже для цикла по строкам недостаточно типа данных Integer.
Поэтому правильно использовать тип данных Long:
Public a As Long, b As Long
Администратор
- Administrator
- Сообщения: 2,254
- Записан
В VBA, всё, что попадает внутрь кавычек становится обычным текстом. В этом коде внутри скобок уже не переменные, как вы думаете, а просто буквы «a» и «b»:
rows(«a:b»).Select
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Можно так выделить строки:
Public a As Long, b As Long
Sub asd()
a = Range(«диапазон»).rows(Range(«диапазон»).rows.Count).row
b = UsedRange.rows.Count
rows(a).Resize(b).Select
End Sub
Ок, спасибо.
В моем случае будет.
rows(a+1).Resize(b-а).Select
- Форум по VBA, Excel и Word
-
►
VBA, Excel -
►
VBA, макросы в Excel -
►
Excel VBA Макросы: Выделение строк через переменные
0 / 0 / 0 Регистрация: 23.06.2008 Сообщений: 36 |
|
1 |
|
25.06.2008, 02:16. Показов 26332. Ответов 2
как выделить всю текущую строку? Excel. если извесно, что в строке 5 ячеек? спасибо
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
25.06.2008, 02:16 |
2 |
Victory |
|
25.06.2008, 12:30 |
2 |
Если хочешь выделить всю строку пиши Rows(Activecell.row).select. |
TurboDuck 50 / 49 / 13 Регистрация: 23.11.2015 Сообщений: 401 |
||||
20.07.2016, 07:30 |
3 |
|||
0 |
На чтение 16 мин. Просмотров 533 Опубликовано 04.02.2021
Как указать Excel выделять строки по их номеру. Например, скажем, я хотел выделить строки 6, 10, 150, 201. Спасибо.
Вот еще один, основанный на .EntireRow.Interior.ColorIndex
Mote. ‘не ограничивает вас вводом номеров строк, но дает пользователю гибкость в выборе строк во время выполнения.
Option ExplicitSub Sample () Dim Ret As Range On Error Resume Next Set Ret = Application.InputBox («Пожалуйста, выберите строки, которые вы хотите раскрасить», «Цветные строки», Тип: = 8) При ошибке GoTo 0 Если нет Ret Is Nothing, то Ret.EntireRow.Interior.ColorIndex = 6End Sub
FOLLOWUP
Есть ли способ написать макрос для чтения номеров строк из список и выделить строки?
Да, есть способ. Скажем, список в ячейках от A1 до A10, тогда вы можете использовать этот код
Option ExplicitSub Sample () Dim i As Long, sh As Worksheet On Error GoTo Whoa Application.ScreenUpdating = False '~~> Установите это на лист, на котором нужно раскрасить строки. Set sh = Sheets ("Sheet2")' ~~> Измените Sheet1 на лист, который имеет список With Sheets ("Sheet1") For i = 1 До 10 Если не Len (Trim (.Range ("A" & i) .Value)) = 0 And _ IsNumeric (.Range ("A" & i) .Value) Then _ sh.Rows (.Range ("A "& i) .Value) .Interior.ColorIndex = 3 '
В качестве альтернативы ответу Motes вы можете использовать условное форматирование.
Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …
Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)
ответил 06 июня ’12 в 22:38
В качестве альтернативы ответу Моутса вы можете использовать условное форматирование.
Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …
Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)
Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, а затем очистить его, чтобы сделать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:
Rows ("13:13"). SelectRange ("C13" ) .ActivateWith Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0End With
Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:
Rows ("13:13"). Interior.Color = 65535
Добавление в строку нескольких выберите:
Rows ("6: 6,10: 10,150: 150,201: 201"). Interior.Color = 65535
Сводка:
- Запись макроса
- Просмотр версии Excel
- Используйте/редактируйте нужный код
ответил 6 июня ’12 в 22:36
-
+1 за подробный ответ 🙂 – Siddharth Rout 6 июня 2012, 23:18
добавить комментарий |
Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, и затем очистите это, чтобы делать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:
Rows ("13:13"). SelectRange ("C13" ) .ActivateWith Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0End With
Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:
Rows ("13:13"). Interior.Color = 65535
Добавление в строку нескольких выберите:
Rows ("6: 6,10: 10,150: 150,201: 201"). Interior.Color = 65535
Сводка:
- Запись макроса
- Просмотр версии Excel
- Используйте/редактируйте нужный код
objWB .Cells (rowNum, 201) .EntireRow.Interior.ColorIndex = 6
и т. Д.
отредактировано 24 февраля ’17 в 06:54
ответил 06 июня ’12 в 22:16
objWB.Cells (rowNum, 201) .EntireRow.Interior. ColorIndex = 6
и т. Д.
Обновление: не понял дату на этом, но подумал, что добавлю это, поскольку это имеет отношение к выбранному ответу.
В дополнение к Ответ Сиддхарта Роута, поскольку у меня пока недостаточно комментариев для комментариев, вы можете динамически определить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants
можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.
Dim numRows Как IntegernumRows = Range ("A2", Range ("A1048576"). End (xlUp)). SpecialCells (xlCellTypeConstants) .Cells.Count
ответил 17 марта 2015, в 19:56
Обновление: не понял дату на этом, но подумал, что добавлю это, так как это имеет отношение к выбранному ответу.
В дополнение к ответу Сиддхарта Роута, поскольку у меня еще недостаточно репутации для комментариев, вы можете динамически вычислить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants
можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.
Dim numRows Как IntegernumRows = Range ("A2", Range ("A1048576"). End (xlUp)). SpecialCells (xlCellTypeConstants) .Cells.Count
Извините, если он не такой краткий или элегантный, как другие ответы, но он выполняет свою работу. Когда я писал код для своего собственного приложения, мне нужно было перебрать мой код в цикле. Кроме того, вместо выделения всей строки мне нужно было выделить только часть строк.
Sub Highlight () Dim ThisWB As WorkbookDim ThisWS As WorksheetDim rows (0 to 3 ) As IntegerDim test As StringSet ThisWB = ActiveWorkbookSet ThisWS = ThisWB.Sheets ("Sheet1") rows (0) = 6rows (1) = 10rows (2) = 150rows (3) = 201For i = 0 To 3 test = "A" & rows (i) & ": H" & rows (i) ThisWS.Range (test) .Interior. ColorIndex = 15Next iEnd Sub
ответил 28 июня ‘ 16, 19:45
Извините, если он не такой краткий или элегантный, как другие ответы, но он выполняет свою работу. Когда я писал код для своего собственного приложения, мне нужно было перебрать мой код в цикле. Кроме того, вместо выделения всей строки мне нужно было выделить только часть строк.
Sub Highlight () Dim ThisWB As WorkbookDim ThisWS As WorksheetDim rows (0 to 3 ) As IntegerDim test As StringSet ThisWB = ActiveWorkbookSet ThisWS = ThisWB.Sheets ("Sheet1") rows (0) = 6rows (1) = 10rows (2) = 150rows (3) = 201For i = 0 To 3 test = "A" & rows (i) & ": H" & rows (i) ThisWS.Range (test) .Interior.ColorIndex = 15Next iEnd Sub
Вы можете добиться того же, используя условное форматирование
- помещаю список значений в столбец (я использую отдельную вкладку и даю списку имя)
- в условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
- прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)
ответил 5 августа 2016 в 14:43
Вы могли бы добиться того же, используя условное форматирование
- put list значений в столбце (я использую отдельную вкладку и даю списку имя)
- при условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
- прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
- правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)
Макрос VBA – выделение Строка для дополнений ИЛИ ячейка для изменений
Привет всем!
Хорошо, у меня есть шаблон для другого отдел, который я развиваю. Мне нужно добавить условное форматирование через VBA. Мне удалось найти код на форумах и модифицировать его. Он как есть соответствует одному из двух моих требований, но есть одно изменение, которое я хотел бы (диапазон). Мне просто нужен второй код или модификация этого кода. Я все еще новичок в кодировании Worksheet_Change. Код, который я нашел, работает для «часть 2 ниже»
Часть 1 – Любая НОВАЯ запись потребует выделения всей строки (я рекомендую оранжевым или желтым … без предпочтений).
– Диапазон данных – столбцы A – DD
– Количество строк будет меняться от недели к неделе, поскольку это глобальная книга (поэтому я бы предпочел не указывать конкретный диапазон)
– Ключевая ячейка, которая будет указывать на запись, в столбце C находится идентификатор сотрудника.
– Например, сейчас у меня 1377 строк данных
– Если я добавлю что-то в ячейку A1378 или B1378, моя “Часть 2 “VBA включится и выделит ячейку (цвет # 38) розовым или чем-то еще. Если данные были введены в ячейку C1378, то вся строка (A1378: DD1378) будет выделена желтым (или оранжевым).
– Я хочу, чтобы сценарий «добавления» запускался изначально
– Многие из этих ячеек являются формулами в других столбцах, вероятно, что другая ячейка в диапазоне AA: DD, хотя строка была добавлена, может потребовать от пользователя перезаписать ее.
– В этом случае строка будет желтый (или оранжевый), чтобы указать, что это была добавленная строка, но тогда он также может содержать несколько ячеек lpink для обозначения перезаписанных ячеек
Часть 2 – отдельные ячейки меняются на розовый (цвет # 38) при изменении.
– Во второй строке кода, мне бы хотелось это, если диапазон не ограничен
– Этот процесс существенно растет
– Расчет заработной платы за две недели имеет в отличии 25000 строк
– Диапазон может зависеть от того, имеет значение в столбце C
– Столбец C – это идентификатор сотрудника, который является движущей силой всех транзакций
- Private Sub Worksheet_Change (ByVal Целевой как диапазон)
- Const WS_RANGE As String = “A2: DD2500”
- При ошибке GoTo ws_exit:
- Application.EnableEvents = False
- Если не пересекается (Target, Me.Range (WS_RANGE)), то ничего не значит
- С целью
- .Interior.ColorIndex = 38
- Завершить на
- End If
- ws_exit:
- Application.EnableEvents = True
- End Sub
Показать больше
Привет ,
Может вы публикуете образец файла от 10 до 15 строк … (с анонимными данными …)
Мне кажется, что весь процесс необходимо пересматривать в свете ваших 650 000 записей в год …
Карим —-
Я создал частичный файл … не со всеми столбцами. Я думаю, что попал в колонку AD. Имена, адреса, имя сотрудников, ставки заработной платы … это все фиктивные данные, но они представляют собой тип даты, которая будет заполнена. Большинство типов данных, которые будут отображаться на этом листе, представляют собой числовые значения и суммы в долларах, а около 75% рабочего листа – формулы.. Теперь этот рабочий лист называется Sheet3 (хотя и не в этом примере), а кодовое имя также Sheet3. Я хотел бы иметь возможность использовать кодовое имя, а не имя листа, так как я не могу контролировать, решит ли пользователь переименовать лист.
Привет, Шерри,
Прикреплен ваш тестовый файл …
Быстро добавил щелчок правой кнопкой мыши, чтобы очистить все внутренние цвета …
Carim,
Работает отлично. Я скорректировал скрипт для
- Target .Row, 30
, которые у вас есть для моего файла примера до 108 столбцов для моего фактического файла. Он по-прежнему работал отлично. Но потом я понял, что когда люди добавляются, у меня есть сценарий, который копирует формулы во все строки с данными. И это работает отлично … за исключением того, что теперь у меня есть ваш замечательный скрипт выделения, форматирование было перезаписано, потому что мой скрипт “формулы” использует для этого это “Автозаполнение”. Есть ли лучший способ, чтобы этот сценарий мог копировать формулы (первая строка данных всегда – это строка 2, заголовки в строке 1) и копировать полностью вниз? Мне нравится ваш сценарий, и это именно то, что мне нужно. Как и этот скрипт для формул … Мне просто нужен способ, чтобы мой скрипт UpdateFormulas НЕ перезаписывал форматы, созданные вашим выделением. Как я, возможно, уже упоминал, этот шаблон предназначен для другого отдела, поэтому такие вещи должны быть на месте. Ниже мой код для обновления всех формул при добавлении данных. Пожалуйста, простите за грубое кодирование, поскольку я еще новичок.
- Sub UpdateFormulas ()
- ‘Оптимизация скорости макросов
- Application.ScreenUpdating = False
- Application.EnableEvents = False
- Application.Calculation = xlCalculationManual
- ‘Имя листа и расположение столбца, которые нужно удалить
- Sheet3.Select
- ‘Диапазон ячеек, в которых находятся формулы
- ‘ Должен существовать столбец для обозначения формулы.
- Диапазон (“I2”) .AutoFill Destination: = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AC2”). Назначение автозаполнения: = Range (“AC2: AC” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AJ2″). Назначение автозаполнения: = Range (” AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
- Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL ” & Ячейки (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AT2”). Автозаполнение места назначения ция: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“BH2: CH2”). Назначение автозаполнения: = Диапазон (“BH2: CH” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“CJ2: DD2”). Назначение автозаполнения: = Диапазон («CJ2: DD» и ячейки (Rows.Count, «B»). Конец (xlUp). Строка)
- ‘Имя листа и расположение столбца для удаления
- Sheet4.Select
- ‘Диапазон ячеек, в которых находятся формулы
- ‘ Должен существовать столбец для обозначения формулы.
- Диапазон (“I2”). Назначение автозаполнения : = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AC2”). Назначение автозаполнения: = Range ( «AC2: AC» и ячейки (Rows.Count, «B»). End (xlUp) .Row)
- Range («AJ2»). Назначение автозаполнения: = Range («AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
- Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL “& Cells ( Rows.Count, “B”). End (xlUp) .Row)
- Range (“AT2”). Назначение автозаполнения: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“BH2: CH2”). Назначение автозаполнения: = Range (“BH2: CH” & Cells (Rows.Count, “B “) .End (xlUp) .Row)
- Range (” CJ2: DE2 “). Назначение автозаполнения: = Range (” CJ2: DE “& Cells (Rows.Count,” B “) .End (xlUp) .Row)
- ‘активирует лист с определенным именем
- ‘Activ Включает вкладку «Основные» (Sheet2)
- Sheet2.Activate
- ResetSettings:
- ‘Сбросить настройки макрооптимизации
- Application.EnableEvents = True
- Application.Calculation = xlCalculationAutomatic
- Application.ScreenUpdating = True
- End Sub
Показать больше
ПРИМЕЧАНИЕ. Я просто проводил дополнительное тестирование кода выделения “добавить” и заметил кое-что, что я не знаю, сможете ли вы добавить. Если мы добавим Джона Смита, все его данные и формулы, строка будет оранжевой … но если одна ячейка должна быть перезаписана, она все равно должна измениться на розовый (эта одна ячейка), несмотря на то, что строка будет оранжевой. Перезапись отдельных ячеек в основном происходит, когда в ячейке есть формула, которая заменяется значением или другой формулой. Мы должны видеть их визуально, отсюда и розовый цвет. Я должен был это указать. Очевидно, вы не можете знать, о чем я думаю, извините за это.
Рад слышать, что вы движетесь в правильном направлении …
Что касается макроса UpdateFormulas … есть несколько возможностей …
Вы могли бы преобразовать свою базу данных в таблицу
Однако почему вы копируете из строки 2 полностью вниз?
Все существующие строки уже обновлены …
Запуск с последней использованной строки повысит производительность вашего листа …
Относительно вашего способа добавления новых записей: как это сделано …?
Мне нужно сохранить вещи в основном в том же формате, поскольку этот шаблон будет использоваться несколькими другими пользователями. В моей компании есть строгие протоколы.. даже глупые вещи. Чтобы преобразовать базу данных в таблицу, мне нужно получить разрешение от «сильных мира сего». Я мелкий подрядчик, поэтому мне сейчас нужно «раскрашивать между строк».
– Почему я копирую из строки 2 вниз для формул? Честно говоря, потому что я не знаю, как закодировать его для копирования из последней строки, содержащей формулы, вниз. Это был бы лучший способ. Но поскольку я еще новичок, а объем данных постоянно меняется, я просто понятия не имел. Я бы предпочел вставить формулы из последней строки существующей строки формул. Я согласен, начиная с последнего ряда формул была бы лучшая производительность, это сводится к недостатку знаний с моей стороны.
– Добавляя новые записи, я, честно говоря, не знаю, это не процесс, я полностью знаком с. Я – ОЧЕНЬ подробный процесс расчета заработной платы для государственных контрактов. Существует множество переменных, и иногда расчет формулы требует перезаписи в виде значения или исправленной формулы. Я просмотрел предыдущие книги, и там есть множество выделенных ячеек и строк, которые были раскрашены вручную для этой цели. Это происходит постоянно (и пользователи всегда выбирают ВСЮ строку, а не только 103 фактических столбца в пределах диапазона).
Моя роль – оптимизировать и автоматизировать процесс. Конечный пользователь тратит так много времени на форматирование, вставку столбцов, копирование и вставку формул из предыдущей книги, и этот список можно продолжить! Выделение измененных ячеек и строк
Честно говоря … мне вас очень жаль … !!!
Очень грустно (и почти невероятно …) слышать, что вы не имеете права использовать Excel таким образом, чтобы каждый мог работать более продуктивно …
Хочу пожелать вам удачи в попытках оптимизировать ваш процесс … в рамках наложенных на вас глупых ограничений …: smash:
Спасибо, Карим, за вашу помощь. Это очень ценится. И я согласен … Я тоже не мог в это поверить, когда я попытался внести некоторые простые изменения (по крайней мере, я так думал), и был отключен.
Не стесняйтесь приходить назад на форум … для новых вопросов … надеюсь, с меньшими ограничениями …: wink:
Карим,
Большое спасибо! Некоторые вещи требуют одобрения нашей штаб-квартиры в другой стране … и, честно говоря, это просто глупо! Но мне нужна зарплата. И да, я вернусь. Еще раз спасибо за вашу помощь!
~~ Шерри
Карим,
Надеюсь, вы можете помочь. Был изменен запрос на этот макрос выделения. Код ниже – это то, что вы мне предоставили в последний раз. Мне нужно, чтобы эти макросы выполнялись ТОЛЬКО, когда пользователь делает что-то ВРУЧНУЮ с книгой. Если пользователь запускает макрос для импорта или копирования данных на листы в книге, ничего не должно выделяться. Однако, если пользователь вручную добавляет новую строку в книгу, эта строка (столбцы A-DD) будет выделена оранжевым цветом (индекс цвета 46). Я провел UAT с пользователем сегодня, и мне посоветовали, что пользователь выберет похожую строку и скопирует/вставит эту строку в 1-ю пустую строку, чтобы пользователь вручную изменил любые особенности. В этом случае вся строка (A-DD) должна быть оранжевой, а затем, когда каждая ячейка будет изменена пользователем, только эти ячейки будут розовыми.
Пользователь копирует запись сотрудника, вставляет в новую строка. Затем меняет имя сотрудника, emp #, дату начала, должность и т. Д. Только те измененные ячейки розового цвета, остальные остаются оранжевыми. Возможно ли это?
- Option Explicit
- Private Sub Worksheet_Change (ByVal Target As Range)
- Если Target.Row = 1, то выйдите из Sub
- Dim i As Double
- i = ActiveSheet.Cells (Application.Rows.Count , “A”). End (xlUp) .Row
- Application.Calculation = xlCalculationManual
- Application.EnableEvents = False
- Если Target.Row> i Then
- Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = 46
- ElseIf Target.Row
- Target.Interior.ColorIndex = 38 ‘
- End If
- Application.EnableEvents = True
- Application.Calculation = xlCalculationAutomatic
- End Sub
- Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)
- ‘Щелкните правой кнопкой мыши, чтобы очистить цвета
- Если Target.Row = 1 Затем выйдите из Sub
- Dim i As Double
- i = ActiveSheet.Cells (Application.Rows.Count, “A”). End (xlUp) .Row
- Application.Calculation = xlCalculationManual
- Application.EnableEvents = False
- If Target.Row> i Then
- Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = xlNone
- ElseIf Target.Row
- Target.Interior.ColorIndex = xlNone
- End If
- Application.EnableEvents = True
- Application.Calculation = xlCalculationAutomatic
- Cancel = False
- End Sub
Показать больше
Шерри,
Как вы очень хорошо знаете, есть два типа макросов:
1. Стандартные макросы
2. Макросы событий
Стандарт требует, чтобы пользователь запускал запрос через меню, ярлык или кнопку
Макрос события запускается действием, выполняемым пользователем
Итак, самое первое решение, которое вы должны принять, – какой маршрут вы хотите выбрать …
Затем второе решение связано с тем, что именно вам нужно отслеживать … и, следовательно, выделять …
Надеюсь, это поможет
! Знаю ячейку, а как выделить всю строку?
- GAL
- Обычный пользователь
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
! Знаю ячейку, а как выделить всю строку?
Привет!
Люди, подскажите, пожалуйста..
Как выделить строку если я знаю ячейку в этой строке?
Заранее большое спасибо.
- uhm
- Продвинутый гуру
-
- Сообщения: 1597
- Зарегистрирован: 02.12.2004 (Чт) 15:21
uhm » 06.04.2005 (Ср) 10:38
Rows(номер_строки).Select
Если в строке есть ячейки, объединенные с другими строками, выделится несколько строк.
- GAL
- Обычный пользователь
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
GAL » 06.04.2005 (Ср) 10:49
Я не знаю номер строки.
Я немогу явно указать номер этой строки.
У меня в макросе запускается поиск, нахожу ячейку с таким-то содержимым и мне нужно выделить строку содержащую эту ячейку.
Есть такая возможность?
- GAL
- Обычный пользователь
-
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
GAL » 06.04.2005 (Ср) 10:52
Я незнаю номер строки.
Я немогу указать его явно.
У меня макрос ищет ячейку с таким-то содержимым и когда найдет мне нужно выделить строку содержащую эту ячейку.
Есть такая возможность?
- uhm
- Продвинутый гуру
- Сообщения: 1597
- Зарегистрирован: 02.12.2004 (Чт) 15:21
uhm » 06.04.2005 (Ср) 10:53
Да, если x — это твоя найденная ячейка, то она содержится в столбце x.Column и в строке x.Row. Соответственно, можешь выделить строку так:
Rows(x.Row).Select
- GAL
- Обычный пользователь
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
GAL » 06.04.2005 (Ср) 11:03
Да, так получилось.
Спасибо uhm!
- GSerg
- Шаман
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 06.04.2005 (Ср) 12:51
x.entirerow.select
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: Yandex-бот и гости: 2