|
|
|
Class
|
|||
|---|---|---|---|
|
#18+
создал класс IOTurnover. Приведенный ниже код в моделе выдает что объект не поддерживет данное свойство(Set obj = New IOTurnover). переменная obj не инициализируется Sub start() Dim obj As New IOTurnover 'Set obj = New IOTurnover obj.start End Sub почему код не работает ..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 11:23:09 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. или Код: plaintext 1. Если не помогло, приведи полностью модуль класса, и процедуру работающую с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 12:32:43 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
View-Project Explorer-выдели свой класс(Class1 ?)-в свойствах задай ему имя (IOTurnover). Если я тебя правильно понял, то все должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 12:37:59 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
Модуль класса не называется Class1 иначе бы он выдавал ошибку компиляции при объявлении переменной obj код класса Private store As String Private d1, d2 As Date Private period_d1d2 As Integer Private r_from, r_to, r, c As Range Private sh_from, sh_to As Worksheet Private Const RowHeaderOffest As Integer = 8 Private Const Title As String = "Выручка" ' Трансляция функций в зависимости от версии Excel Private Function getTransl(str As String) As String End Function Private Function getInitData() As Boolean Set sh_from = Application.Sheets("TurnoverLinks") Set sh_to = Application.Sheets("InputList") d1 = sh_to.Range(ThisWorkbook.Names("date1").Value).Value d2 = sh_to.Range(ThisWorkbook.Names("date2").Value).Value store = sh_to.Range(ThisWorkbook.Names("CurrentStore").Value).Value period_d1d2 = CInt(d2 - d1) If d1 <= d2 Then getInitData = True Else MsgBox "Конечная дата должна быть не меньше начальной", vbOKOnly, Title getInitData = False End If End Function Private Sub makeTable() ' ' формирование шапки таблицы ' sh_to.Cells(RowHeaderOffest - 1, 1).Value = "Date" sh_to.Cells(RowHeaderOffest - 1, 2).Value = "eur" sh_to.Cells(RowHeaderOffest - 1, 3).Value = "usd" sh_to.Cells(RowHeaderOffest - 1, 4).Value = store & " usd" sh_to.Cells(RowHeaderOffest - 1, 5).Value = store & " eur" sh_to.Cells(RowHeaderOffest - 1, 6).Value = store & " rur" sh_to.Cells(RowHeaderOffest - 1, 7).Value = store & " usd_total" sh_to.Range(Cells(RowHeaderOffest - 1, 1), Cells(RowHeaderOffest - 1, 7)).Font.Bold = True Set r = sh_from.Range(ThisWorkbook.Names("dates_list")).Find(d1, LookIn:=xlValues) Set c = sh_from.Range(ThisWorkbook.Names("uno_headers")).Find(store, LookIn:=xlValues) If Not r Is Nothing And Not c Is Nothing Then Set r_from = sh_from.Range(sh_from.Cells(r.Row, c.Column), sh_from.Cells(r.Row + period_d1d2 - 1, c.Column + 3)) Set r_to = sh_to.Range(sh_to.Cells(RowHeaderOffest, 4), sh_to.Cells(RowHeaderOffest - 1 + period_d1d2, 6)) sh_from.Range(sh_from.Cells(r.Row, c.Column), sh_from.Cells(r.Row + period_d1d2 - 1, c.Column + 3)).Copy (r_to) r_to.NumberFormat = "#,##0.00" End If fillFormulas 'With sh_to.Range(sh_to.Cells(RowHeaderOffest, 4), sh_to.Cells(RowHeaderOffest - 1 + period_d1d2, 6)) ' .PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' .NumberFormat = "#,##0.00" 'End With 'r_from.BorderAround ColorIndex:=3, Weight:=xlThick 'r_to.BorderAround ColorIndex:=3, Weight:=xlThick End Sub Private Sub fillFormulas() For Each k In sh_to.Range(sh_to.Cells(RowHeaderOffest + period_d1d2, 4), sh_to.Cells(RowHeaderOffest + period_d1d2, 7)) k.FormulaR1C1 = "=SUM(R[-" & period_d1d2 & "]C:R[-1]C)" k.Font.Bold = True Next k i = 0 For D = d1 To d2 - 1 sh_to.Cells(i + RowHeaderOffest, 1).Value = d1 + i sh_to.Cells(i + RowHeaderOffest, 2).FormulaR1C1 = "=VLOOKUP(RC[-1],eur!C1:C2,2)" sh_to.Cells(i + RowHeaderOffest, 3).FormulaR1C1 = "=VLOOKUP(RC[-2],usd!C1:C2,2)" sh_to.Cells(i + RowHeaderOffest, 7).FormulaR1C1 = "=SUM(RC[-3],RC[-1]/RC[-4],RC[-2]*RC[-5]/RC[-4])" sh_to.Cells(i + RowHeaderOffest, 7).NumberFormat = "#,##0.00" i = i + 1 Next D sh_to.Cells(i + RowHeaderOffest, 7).NumberFormat = "#,##0.00" End Sub Private Sub clear() Dim tmp As String Dim r As Range tmp = "A" & RowHeaderOffest & ":G65536" Set r = sh_to.Range(tmp) If Not r Is Nothing Then r.clear End If Set r = Nothing End Sub Public Sub getData() Application.DisplayAlerts = False If Not getInitData Then Exit Sub End If clear makeTable Windows(1).FreezePanes = False Application.DisplayAlerts = True sh_to.Cells(RowHeaderOffest, 4).Select End Sub Public Sub setData() Application.DisplayAlerts = False If Not (r_to Is Nothing Or r_from Is Nothing) Then r_to.Copy (r_from) 'r_from.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False MsgBox "Данные записаны", vbOKOnly, Title Else MsgBox "Ошибка данные не получены", vbOKOnly, Title End If Application.DisplayAlerts = True sh_to.Cells(RowHeaderOffest, 4).Select End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 16:17:16 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
функцию класса start переименовал в getData ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 16:20:17 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
Так в чем проблема? У меня твой код работает. Доходит до поиска листа (TurnoverLinks). Дальше не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 16:48:51 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
это хорошо что у тебя доходит а у меня при выполнении в модуле происходит : 91 ошибка "object variable or with block not set" и принажатии debug курсор стоит на сторочке obj.start ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 17:42:23 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
Как и где создан модуль класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 18:09:12 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
работает!! прикол кажется был в этой строчке в модуле ThisWorkbook: Private obj As New IOTurnover а нужно: Dim obj As New IOTurnover Спасибо большое за помощь ) как определить версию excel чтобы программно правильно формулы подставлять =SUM(D13;F13/C13;E13*B13/C13) или =сумм(D13;F13/C13;E13*B13/C13) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 19:39:35 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
Не версию, а язык наверное. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 21:57:03 |
|
||
|
Class
|
|||
|---|---|---|---|
|
#18+
Bodrovкак определить версию excel чтобы программно правильно формулы подставлять =SUM(D13;F13/C13;E13*B13/C13) или =сумм(D13;F13/C13;E13*B13/C13) А разве нельзя просто написать? Cell.Formula = "=SUM(D13;F13/C13;E13*B13/C13)" У меня русская версия офиса, а в результате выполнения макроса в ячейке появляется =СУММ(D13;F13/C13;E13*B13/C13) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 09:32:02 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=33566010&tid=2185204]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 298ms |

| 0 / 0 |
