Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/sub or function defined - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » sub or function defined (Макросы/Sub)
sub or function defined
imxotep Дата: Четверг, 19.11.2015, 09:27 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Возникает ошибка sub or function defined подскажите куда копать

[vba]
Код
Sub test()

    Dim arrNomStr(10) As Integer
    Dim arrNomAZS(10) As Integer
    
    arrNomAZS(0) = 1
    arrNomAZS(1) = 3
    arrNomAZS(2) = 5
    arrNomAZS(3) = 10
    arrNomAZS(4) = 12
    arrNomAZS(5) = 2
    arrNomAZS(6) = 8
    arrNomAZS(7) = 4
    arrNomAZS(8) = 6
    arrNomAZS(9) = 9
    arrNomAZS(10) = 11
    
    Dim i As Integer
    Dim a As Integer

    Columns("A:A").Select

    For i = LBound(arrNomAZS) To UBound(arrNomAZS)
    
        Selection.Find(What:=arrNomAZS(i), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
            
        arrNomStr(i) = ActiveCell.Row
        a = arrNomStr(i)
        
        abc = Yacheiki(a)
        
        
    Next i
    
    
End Sub
[/vba]

[vba]
Код
Public Function Yacheiki(nomStr) ', bukva As String)
    b = 0
    c = nomStr

        For a = 1 To 3
            KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
            b = KolStr
            c = c + b

            a2 = Cells(c, "R")
        Next
            
        a1 = Cells(arrNomStr(i), "R")
    Yacheiki = Cells(a1, a2)
    
End Function
[/vba]
[moder]Для оформления кода используйте кнопку #, а не fx[/moder]


Сообщение отредактировал Pelena - Четверг, 19.11.2015, 09:57
 
Ответить
СообщениеВозникает ошибка sub or function defined подскажите куда копать

[vba]
Код
Sub test()

    Dim arrNomStr(10) As Integer
    Dim arrNomAZS(10) As Integer
    
    arrNomAZS(0) = 1
    arrNomAZS(1) = 3
    arrNomAZS(2) = 5
    arrNomAZS(3) = 10
    arrNomAZS(4) = 12
    arrNomAZS(5) = 2
    arrNomAZS(6) = 8
    arrNomAZS(7) = 4
    arrNomAZS(8) = 6
    arrNomAZS(9) = 9
    arrNomAZS(10) = 11
    
    Dim i As Integer
    Dim a As Integer

    Columns("A:A").Select

    For i = LBound(arrNomAZS) To UBound(arrNomAZS)
    
        Selection.Find(What:=arrNomAZS(i), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
            
        arrNomStr(i) = ActiveCell.Row
        a = arrNomStr(i)
        
        abc = Yacheiki(a)
        
        
    Next i
    
    
End Sub
[/vba]

[vba]
Код
Public Function Yacheiki(nomStr) ', bukva As String)
    b = 0
    c = nomStr

        For a = 1 To 3
            KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
            b = KolStr
            c = c + b

            a2 = Cells(c, "R")
        Next
            
        a1 = Cells(arrNomStr(i), "R")
    Yacheiki = Cells(a1, a2)
    
End Function
[/vba]
[moder]Для оформления кода используйте кнопку #, а не fx[/moder]

Автор - imxotep
Дата добавления - 19.11.2015 в 09:27
imxotep Дата: Четверг, 19.11.2015, 09:30 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Что с форматированием??((
 
Ответить
СообщениеЧто с форматированием??((

Автор - imxotep
Дата добавления - 19.11.2015 в 09:30
imxotep Дата: Четверг, 19.11.2015, 09:52 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ку
 
Ответить
Сообщениеку

Автор - imxotep
Дата добавления - 19.11.2015 в 09:52
SLAVICK Дата: Четверг, 19.11.2015, 10:25 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Это значит, что или переменная или функция неизвестна.
Для переменных два варианта:
или объявите все,например :
[vba]
Код
Dim abc
[/vba]
или удалите
[vba]
Код
Option Explicit
[/vba]

И НЕЛЬЗЯ ссылатся на массив arrNomStr , если он не объявлен глобально,
И еще здесь
[vba]
Код
KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
[/vba]
что такое bukva? - присвоил ей А
диапазон присваивать нужно через SET :
[vba]
Код
Set a2 = Cells(c, "R")
Set a1 = Cells(arrNomStr(i), "R")
Set Yacheiki = Range(a1, a2)
[/vba]
В общем получилось так:

Правда я не пытался понять что эта процедура должна делать - но она работает.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеЭто значит, что или переменная или функция неизвестна.
Для переменных два варианта:
или объявите все,например :
[vba]
Код
Dim abc
[/vba]
или удалите
[vba]
Код
Option Explicit
[/vba]

И НЕЛЬЗЯ ссылатся на массив arrNomStr , если он не объявлен глобально,
И еще здесь
[vba]
Код
KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
[/vba]
что такое bukva? - присвоил ей А
диапазон присваивать нужно через SET :
[vba]
Код
Set a2 = Cells(c, "R")
Set a1 = Cells(arrNomStr(i), "R")
Set Yacheiki = Range(a1, a2)
[/vba]
В общем получилось так:

Правда я не пытался понять что эта процедура должна делать - но она работает.

Автор - SLAVICK
Дата добавления - 19.11.2015 в 10:25
Manyasha Дата: Четверг, 19.11.2015, 10:33 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
imxotep, массив arrNomStr определен только внутри макроса test. Функция Yacheiki не знает, что это за массив, вот и ругается.
У Вас же arrNomStr(i) подается в качестве аргумента, так и работайте с аргументом:
[vba]
Код
        a1 = Cells(nomStr, "R") 'nomStr вместо arrNomStr(i)
    Yacheiki = Cells(a1, a2)
[/vba]
Кстати, в макросе test можно функцию так вызывать (без лишних переменных)
[vba]
Код
'        arrNomStr(i) = ActiveCell.Row
'        a = arrNomStr(i)
        abc = Yacheiki(ActiveCell.Row)
[/vba]
или лучше вот так:
[vba]
Код
        arrNomStr(i) = Selection.Find(What:=arrNomAZS(i), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Row
        abc = Yacheiki(arrNomStr(i))
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеimxotep, массив arrNomStr определен только внутри макроса test. Функция Yacheiki не знает, что это за массив, вот и ругается.
У Вас же arrNomStr(i) подается в качестве аргумента, так и работайте с аргументом:
[vba]
Код
        a1 = Cells(nomStr, "R") 'nomStr вместо arrNomStr(i)
    Yacheiki = Cells(a1, a2)
[/vba]
Кстати, в макросе test можно функцию так вызывать (без лишних переменных)
[vba]
Код
'        arrNomStr(i) = ActiveCell.Row
'        a = arrNomStr(i)
        abc = Yacheiki(ActiveCell.Row)
[/vba]
или лучше вот так:
[vba]
Код
        arrNomStr(i) = Selection.Find(What:=arrNomAZS(i), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Row
        abc = Yacheiki(arrNomStr(i))
[/vba]

Автор - Manyasha
Дата добавления - 19.11.2015 в 10:33
imxotep Дата: Четверг, 19.11.2015, 12:49 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо большое!! Буду пробовать!
 
Ответить
СообщениеСпасибо большое!! Буду пробовать!

Автор - imxotep
Дата добавления - 19.11.2015 в 12:49
imxotep Дата: Вторник, 24.11.2015, 08:18 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброе утро!
Подскажите пожалуйста код возвращает ссылки на диапазон A1:A2 в чем причина??
[vba]
Код

Public Function Yacheiki(nomStr As Integer, bukva As String)
    Dim a1
    Dim a2
    
    a1 = Cells(nomStr, bukva).Address
    
    b = 0
    c = nomStr

        For a = 1 To 3
            KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
            b = KolStr
            c = c + b
            
        Next
        a2 = Cells(c, bukva).Address
    
    Set Yacheiki = Range("a1:a2")
    
End Function
[/vba]
 
Ответить
СообщениеДоброе утро!
Подскажите пожалуйста код возвращает ссылки на диапазон A1:A2 в чем причина??
[vba]
Код

Public Function Yacheiki(nomStr As Integer, bukva As String)
    Dim a1
    Dim a2
    
    a1 = Cells(nomStr, bukva).Address
    
    b = 0
    c = nomStr

        For a = 1 To 3
            KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
            b = KolStr
            c = c + b
            
        Next
        a2 = Cells(c, bukva).Address
    
    Set Yacheiki = Range("a1:a2")
    
End Function
[/vba]

Автор - imxotep
Дата добавления - 24.11.2015 в 08:18
Pelena Дата: Вторник, 24.11.2015, 09:26 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19195
Репутация: 4422 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Потому что так прописано в функции
[vba]
Код
Set Yacheiki = Range("a1:a2")
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Потому что так прописано в функции
[vba]
Код
Set Yacheiki = Range("a1:a2")
[/vba]

Автор - Pelena
Дата добавления - 24.11.2015 в 09:26
imxotep Дата: Вторник, 24.11.2015, 09:53 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
а как же быть? если я присваиваю значения для а1 и для а2???
 
Ответить
Сообщениеа как же быть? если я присваиваю значения для а1 и для а2???

Автор - imxotep
Дата добавления - 24.11.2015 в 09:53
Roman777 Дата: Вторник, 24.11.2015, 10:07 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
imxotep, вы хотите переменной присвоить значения сразу двух ячеек?


Много чего не знаю!!!!
 
Ответить
Сообщениеimxotep, вы хотите переменной присвоить значения сразу двух ячеек?

Автор - Roman777
Дата добавления - 24.11.2015 в 10:07
imxotep Дата: Вторник, 24.11.2015, 10:18 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, Я хочу присвоить переменной диапазон.
 
Ответить
СообщениеRoman777, Я хочу присвоить переменной диапазон.

Автор - imxotep
Дата добавления - 24.11.2015 в 10:18
SLAVICK Дата: Вторник, 24.11.2015, 10:22 | Сообщение № 12
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Если у Вас а1 и а2 = string, тогда так:
[vba]
Код
Set Yacheiki = Range(a1 & ":" & a2)
[/vba]

Но я бы переписал так:
[vba]
Код
Public Function Yacheiki(nomStr As Integer, bukva As String)
    Dim a1 As Range
    Dim a2 As Range
    Set a1 = Cells(nomStr, bukva)
    b = 0
    c = nomStr
        For a = 1 To 3
            KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
            b = KolStr
            c = c + b
        Next
    Set a2 = Cells(c, bukva)
    Set Yacheiki = Range(a1, a2)
End Function
[/vba]


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Вторник, 24.11.2015, 10:26
 
Ответить
СообщениеЕсли у Вас а1 и а2 = string, тогда так:
[vba]
Код
Set Yacheiki = Range(a1 & ":" & a2)
[/vba]

Но я бы переписал так:
[vba]
Код
Public Function Yacheiki(nomStr As Integer, bukva As String)
    Dim a1 As Range
    Dim a2 As Range
    Set a1 = Cells(nomStr, bukva)
    b = 0
    c = nomStr
        For a = 1 To 3
            KolStr = Cells(c + b, bukva).MergeArea.Cells.Count
            b = KolStr
            c = c + b
        Next
    Set a2 = Cells(c, bukva)
    Set Yacheiki = Range(a1, a2)
End Function
[/vba]

Автор - SLAVICK
Дата добавления - 24.11.2015 в 10:22
imxotep Дата: Вторник, 24.11.2015, 10:45 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Спасибо!
 
Ответить
СообщениеSLAVICK, Спасибо!

Автор - imxotep
Дата добавления - 24.11.2015 в 10:45
imxotep Дата: Вторник, 24.11.2015, 10:47 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, а1 = Cells(nomStr, bukva) - это же значение ячейки? А мне нужен адрес
 
Ответить
СообщениеSLAVICK, а1 = Cells(nomStr, bukva) - это же значение ячейки? А мне нужен адрес

Автор - imxotep
Дата добавления - 24.11.2015 в 10:47
RAN Дата: Вторник, 24.11.2015, 11:44 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я хочу присвоить переменной диапазон.

А мне нужен адрес

Вы уж определитесь, что нужно, адрес, или диапазон.

PS что пишете, то и получаете
Вы значение ячейки, SLAVICK диапазон.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Вторник, 24.11.2015, 11:46
 
Ответить
Сообщение
Я хочу присвоить переменной диапазон.

А мне нужен адрес

Вы уж определитесь, что нужно, адрес, или диапазон.

PS что пишете, то и получаете
Вы значение ячейки, SLAVICK диапазон.

Автор - RAN
Дата добавления - 24.11.2015 в 11:44
imxotep Дата: Вторник, 24.11.2015, 11:56 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, Уже разобрался, спасибо
 
Ответить
СообщениеRAN, Уже разобрался, спасибо

Автор - imxotep
Дата добавления - 24.11.2015 в 11:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » sub or function defined (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!