|
|
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
Народ подскажите что делаю не так. В коде генерю строку формулы вот она =+'Бюджет СЗ свод'!R47C*0,79 помещаю ее в переменную FormulaStr а затем пытаюсь в цыкле запихать ее в ячейку (i,j) вот так Range(Cells(i, j), Cells(i, j)).FormulaR1C1 = FormulaStr Вылетает ошибка Appication-defined or object-defined error! В чем причина? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:01:39 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
У тебя в самой формуле ошибка! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:09:26 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
сначала попробуй создать формулу в самом Excel, затем через выдели ячейку и попробуй через код Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:12:58 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
нифига помещаю этот же текст в строку формулы все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:13:44 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
orunbekсначала попробуй создать формулу в самом Excel, затем через выдели ячейку и попробуй через код Код: plaintext да в том то и дело что не могу потому как он вылетает при попытке присвоить свойству formular1c1 значения =+'Бюджет СЗ свод'!R47C*0,79 а при тупой вставке этого же текста в ячейки все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:18:43 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
Я дико извиняюсь, но ты в кавычки не забыл заключить саму формулу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:24:48 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
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 номер колонки указан или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:32:55 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:37:15 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
Domninskyнет номер колонки тот же что и у заполняемой ячейки вроде разобрался надо было использовать formular1c1local Использование formular1c1local делает твой код пригодным только для машин с точно такой же конфигурацией, т.е. язык и системные разделители (разделители списков, тысяч, десятичные, массивов). В твоем случае, похоже простая замена запятой на точку решала проблему: =+'Бюджет СЗ свод'!R47C*0 , 79 =+'Бюджет СЗ свод'!R47C*0.79 А вообще формулы (не локальные) в Excel должны писаться с использованием: - функций на англ. языке - разделитель списков - запятая - разделитель десятичный - точка - разделитель тысяч - запятая - разделитель массивов вертикальный - точка с запятой - разделитель массивов горизонтальный - запятая KL [MVP - Microsoft Excel] PS. Могу сильно ошибаться, но думаю, что "+" в начале формулы это пережиток из Lotus123, а если перед ним еще и "=" (хотя с уверенностью этого сказать нельзя, т.к. ты не показал как генерится стринг), то тогда его использование совсем неоправданно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:04:03 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
а заменть запятуб на точку проще всего как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:29:35 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
я могу это сделать при формировании строки когда сцепляю строку этот коэффициент числовой я его тупо преобразовал в string и соответственно получил ',' ,т.к. у меня на машине стоит разделитель запятая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:31:52 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
Domninskyя могу это сделать при формировании строки когда сцепляю строку этот коэффициент числовой я его тупо преобразовал в string и соответственно получил ',' ,т.к. у меня на машине стоит разделитель запятая... Все зависит от того как ты все это делаешь (есть миллион способов), но ты отчаянно сопротивляешься тому, чтобы показать код создающий формулу :-) KL [MVP -Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:36:49 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
KL (XL) Domninskyя могу это сделать при формировании строки когда сцепляю строку этот коэффициент числовой я его тупо преобразовал в string и соответственно получил ',' ,т.к. у меня на машине стоит разделитель запятая... Все зависит от того как ты все это делаешь (есть миллион способов), но ты отчаянно сопротивляешься тому, чтобы показать код создающий формулу :-) KL [MVP -Microsoft Excel] вот кусок который прикрепляет умножение на коэффициент // Case "Коэффициент" CellFormula = CellFormula + "*" + CStr((Cells(NumberRow, i).Value)) End Select // ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:41:18 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
Попробуй так: // Case "Коэффициент" CellFormula = CellFormula + "*" & Cells(NumberRow, i).Value End Select // KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:49:13 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
KL (XL)Попробуй так: // Case "Коэффициент" CellFormula = CellFormula + "*" & Cells(NumberRow, i).Value End Select // KL [MVP - Microsoft Excel] вываливает ошибку Type mismach ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:53:13 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
У меня все работает. Слишком мало информации о коде :-(. Как декларируешь переменные? В какой строке ошибка? Где пишешь код в Excel или в VB? Кстати ты рассматривал след. вариант? Код: plaintext 1. 2. если в rng2 формулы, то получится =(стараяФормула)*новоеЗначение все из соотв. строки. это намного быстрее любого цикла. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:07:13 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
KL (XL)У меня все работает. Слишком мало информации о коде :-(. Как декларируешь переменные? В какой строке ошибка? Где пишешь код в Excel или в VB? Кстати ты рассматривал след. вариант? Код: plaintext 1. 2. если в 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 Там есть столбец "Знак","Имя файла","Имя листа","Строка" -это строка для поиска на листе,"Коэффициент" Вот такая фигня... ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:16:31 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
все делается в VBA MS Excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:17:00 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
KL (XL) Domninskyнет номер колонки тот же что и у заполняемой ячейки вроде разобрался надо было использовать formular1c1local Использование formular1c1local делает твой код пригодным только для машин с точно такой же конфигурацией, т.е. язык и системные разделители (разделители списков, тысяч, десятичные, массивов). В твоем случае, похоже простая замена запятой на точку решала проблему: =+'Бюджет СЗ свод'!R47C*0 , 79 =+'Бюджет СЗ свод'!R47C*0.79 А вообще формулы (не локальные) в Excel должны писаться с использованием: - функций на англ. языке - разделитель списков - запятая - разделитель десятичный - точка - разделитель тысяч - запятая - разделитель массивов вертикальный - точка с запятой - разделитель массивов горизонтальный - запятая KL [MVP - Microsoft Excel] PS. Могу сильно ошибаться, но думаю, что "+" в начале формулы это пережиток из Lotus123, а если перед ним еще и "=" (хотя с уверенностью этого сказать нельзя, т.к. ты не показал как генерится стринг), то тогда его использование совсем неоправданно. Спасибо! Ты был абсолютно прав добавил замену "," на "." и все заработало. С проверкой ести ли запятая в строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:29:14 |
|
||
|
Создание формулы в Excel из VBA
|
|||
|---|---|---|---|
|
#18+
DomninskyСпасибо! Ты был абсолютно прав добавил замену "," на "." и все заработало. С проверкой ести ли запятая в строке. Да, но это не корректно и не элегантно :-( Повесь лучше файл с работающим кодом, чтобы отладить твой код в реальной ситуации, а то в самом коде черт ногу сломит :-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:35:11 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=34083003&tid=2184053]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 313ms |

| 0 / 0 |
