Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание формулы в Excel из VBA / 20 сообщений из 20, страница 1 из 1
26.10.2006, 12:01:39
    #34082943
Domninsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
Народ подскажите что делаю не так.
В коде генерю строку формулы вот она

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

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

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

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

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

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

а при тупой вставке этого же текста в ячейки все работает
...
Рейтинг: 0 / 0
26.10.2006, 12:24:48
    #34083057
SvIva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
Я дико извиняюсь, но ты в кавычки не забыл заключить саму формулу ?
...
Рейтинг: 0 / 0
26.10.2006, 12:32:55
    #34083105
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
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
26.10.2006, 12:37:15
    #34083129
Domninsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
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
26.10.2006, 14:04:03
    #34083612
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
Domninskyнет номер колонки тот же что и у заполняемой ячейки
вроде разобрался надо было использовать formular1c1local

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

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

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

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


KL
[MVP - Microsoft Excel]

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

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

KL
[MVP -Microsoft Excel]

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

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

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


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

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


KL
[MVP - Microsoft Excel]

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

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

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

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

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

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
26.10.2006, 15:16:31
    #34084023
Domninsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
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
26.10.2006, 15:17:00
    #34084030
Domninsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
все делается в VBA MS Excel.
...
Рейтинг: 0 / 0
26.10.2006, 15:29:14
    #34084100
Domninsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание формулы в Excel из VBA
KL (XL) Domninskyнет номер колонки тот же что и у заполняемой ячейки
вроде разобрался надо было использовать formular1c1local

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

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

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

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


KL
[MVP - Microsoft Excel]

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

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

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

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

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


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