Подскажите что не так в коде VBA в Excel - страница 3

 
eugene771 >>:

Function USER2()
Dim a As Double
Sheets("Лист1").Select
a = Cells(4, 1)
Sheets("Лист3").Select
Cells(4, 1).Value = a
'Dim i As Integer, j As Integer, icolumn As Integer, jrow As Integer
' icolumn = 13
' jrow = 24
'
' i = 1
' j = 1
' Do While i <= icolumn
'
' Do While j <= jrow
' a = Worksheets("Лист1").Cells(j, i).Value
' Worksheets("Лист3").Cells(j, i) = a
' j = j + 1
' Loop
' i = i + 1
' Loop
End Function

Тут и без видеозахвата, все циклы вывел в коммменты и завел один элемент цикла в начале функции, а он не пашет.

 
EvgeTrofi >>:

какая ошибка? как выглядит? прикрепи свой Экселевский файл, на худой конец.... к сообщению то есть

Да не пишет ошибку, просто при обработке ячейки с функцией пишет #ЗНАЧ. Файл прикрепляю.

 

Ну и зачем ты свои сообщения дулируешь? У меня то твой код работает!

Может ты перепутал местами строку и столбец?

В объекте Cells имеется две координаты. Первая - строка, вторая - столбец. Проверь ещё раз, чего ты сам ожидаешь от этого скрипта?

 
EvgeTrofi >>:

Ну и зачем ты свои сообщения дулируешь? У меня то твой код работает!

Может ты перепутал местами строку и столбец?

В объекте Cells имеется две координаты. Первая - строка, вторая - столбец. Проверь ещё раз, чего ты сам ожидаешь от этого скрипта?

Да это в принципе без разницы, все равно бы копировал только не те ячейки, а тут просто функцию не принимает.

 
EvgeTrofi >>:

какая ошибка? как выглядит? прикрепи свой Экселевский файл, на худой конец.... к сообщению то есть

Sub Макро4()

'Dim a As Double
'Sheets("Лист1").Select
'a = Cells(4, 2)
'Sheets("Лист3").Select
'Cells(4, 2).Value = a
Dim i As Integer, j As Integer, icolumn As Integer, jrow As Integer
icolumn = 13
jrow = 24

i = 1
j = 1
Do While i <= icolumn
j = 1
Do While j <= jrow
a = Worksheets("Лист1").Cells(j, i).Value
Worksheets("Лист3").Cells(j, i).Value = a
j = j + 1
Loop
i = i + 1
Loop
End Sub


Здесь все работает, значит ошибка в неправильном применение оператора: Function. А функция то намного удобнее чем процедура. Вот как процедуру в функцию переделать?? Функция то значение должна возвращать, но функцию можно хоть откуда вызвать.

 
Оказалось, что все наши циклы и оператор Range делают одно и тоже. Просто я пытался использовать функцию, но оказалось, что функция работает лишь с аргументами и значением функции ынутри себя и внешние операции делать не может. Но вот как мне процедуру запускать каждые 2 минуты и откуда запускать, если в ячейку вызов процедуры не поставишь. Неужели зацикливать процедуру на себя и ставить таймер по определеннотму коду внутри процедуры, но как это скажется на загрузке процессора, да и как таймер проще сделать.
 

Можно попробовать использовать событие "Worksheet_Change" в классе листа. Но чувствую сейчас повалят вопросы. поэтому прикрепляю пример. Измените значение в любой ячейке на листе "Лист1". Это вызовет событие "Worksheet_Change", в отором прописано обращение на вызов пользовательской процедуры "ggg123".

Файлы:
aqkas1.rar  8 kb
 
EvgeTrofi >>:

Можно попробовать использовать событие "Worksheet_Change" в классе листа. Но чувствую сейчас повалят вопросы. поэтому прикрепляю пример. Измените значение в любой ячейке на листе "Лист1". Это вызовет событие "Worksheet_Change", в отором прописано обращение на вызов пользовательской процедуры "ggg123".

Разобрался. Странно что в подробном руководстве по созданию формул в Exel нет описания применения процедур в других процедурах и это свойство Change очень удобно, и его также нигде найти не смог, и в справке по VBA ничего нет. А как принято таймеры делать в Exel, что удобнее там использовать помимо: взять текущее время переделать его в значение прибавить шаг таймера и сравнивать текущее время с контрольным. И еще ByVal Target As Range, причем здесь ByVal выделено синим, что это такое. По идееWorksheet_Change(ByVal Target As Range) есть функция, так как свойство идет через точку. Может по VBA в Excel есть хорошие книги по программированию.

 

Хочешь таймер? В Excel? Да пожалуйста (см. прикреплённый файл)! Я тебе многое ещё могу рассказать про VBA. На этом языке программирования я написал программу для расчёта железобетонных конструкций. Это было не просто.

Но мне надоело помогать тебе бесплатно. Учение - свет, а за свет надо платить. Пиши в личку!

Файлы:
timer.rar  12 kb
 
EvgeTrofi >>:

Хочешь таймер? В Excel? Да пожалуйста (см. прикреплённый файл)! Я тебе многое ещё могу рассказать про VBA. На этом языке программирования я написал программу для расчёта железобетонных конструкций. Это было не просто.

Но мне надоело помогать тебе бесплатно. Учение - свет, а за свет надо платить. Пиши в личку!

Кстати, я тоже учился на СМ и ДПМ в ЮУрГу.