Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 17
1

Ошибка в функции возникает только если она запускается по кнопке в тулбаре

24.05.2010, 13:43. Показов 1443. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть процедурка:
Visual Basic
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
' strPath - path to new Excel file without macros
Sub CopyAllWithoutMacros(ByRef strPath As String)
    Dim nSheets, nSheetsNew As Integer
    Dim flgNew As Integer
    On Error GoTo Err
    flgNew = 0
    OldName = ActiveWindow.Caption
    Application.ScreenUpdating = False
    nSheets = ActiveWorkbook.Sheets.Count
    For i = 1 To nSheets
        If ActiveWorkbook.Sheets(i).Visible = True Then
            ActiveWorkbook.Sheets(i).Copy Before:=Sheets(i)
            flgNew = flgNew + 1
            If flgNew = 1 Then
                Workbooks.Add
                NewWindowName = ActiveWindow.Caption
                Windows(OldName).Activate
                nSheetsNew = Workbooks(NewWindowName).Sheets.Count
                Sheets(i).Move After:=Workbooks(NewWindowName).Sheets(nSheetsNew)
                Sheets(nSheetsNew).Visible = True
                Application.DisplayAlerts = False
                For k = 1 To Sheets.Count - 1
                    Sheets(1).Delete
                Next
            Else
                Windows(OldName).Activate
                nSheetsNew = Workbooks(NewWindowName).Sheets.Count
                Sheets(i).Move After:=Workbooks(NewWindowName).Sheets(nSheetsNew)
            End If
            Windows(OldName).Activate
            nSheetsNew = Workbooks(NewWindowName).Sheets.Count
            Workbooks(NewWindowName).Sheets(nSheetsNew).Name = Sheets(i).Name
        End If
    Next
    Workbooks(NewWindowName).SaveAs Filename:=strPath, FileFormat:=xlNormal, Password:='', WriteResPassword:='', ReadOnlyRecommended:=False, CreateBackup:=False
    Application.ScreenUpdating = True
Err:
    If Err.Number <> 0 Then
        Msg = 'Îøèáêà #' & Str(Err.Number) & ' âîçíèêëà â ' _
                & Err.Source & Chr(13) & Err.Description
        MsgBox Msg, , 'Error', Err.HelpFile, Err.HelpContext
    End If
End Sub
если ее запускать в Private Sub Workbook_Open(), то все замечательно работает.
если же она запускается так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function MakeAndSendReport()
    Dim strPath, strFileName As String
    Dim CurrDate As Date
        CurrDate = Date
        strFileName = 'report_' & Format(CurrDate, 'yymmdd') & '.XLS'
        strPath = g_strPath & strFileName
        CopyAllWithoutMacros (strPath)
End Function
 
Sub CreateSendButton()
    Dim oThisCtrl As CommandBarButton
    Dim oCmdBar As CommandBar
    
    Set oCmdBar = CommandBars.Add('SendReportBar')
    oCmdBar.Visible = True
    oCmdBar.Position = msoBarTop
    Set oThisCtrl = oCmdBar.Controls.Add
    With oThisCtrl
        .FaceId = 1675
        .TooltipText = 'Report'
        .OnAction = 'MakeAndSendReport()'
    End With
End Sub
то возникает слдеующая ошибка в строке Workbooks.Add:
Error 1004 in method 'Add' in workbook.

с чем это связано, кто-то подскажет?
никогда не думал, что макрос при переносе из автозапуска на кнопку может заглючить... бардак...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2010, 13:43
Ответы с готовыми решениями:

Возникает ошибка, обьясните в чем она может заключаться
// server.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot;...

Всплывающее меню появляется только если два раза кликнуть по кнопке
Здравствуйте ребята! Сделал меню всплывающее по клику кнопки , но оно у меня всплывает только...

Удаление подстроки только, если она в начале строки
Здравствуйте. Как удалить подстроку, если она только в начале строки? Пробовал ltrim(), но она...

Если в OpenFileDialog нажать отмену - возникает ошибка
Здравствуйте, у меня возникла такая проблема. Открываю диалоговое окно загрузки картинку, если...

3
Lenivec
24.05.2010, 16:40 2
В тулбаре можно использовать только функции.
Переопредели процедуру как функцию и все заработает.
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 17
25.05.2010, 10:37  [ТС] 3
не... ответ не катит...

я в курсе, что выполняются только ф-и (см. код)

.OnAction = 'MakeAndSendReport()'

MakeAndSendReport() - это ф-я, внутри которой вызывается процедура Sub CopyAllWithoutMacros(ByRef strPath As String).

эта процедура вызывает ошибку только если вызывается после нажатия на кнопку в тулбаре...

есть подозрение, что это из-за глюкавости офиса2000. Проблема что я юзаю BusinessQuery Add-in, который вродеб под ХР не работает, приходится юзать старый...

вчера вот вроде избавился от ошибки просто перестановкой строчки
Application.DisplayAlerts = False
на самый верх. То есть ошибка на Workbook.Add больше не вылазит, но тем не менее xls-файл, который я создаю без макроса и копирую туда данные, не открывается в офиссе2000, а просит отослать отчет об ошибке в Микрософт )
в ХР этот же файл залетает
0
Lenivec
25.05.2010, 12:04 4
Удали скобки и все будет работать.
.OnAction = 'MakeAndSendReport'
Кстати екселю пофиг что представляет собой вызываемый макрос процедуру или функцию, это я с аксесом перепутал.
25.05.2010, 12:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2010, 12:04
Помогаю со студенческими работами здесь

Если открыт Excel, то возникает ошибка при сохранении
Здравствуйте! Если что-то неправильно (не та ветка и т.д.), то я первый раз на форуме. Пишу...

Команда FileSystem.RmDir удаляет папку только если она пустая.
Добрый день! У меня небольшая проблема. Команда FileSystem.RmDir (путь + имя папки) удаляет папку...

Возникает ошибка из-за функции
Как исправить ошибку в label3.Text=F(2, n, 0, m, a);//начальный делитель, число, начало...

Если вынести QTemporaryFile в отдельный класс или функцию, возникает ошибка
Привет. Имею след. код: QString filename = &quot;C:\\33.txt&quot;; QString password = &quot;1234&quot;; ...

При выборке данных возникает ошибка, если встречаются пустые значения
Доброго всем дня! При выборке данных из Бд : Dim Connect1 As New...

Написать функцию, которая получает на вход имя другой функции и возвращает саму функцию, если она есть и null, если нет.
Написать функцию, которая получает на вход имя другой функции, а на выходе возвращает саму функцию,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru