powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание формулы в Excel из VBA
20 сообщений из 20, страница 1 из 1
Создание формулы в Excel из VBA
    #34082943
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ подскажите что делаю не так.
В коде генерю строку формулы вот она

=+'Бюджет СЗ свод'!R47C*0,79
помещаю ее в переменную FormulaStr

а затем пытаюсь в цыкле запихать ее в ячейку (i,j) вот так

Range(Cells(i, j), Cells(i, j)).FormulaR1C1 = FormulaStr
Вылетает ошибка Appication-defined or object-defined error!

В чем причина?

Спасибо!
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34082980
Фотография Evgeshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя в самой формуле ошибка!
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083003
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сначала попробуй создать формулу в самом Excel, затем через выдели ячейку и попробуй через код
Код: plaintext
MsgBox ActiveCell.Formula
просмотреть формулу
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083007
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нифига помещаю этот же текст в строку формулы все работает.
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083028
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekсначала попробуй создать формулу в самом Excel, затем через выдели ячейку и попробуй через код
Код: plaintext
MsgBox ActiveCell.Formula
просмотреть формулу

да в том то и дело что не могу потому как он вылетает при попытке присвоить свойству formular1c1 значения =+'Бюджет СЗ свод'!R47C*0,79

а при тупой вставке этого же текста в ячейки все работает
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083057
SvIva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я дико извиняюсь, но ты в кавычки не забыл заключить саму формулу ?
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083105
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomninskyНарод подскажите что делаю не так.
В коде генерю строку формулы вот она

=+'Бюджет СЗ свод'!R47C*0,79
помещаю ее в переменную FormulaStr

а затем пытаюсь в цыкле запихать ее в ячейку (i,j) вот так

Range(Cells(i, j), Cells(i, j)).FormulaR1C1 = FormulaStr
Вылетает ошибка Appication-defined or object-defined error!

В чем причина?

Спасибо!
=+'Бюджет СЗ свод'!R47C*0,79
номер колонки указан или нет?
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083129
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbek DomninskyНарод подскажите что делаю не так.
В коде генерю строку формулы вот она

=+'Бюджет СЗ свод'!R47C*0,79
помещаю ее в переменную FormulaStr

а затем пытаюсь в цыкле запихать ее в ячейку (i,j) вот так

Range(Cells(i, j), Cells(i, j)).FormulaR1C1 = FormulaStr
Вылетает ошибка Appication-defined or object-defined error!

В чем причина?

Спасибо!
=+'Бюджет СЗ свод'!R47C*0,79
номер колонки указан или нет?

нет номер колонки тот же что и у заполняемой ячейки
вроде разобрался надо было использовать formular1c1local
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083612
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Domninskyнет номер колонки тот же что и у заполняемой ячейки
вроде разобрался надо было использовать formular1c1local

Использование formular1c1local делает твой код пригодным только для машин с точно такой же конфигурацией, т.е. язык и системные разделители (разделители списков, тысяч, десятичные, массивов). В твоем случае, похоже простая замена запятой на точку решала проблему:

=+'Бюджет СЗ свод'!R47C*0 , 79

=+'Бюджет СЗ свод'!R47C*0.79

А вообще формулы (не локальные) в Excel должны писаться с использованием:
- функций на англ. языке
- разделитель списков - запятая
- разделитель десятичный - точка
- разделитель тысяч - запятая
- разделитель массивов вертикальный - точка с запятой
- разделитель массивов горизонтальный - запятая


KL
[MVP - Microsoft Excel]

PS. Могу сильно ошибаться, но думаю, что "+" в начале формулы это пережиток из Lotus123, а если перед ним еще и "=" (хотя с уверенностью этого сказать нельзя, т.к. ты не показал как генерится стринг), то тогда его использование совсем неоправданно.
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083774
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а заменть запятуб на точку проще всего как?
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083784
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я могу это сделать при формировании строки
когда сцепляю строку этот коэффициент числовой я его тупо преобразовал в string и соответственно получил ',' ,т.к. у меня на машине стоит разделитель запятая...
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083811
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Domninskyя могу это сделать при формировании строки
когда сцепляю строку этот коэффициент числовой я его тупо преобразовал в string и соответственно получил ',' ,т.к. у меня на машине стоит разделитель запятая...
Все зависит от того как ты все это делаешь (есть миллион способов), но ты отчаянно сопротивляешься тому, чтобы показать код создающий формулу :-)

KL
[MVP -Microsoft Excel]
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083828
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL) Domninskyя могу это сделать при формировании строки
когда сцепляю строку этот коэффициент числовой я его тупо преобразовал в string и соответственно получил ',' ,т.к. у меня на машине стоит разделитель запятая...
Все зависит от того как ты все это делаешь (есть миллион способов), но ты отчаянно сопротивляешься тому, чтобы показать код создающий формулу :-)

KL
[MVP -Microsoft Excel]

вот кусок который прикрепляет умножение на коэффициент

//
Case "Коэффициент"
CellFormula = CellFormula + "*" + CStr((Cells(NumberRow, i).Value))
End Select
//
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083871
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

//
Case "Коэффициент"
CellFormula = CellFormula + "*" & Cells(NumberRow, i).Value
End Select
//


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083895
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)Попробуй так:

//
Case "Коэффициент"
CellFormula = CellFormula + "*" & Cells(NumberRow, i).Value
End Select
//


KL
[MVP - Microsoft Excel]

вываливает ошибку Type mismach (
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34083975
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все работает. Слишком мало информации о коде :-(. Как декларируешь переменные? В какой строке ошибка? Где пишешь код в Excel или в VB?

Кстати ты рассматривал след. вариант?

Код: plaintext
1.
2.
    rng1.Copy
    rng2.PasteSpecial xlPasteValues, xlMultiply
    Application.CutCopyMode=False

если в rng2 формулы, то получится =(стараяФормула)*новоеЗначение
все из соотв. строки.

это намного быстрее любого цикла.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34084023
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)У меня все работает. Слишком мало информации о коде :-(. Как декларируешь переменные? В какой строке ошибка? Где пишешь код в Excel или в VB?

Кстати ты рассматривал след. вариант?

Код: plaintext
1.
2.
    rng1.Copy
    rng2.PasteSpecial xlPasteValues, xlMultiply
    Application.CutCopyMode=False

если в rng2 формулы, то получится =(стараяФормула)*новоеЗначение
все из соотв. строки.

это намного быстрее любого цикла.

KL
[MVP - Microsoft Excel]

Вот код функции:
//
Public Function CreateFormulaRC(SourceSheet As String, FindStr As String, STSheetName As String, MBegin As String, MEnd As String)
'SourceSheet - àêòèâíûé ëèñò
'FindStr - èñêîìàÿ ñòàòüÿ
'STSheetName - ëèñò ñî ñòàòüÿìè
'MBegin - ìåòêà íà÷àëà íà ëèñòå ñî ñòàòüÿìè
'MEnd - ìåòêà êîíöà íà ëèñòå ñî ñòàòüÿìè

Dim CellFormula As String, FindSheet As String, FindSourceStr
Dim BeginRow As Integer, BeginColumn As Integer, EndColumn As Integer, NumberRow As Integer
Dim BeginFormula As Integer, EndFormula As Integer
Dim SumCount As Integer
Dim SourceRow As Integer
Dim FindRange As Range, FingRange2 As Range
Dim CurrentPath As String, FullPath As String
Dim WB As Workbook
Dim WSheet As Worksheets
Dim i As Integer
Dim SourceStr As String, DestStr As String, EndStr As String
'Application.ScreenUpdating = False
CurrentPath = ActiveWorkbook.Path
BeginRow = Range(MBegin).Row + 1
EndColumn = Range(MEnd).Column
Sheets(STSheetName).Select

Set FindRange = Cells.Find(What:=FindStr, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not FindRange Is Nothing Then
NumberRow = FindRange.Row
'Debug.Print FindRange.Row
BeginFormula = EndColumn + 2
SumCount = Cells(NumberRow, EndColumn + 1).Value
EndFormula = BeginFormula + SumCount * 5 - 1
CellFormula = "="
If SumCount <> 0 Then
For i = BeginFormula To EndFormula
'Debug.Print Cells(BeginRow - 1, i).Value
Select Case Cells(BeginRow - 1, i).Value
Case "Знак"
CellFormula = CellFormula + Cells(NumberRow, i).Value
Case "Имя файла"
If Cells(NumberRow, i).Value <> "" Then
CellFormula = CellFormula + Chr(39) + CurrentPath + Chr(92) + Chr(91) + Cells(NumberRow, i).Value + ".xls" + Chr(93)
End If
Case "Имя листа"
If Cells(NumberRow, i - 1).Value = "" Then
CellFormula = CellFormula + Chr(39) + Cells(NumberRow, i).Value + Chr(39) + Chr(33)
Else
CellFormula = CellFormula + Cells(NumberRow, i).Value + Chr(39) + Chr(33)
End If
FindSheet = Cells(NumberRow, i).Value
Case "Строка"
If Cells(NumberRow, i - 2).Value = "" Then
FindSourceStr = Cells(NumberRow, i).Value
'Set WSheet = Worksheets(FindSheet)
If Findsheets(FindSheet) Then
Sheets(FindSheet).Select
Set FindRange = Cells.Find(FindSourceStr)
If Not FindRange Is Nothing Then
SourceRow = Cells.Find(FindSourceStr).Row
CellFormula = CellFormula + "R" + CStr(SourceRow) + "C"
Else
CellFormula = "Ñòàòüÿ " + FindSourceStr + " íå íàéäåíà!"
Exit For
End If
Set FindRange = Nothing
Else
CellFormula = "Ëèñò " + FindSheet + " íå íàéäåí!"
Exit For
End If
'Set WSheet = Nothing
Else
FindSourceStr = Cells(NumberRow, i).Value
FullPath = CurrentPath + Chr(92) + Cells(NumberRow, i - 2) + ".xls"
If Dir(FullPath) <> "" Then
Set WB = Workbooks.Open(FullPath)
WB.Activate
If Findsheets(FindSheet) Then
WB.Sheets(FindSheet).Select
Set FindRange = Cells.Find(FindSourceStr)
If Not FindRange Is Nothing Then
SourceRow = Cells.Find(FindSourceStr).Row
CellFormula = CellFormula + "R" + CStr(SourceRow) + "C"
Else
CellFormula = "Ошибка!"
Exit For
End If
Else
CellFormula = "Ошибка!"
Exit For
End If
WB.Close
Set WB = Nothing
Else
CellFormula = "Ошибка!"
Exit For
End If
End If
Sheets(STSheetName).Select
Case "Коэффициент"
CellFormula = CellFormula + "*" + cstr(Cells(NumberRow, i).Value)

End Select
Next i
Else
CellFormula = ""
End If
CreateFormulaRC = CellFormula
Else
CreateFormulaRC = "Ошибка!"
End If
Sheets(SourceSheet).Select
'Application.ScreenUpdating = True
End Function
//

Если поможет бубу очень признателен
Смысл в том что я формирую формулу на основании строки в файле Excel
Там есть столбец "Знак","Имя файла","Имя листа","Строка" -это строка для поиска на листе,"Коэффициент"
Вот такая фигня... (
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34084030
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все делается в VBA MS Excel.
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34084100
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL) Domninskyнет номер колонки тот же что и у заполняемой ячейки
вроде разобрался надо было использовать formular1c1local

Использование formular1c1local делает твой код пригодным только для машин с точно такой же конфигурацией, т.е. язык и системные разделители (разделители списков, тысяч, десятичные, массивов). В твоем случае, похоже простая замена запятой на точку решала проблему:

=+'Бюджет СЗ свод'!R47C*0 , 79

=+'Бюджет СЗ свод'!R47C*0.79

А вообще формулы (не локальные) в Excel должны писаться с использованием:
- функций на англ. языке
- разделитель списков - запятая
- разделитель десятичный - точка
- разделитель тысяч - запятая
- разделитель массивов вертикальный - точка с запятой
- разделитель массивов горизонтальный - запятая


KL
[MVP - Microsoft Excel]

PS. Могу сильно ошибаться, но думаю, что "+" в начале формулы это пережиток из Lotus123, а если перед ним еще и "=" (хотя с уверенностью этого сказать нельзя, т.к. ты не показал как генерится стринг), то тогда его использование совсем неоправданно.

Спасибо!
Ты был абсолютно прав добавил замену "," на "." и все заработало. С проверкой ести ли запятая в строке.
...
Рейтинг: 0 / 0
Создание формулы в Excel из VBA
    #34084130
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomninskyСпасибо!
Ты был абсолютно прав добавил замену "," на "." и все заработало. С проверкой ести ли запятая в строке.

Да, но это не корректно и не элегантно :-(

Повесь лучше файл с работающим кодом, чтобы отладить твой код в реальной ситуации, а то в самом коде черт ногу сломит :-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание формулы в Excel из VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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