Страницы: 1
RSS
Присвоить формулу ячейке при заполнении из формы, Нужно правильно расставить синтаксис
 
Имеется простая форма ввода данных.
Данные проганяются через скрипт и записываются на отдельный лист работников, где:
  • Столбец D2 - D65 Содержит полные Фамилию Имя Отчество, введенные вручную;
  • Столбец J2-J65 Содержит формулу:
    Код
    =ЛЕВСИМВ(D59;НАЙТИ(" ";D59;1)+1)&". "&ПСТР(D59;НАЙТИ(" ";D59;НАЙТИ(" ";D59;1)+1)+1;1)&"."
    

для преобразования даных в Фамилия. И. О.
Простая арифметика в ячейке назначается:
Код
Cells(NextRow, 10).Formula = "=(J" & NextRow & "-E" & NextRow & ")" 
Но вот правильно присвоить ячейке формулу для преобразования ФИО не получается.
Так же прошу подсказать, что делать, если назначенная в ячейке формула отображается как текст, пока я вручную не кликну по этой же ячейке а потом в произвольную область, после чего формула стает как надо.
 
Ruskat, приложите пример. И еще вариант - может лучше просто протягивать формулу или копировать и вставлять если диапазон разрывной?
 
1. простую арифметику запишите так:
Cells(NextRow, 10).FormulaR1C1 = "=RC10-RC5" (и скобки, видимо, там совершенно не нужны только это Циклическая ссылка! формула правильная?)
2. руками 1 раз задайте столбику общий формат
Изменено: Ігор Гончаренко - 01.04.2020 11:04:11
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
skais675, Можно и протягивать, но в процессе добавления из формы идет пересортировка за ФИО, чтобы все оказались по алфавиту и потом перенумерация.
Вам виднее :-)
 
Ruskat, ну и где попытки вставить формулу, на каком листе, какой макрос, где форма?
 
skais675,Макросы - Форма AddWrkr - Закомментировано после форматирования номера телефона:
Код
'Cells(NextRow, 10).Formula = "=ЛЕВСИМВ(D" & NextRow &;НАЙТИ(" ";D & NextRow &;1)+1)&". "&ПСТР(D & NextRow &;НАЙТИ(" "; & NextRow &;НАЙТИ(" ";D & NextRow &;1)+1)+1;1)&"."
к примеру.
Кнопка вверху справа "Додати водія" вызывает форму.
Изменено: Ruskat - 01.04.2020 12:47:33
 
Ruskat учитывая, что Вы вводите данные в плоскую таблицу, то оформите ее как умную и необходимость ввода формул отпадет сама собой.
 
skais675, Вот в этом и нужна помощь, если можно. А так, что не могу - о том и спросил.
 
Ruskat Сделал пример, думаю разберетесь.
Код
ss = "'=ЛЕВСИМВ(D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";1)+1)&"". ""&ПСТР(D64;НАЙТИ("" "";D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";1)+1)+1;1)&""."""
            .Cells(NextRow, 10).Formula = ss
            .Cells(NextRow, 11).FormulaR1C1 = "=RC6-RC1"
Изменено: skais675 - 02.04.2020 10:19:29
 
skais675, Благодарю, но так не будет... Ячейка считается следующей по номеру (например 65) А При пересортировке по фамилии она может оказаться (например 22) и данные уже не оттуда.
Потому вопрос, как макросом в пересортировку добавить последним шагом имитацию "протягивания" от J2 по J"последний номер", чтобы назначить этому диапазону указанную формулу, НО с номерами, которые соответствуют строкам, а не в строке 2 работать по строке 60, например.
 
А Вы пробовали сортировать? В предыдущем была ошибочка, могли бы и догодаться сами, поправил.
Код
        ss = "'=ЛЕВСИМВ(D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";1)+1)&"". ""&ПСТР(D"& CStr(NextRow)&";НАЙТИ("" "";D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";1)+1)+1;1)&""."""
Изменено: skais675 - 03.04.2020 16:40:30
 
skais675, Спасибо. Фильтры сделал, но всеравно в ячейке после добавления формула идет текстом:
Код
'=ЛЕВСИМВ(D58;НАЙТИ(" ";D58;1)+1)&". "&ПСТР(D58;НАЙТИ(" ";D58;НАЙТИ(" ";D58;1)+1)+1;1)&"."
Тоесть, ФИО не сокращаются.
Даже если ' убрать
Решение....
Получилось так FormulaLocal вместо Formula:
Код
            ss = "=ЛЕВСИМВ(D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";1)+1)&"". ""&ПСТР(D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";НАЙТИ("" "";D" & CStr(NextRow) & ";1)+1)+1;1)&""."""
            .Cells(NextRow, 10).FormulaLocal = ss
Нумератор порядковых номеров, Столбец А тоже поправил на аналог:
Код
.Cells(NextRow, 1).FormulaLocal = "=СТРОКА()-1"
Прошу внести замечания и поправки, если таковые есть.
Изменено: Ruskat - 03.04.2020 18:46:09
 
Ruskat решения были предложены еще во #2 сообщении.
1. Почему умная таблица не устроила?
2. Вариант с копированием (из ячейки-шаблона) и вставкой или протягиванием формулы гораздо проще на мой взгляд, почему не подошел?
3. Ваш вариант может не сработать кода локаль изменится! Ваш вариант не универсален!
Изменено: skais675 - 03.04.2020 19:18:12
 
Ігор Гончаренко,Прошу прощения, не заметил изначально Ваше сообщение. Думаю, по примерам вы поняли задачу.
skais675,  
1 и 2 - пробовал, но в ячейках всё так же фурмула для сокращения Ф.И,О Всё так же была текстом. Даже при смене формата ячейки.
3. В каких случаях это возможно? Смена языка программы?  
 
Ruskat Вот Вам вариант с умной таблицей
 
skais675, Я Вам крайне благодарен. То, что надо.
Но о локали хотелось бы узнать мнение.
 
Ну а что будет если формулы в екселе на другом компьютере английские, а Ваш макрос попытается вставить русскую?
Поэтому можно применить еще 2 вариант , но 3 создаст проблемы при смене локали. Либо пишите формулу на английском и используйте formula вместо formulalocal.
Но если зайти дальше, у меня были проблемы с этим при использование в УФ Тут(и вопрос был решен вставкой формулы в ячейку шаблон а потом из нее в УФ с учетом локали, но Вам это не нужно).
Изменено: skais675 - 03.04.2020 22:50:33
Страницы: 1
Наверх