Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required. / 9 сообщений из 9, страница 1 из 1
02.07.2015, 16:32
    #38998092
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
Добрый день.

Возникает ошибка Run-time error 424 Object Required.
Я подозреваю, что это связанно с названием книги, в таких строках в функции, где я использую Namebook1:
Код: vbnet
1.
If Namebook1.Worksheets(1).Cells(14, NumMount + 10).Value = StrCPPMonth Then ' Находим месяц



Я прикрепил файл, где я тестирую данный код.
имя книги Namebook1, я присваиваю и он передает его в функцию, но вот можно ли данное имя вообще потом использовать в коде и понимает ли его VBA?

Прикрепляю файл, и следующим письмо еще один файл. Так два тут прикрепить нельзя.
Работают они так - Через файл "Взять данные из другой книги2", нажать на ячейку СРР и просто открыть "Сырье1".

и он найдет то что ему нужно в в книге "Сырье1" и отправиться в функцию(она вынесена на отдельный модуль) и начнет добавлять найденные данные в книгу "Взять данные из другой книги2". На это месте выскакивает ошибка.
...
Рейтинг: 0 / 0
02.07.2015, 16:32
    #38998095
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
Прикрепляю файл "Сырье1"
...
Рейтинг: 0 / 0
02.07.2015, 16:48
    #38998120
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
Код.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Option Explicit
' Общие данные
Dim j, i, y, NumRow, NumCol, iRow, iCol, NumRowCPP As Integer
' СРР
Dim StrCPP As Long
Dim Namebook1, Namebook2, FilesToOpen As String ' окно открытия файлов и название книг
Dim StrKanal, StrKanal2, StrMonth, StrCPPMonth, StrCPPKanal, StrCPPGorod As String


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    ' ////////////////// ЗАНЕСТИ CPP  \\\\\\\\\\\\\\\\\\\\\\\\\

If Not Intersect(Target, Cells(12, 8)) Is Nothing Then
Cancel = True
Dim wb_1 As Excel.Workbook, wb_2 As Excel.Workbook

FilesToOpen = Application.GetOpenFilename _
        (FileFilter:="Книга Excel (*.xls*), *.xls*", MultiSelect:=False, Title:="Выбрать текстовые или Excel файлы")
 
    If VarType(FilesToOpen) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If

Set wb_1 = ActiveWorkbook ' Основная книга
Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга

Namebook1 = wb_1.Name ' имя основной книги.
Namebook2 = wb_2.Name ' Имя сырьевой книги.

'For NumberCol = 1 To 69
'    wb_2.Worksheets(1).Cells(8, NumberCol).Value = NumberCol
'Next

NumRowCPP = 15
While wb_2.Worksheets(1).Cells(NumRowCPP, 1).Value <> ""
    For j = 0 To 11
        'MsgBox wb_2.Worksheets(1).Cells(NumRowCPP, 1).Value
        If wb_2.Worksheets(1).Cells(NumRowCPP, j + 58).Value <> 0 Then
            StrCPP = wb_2.Worksheets(1).Cells(NumRowCPP, j + 58).Value  'присваиваем числовое значение CPP).
            MsgBox StrCPP
            StrCPPKanal = wb_2.Worksheets(1).Cells(NumRowCPP, 3).Value 'присваиваем текстовое значение Канала).
            MsgBox StrCPPKanal
            StrCPPGorod = wb_2.Worksheets(1).Cells(NumRowCPP, 1).Value
            MsgBox StrCPPGorod
            StrCPPMonth = wb_2.Worksheets(1).Cells(10, j + 58).Value 'присваиваем числовое значение Месяц).
            MsgBox StrCPPMonth
            SearchCPP (Namebook1), (StrCPP), (StrCPPGorod), (StrCPPKanal), (StrCPPMonth)
        End If
    Next
NumRowCPP = NumRowCPP + 1
Wend
'wb_2.Close
'SearchCPP ' функция заполнения CPP

End If

End Sub




функция

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Option Explicit
Dim NumGorod, NumGorod2, NumMount As Variant

Function SearchCPP(Namebook1, StrCPP, StrCPPKanal, StrCPPGorod, StrCPPMonth)

' Узнаем сколько строк с городами
NumGorod = 17 ' самый первый городо в МП
NumGorod2 = 0 ' Посчитаем сколько раз дублиуется искомый город

For NumMount = 0 To 213 Step 18 ' Цикл по месяцам
    MsgBox Namebook1.Worksheets(1).Cells(14, NumMount + 10).Value
    If Namebook1.Worksheets(1).Cells(14, NumMount + 10).Value = StrCPPMonth Then ' Находим месяц
        MsgBox Namebook1.Worksheets(1).Cells(14, NumMount + 10).Value
        Do While Namebook1.Worksheets(1).Cells(NumGorod, 2).Value = StrCPPGorod ' Цикл по городам
            MsgBox Namebook1.Worksheets(1).Cells(NumGorod, 2).Value
            
            While Namebook1.Worksheets(1).Cells(NumGorod + NumGorod2, 2).Value = StrCPPGorod
                NumGorod2 = NumGorod2 + 1
            Wend
            
            For NumGorod = 0 To NumGorod2 + NumGorod
                If Namebook1.Worksheets(1).Cells(NumGorod, 4).Value = StrCPPKanal Then ' Находим канал
                    MsgBox Namebook1.Worksheets(1).Cells(NumGorod, 4).Value
                      
                    'SearchCPP (StrCPP), (StrCPPGorod), (StrCPPKanal), (StrCPPMonth)
                    
                    'MsgBox StrCPP & " " & StrCPPKanal & " " & StrCPPGorod & " " & StrCPPMonth
                    Namebook1.Worksheets(1).Cells(NumGorod, NumMount + 10).Select
                    MsgBox Namebook1.Worksheets(1).Cells(NumGorod, NumMount + 10).Value
                    'wb_1.Worksheets(1).Cells(12, 24).Value = StrCPP
                End If
            Next
        If NumGorod > 300 Then
            MsgBox "Город не найден"
            Exit Do
        End If
        NumGorod = NumGorod + 1
        Loop
    End If
Next NumMount
 

End Function


...
Рейтинг: 0 / 0
02.07.2015, 17:14
    #38998154
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
lopuxi
Код: vbnet
1.
Namebook1 = wb_1.Name

переменной Namebook1 присваимается ИМЯ книги, то есть СТРОКА (тип String)
lopuxi
Код: vbnet
1.
Namebook1.Worksheets(1)

тут ты пытаешься достать из строки некое свойство Worksheets. Ну нет у строки свойств, они в VBA только у объектов, на что тебе и выдается сообщение об ошибке.

Другими словами, ты делаешь следующее:
Код: vbnet
1.
2.
3.
Dim Namebook1 As Variant
Namebook1 = "blablabla"
Msgbox Namebook1.Worksheets(1).Cells(1, 1).Value

вопрос, откуда в данном коде вдруг возник какой-то Worksheets?
...
Рейтинг: 0 / 0
02.07.2015, 17:55
    #38998204
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
[quot Shocker.Pro]lopuxi
Код: vbnet
1.
2.

вопрос, откуда в данном коде вдруг возник какой-то Worksheets?

Мне нужно работать с первым листом. По этому WorkSheets(1)

Насчет активной книги, я вас понял. Поправил.
Перед тем как запустить функцию, я переключаюсь на лист.
По сути имя книги мне вообще не нужно.
Код: vbnet
1.
wb_1.Activate



Я вот только еще не понимаю, как мне отмену операции сделать.

Код, не помогает при нажатии кнопки "отмена"
Код: vbnet
1.
2.
3.
4.
If VarType(FilesToOpen) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If
...
Рейтинг: 0 / 0
02.07.2015, 18:24
    #38998230
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
lopuxi,
учитесь производить простейшие отладочные действия. Ваши инструменты: F8 (пошаговое выполнение), F9 (точка останова), F5 и др. команды из меню Debug, а также окно Locals.
В данном случае видим, что если нажать "отмена", то FilesToOpen имеет значение "False". Вообще, эта переменная объявлена As String и поэтому никогда не будет иметь тип Boolean. Варианты:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim FilesToOpen As String
'...
    If FilesToOpen = "False" Then Exit Sub 'была нажата кнопка отмены - выход из процедуры

'или

Dim FilesToOpen 'As Variant
'...
    If VarType(FilesToOpen) = vbBoolean Then Exit Sub 'была нажата кнопка отмены - выход из процедуры
...
Рейтинг: 0 / 0
02.07.2015, 18:32
    #38998240
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
Казанский,

Спасибо! Помогло))
Поправил, теперь закрывается нормаль.
...
Рейтинг: 0 / 0
02.07.2015, 21:44
    #38998370
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
lopuxiМне нужно работать с первым листом. По этому WorkSheets(1)повторю код:
Код: vbnet
1.
2.
3.
Dim Namebook1 As Variant
Namebook1 = "blablabla"
Msgbox Namebook1.Worksheets(1).Cells(1, 1).Value

откуда у простой строки (строковой переменной) возьмется волшебным образом свойство Worksheets?
...
Рейтинг: 0 / 0
02.07.2015, 22:21
    #38998394
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required.
lopuxiКод, не помогает при нажатии кнопки "отмена"
Вообще не очень понятно откуда взялось
FilesToOpen As String
В статье, откуда этот код был взят у FilesToOpen не задан тип(там это переменная avFiles).
Если уж копируете, то повнимательнее. А то так и будут ошибки на ровном месте.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не могу понять из-за чего возникает ошибка Run-time error 424 Object Required. / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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