powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь с макросом VBA для excel
9 сообщений из 9, страница 1 из 1
Нужна помощь с макросом VBA для excel
    #37234756
Lainur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, я новичек в программировании на VBA. При написании макроса у меня возникла проблема, которую не получается решить самостоятельно. Надеюсь кто-нибудь сможет помочь. Суть проблемы:
Мне задать для ячейки условное форматирование. Т.к. адрес ячейки заранее неизвестен, формула для форматирования вычисляется каждый раз заново:
Код: plaintext
1.
2.
ColumnName$ = Cells(C.Row +  1 , PotCol1 +  5 ).Address
ColumnName2$ = Cells(C.Row +  1 , C.Column).Address
ColumnName$ = "=" + ColumnName2$ + "<=" + ColumnName$ + "*0,5" 
Далее применяю данную формулу для условного форматирования ячейки, избавляясь от $, для того чтобы "протянуть" потом формулу до нужных ячеек.
Код: plaintext
Range(Cells(C.Row +  1 , C.Column).Address).FormatConditions.Add Type:=xlExpression, Formula1:=Replace(ColumnName$, "$", "")
Проблема заключается в следующем. При избавлении от $ выражения в формуле заменяются на "абракадабру":
До попадания в ячейку
Код: plaintext
ColumnName$="=$K$8<=$J$8*0,5"
После попадания в ячейку, при просмотре условия оно таково:
Код: plaintext
=K64725<=J64725* 0 , 5 
Пробовал убирать 2-й $, чтобы операторы выражения имели вид: $K8 - то же самое.

Причем выше в програме при применении формулы к ячейке, все нормально:
Код: plaintext
Range(Cells(C.Row +  1 , C.Column +  1 ).Address).Formula = Replace("=IF(" + ColumnName2$ + "<" + ColumnName$ + ",1,0)", "$", "")

Если кто-то решал подобную проблему, буду рад помощи.
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37234782
Lainur,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
With Cells(C.Row +  1 , C.Column)
	.FormatConditions.Add Type:=xlExpression, _
	        Operator:=xlLessEqual, _
	        Formula1:="=" + .Address(False, False), _
	        Formula2:="=0.5*" + Cells(.Row, PotCol1 +  5 ).Address(False, False)
' Насчет выделенного не уверен, возможно в 0.5 надо запятую, а не точку
End With
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37234791
Lainur,
упс... Неверно написал. Исправляюсь.
Код: plaintext
1.
2.
3.
4.
5.
With Cells(C.Row +  1 , C.Column)
	.FormatConditions.Add _
	Type:=xlExpression, _
	Formula1:= "=2*" + .Address( 0 ,  0 ) + "<=" + Cells(.Row, PotCol1 +  5 ).Address( 0 ,  0 ) 
End With
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37234807
Lainur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В условном форматировании появляется:
=2*K64725<=J64725

:(
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37234839
Lainur,
хм... а можно небольшой файлик с примером данных?
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37234885
Lainur,
поборол
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim sFormula$

' C.Offset(1, 0) синоним для Cells(C.Row + 1, C.Column)
With C.Offset( 1 ,  0 )

' сначала присвоить выражение для формулы какой-нибудь переменной
' методу скормить уже переменную
' (!) для дробных чисел в формуле использовать системный разделитель
'     целой и дробной части
 
	sFormula = "=0,5*" + Cells(.Row, PotCol1 +  5 ).Address( 0 , 0 )
	.FormatConditions.Add _
		Type:=xlCellValue, _
		Operator:=xlLessEqual, _
		Formula1:= sFormula
		
' такое тоже работает:
'	sFormula = "=" + .Address(0, 0) + "<=0,5" + Cells(.Row, PotCol1 + 5).Address(0,0)
' или
'	sFormula = "=2*" + .Address(0, 0) + "<=" + Cells(.Row, PotCol1 + 5).Address(0,0)
'	.FormatConditions.Add _
'		Type:=xlExpression, _
'		Formula1:= sFormula		
End With
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37235013
Lainur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, послезавтра приеду попробую ваш способ). Если не получится прикреплю файлик с примером может быть все дело в моем excel или вроде того ..
Меня больше всего интересовала почему при убирании знака доллара из формулы formula1 выдается такая абракадабра, когда если таким способом записывать формулу в обычную ячйку все вроде хорошо.
Такое ведь происходит и при простом присваивании ,например xlless. : ="$B$2" при убирании $- получается непойми что.
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37235386
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lainur,

для форматирования кода используйте тег SRC.
...
Рейтинг: 0 / 0
Нужна помощь с макросом VBA для excel
    #37238271
Lainur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
пробууй камнем , большое спасибо за помощь)
Извиняюсь что морочил вам голову, нужно было сразу прикрепить файлик с примером. Вернее попытка его сделать и навела меня на источник проблемы. Дело было не в том как мы вычисляем формулу - с заменой replace знаков доллара или представляя адрес через address(0,0).
Дело в том что код, предваряющий код первого поста, примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        Set C = ActiveSheet.Cells.Find(What:=findtext, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
        ....
        ......
        Range(Cells(Page1Rowind +  1 , Page1Columnind), Cells(iLastRow, Page1Columnind)).Select
        For each Ccell in selection.cells
        .....
        next  

Далее блок с формулой и протягиванием ее по всему столбцу +1
И начинался блок с проблемным форматированием.
Так вот, пока висело выделение диапазона - все формулы в условном форматировании, в том числе и вашими способами обращали свои цифры во что-то вроде : 64725.
Когда перед этим блоком я снял выделение диапазона, выделив первую ячейку столбца(видимо все равно какую) формулы приобрели человеческий вид.
Все работает теперь как я хотел, но я все равно не понимаю почему выделенный диапазон так повлиял на формулу условного форматирования. Возможно потому что нельзя добавлять формулу УФ к ячейке выделенного диапазона?Ведь добавление и протяжка формулы, предваряющие манипуляции с формулами УФ были применены к не выделенным ячейке и столбцу(следующий столбец за выделенным). Мои рассуждения верны?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь с макросом VBA для excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]