Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2019, 14:49   #1
sega1999
 
Регистрация: 24.07.2019
Сообщений: 6
По умолчанию не срабатывает функция на первом листе книги

Народ, может кто поможет... имеется файл в котором работает макрос на открытие файла. Макрос пробегает по всем листам книги и в некоторые ячейки первого столбца прописывает функцию которая должна прорисовать картинки на всех листах. Если лист только один - все нормально. Если листов два, то прорисовка происходит только на втором листе. Что может быть?

Приложил 2 файла в архиве:
Bar-Code-Err.xlsm - с ошибкой
Bar-Code-Good.xlsm - без ошибки

Excel 2007
Вложения
Тип файла: zip 11.zip (55.0 Кб, 14 просмотров)

Последний раз редактировалось sega1999; 24.07.2019 в 14:52.
sega1999 вне форума Ответить с цитированием
Старый 24.07.2019, 15:10   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Может не стоило автопересчет отключать? Не вникал глубоко, просто добавил 2 изменения. Открылось с рисунками
Код:
Private Sub Workbook_Open()
    Dim wsheets As Sheets
    Dim wsheet As Worksheet
    Dim wsheet1 As Worksheet
    
    Set wsheet1 = ЭтаКнига.ActiveSheet
    
    ' Отключение авто-пересчета
    ' Application.Calculation = xlCalculationManual
    
    Set wsheets = ЭтаКнига.Worksheets
    UserForm1.Show
    Dim d_rng As Range
    Set d_rng = ActiveCell
    
    
    For Each wsheet In wsheets
        '    Set wsheet = ЭтаКнига.ActiveSheet
        wsheet.Activate
        Dim c_cell As String
        Dim n_row As Integer
        n_row = 1
        c_cell = "B" + CStr(n_row)
        Dim data_rng1 As Range
        Dim data_rng As Range
        Set data_rng = wsheet.Range(c_cell)
        Dim height As Integer
        height = data_rng.RowHeight
        Dim cf As String
        Dim i As Integer
        i = 0
        
        Dim shp_rng As Range
        
        
        
        Do
            If IsEmpty(data_rng.Value) Then Exit Do
            
            Set shp_rng = data_rng.Offset(0, 1)
            
            '    Range("A2").Select
            '    ActiveCell.FormulaR1C1 = "22223wfasdfdasfasfasf"
            c_cell = "A" + CStr(n_row)
            Set data_rng1 = wsheet.Range(c_cell)
            ' пересчет ячейки
            'data_rng1.Calculate
            data_rng1.Select
            
' ======================
            '''  If IsEmpty(data_rng1.Value) Then
            '''   data_rng1.Select
            
            cf = "=CreateBarcode(R[6]C[1])"
            '    cf = "=CreateBarcode(ПСТР(R[6]C[1];6;39))"
            data_rng1.FormulaR1C1 = cf
            
            '        ActiveCell.FormulaR1C1 = cf
            '''  End If
' ======================
            
            Set data_rng = data_rng.Offset(8, 0)
            n_row = n_row + 8
            DoEvents
            '    PauseTime = 1    ' Set duration.
            '    Start = Timer    ' Set start time.
            '    Do While Timer < Start + PauseTime
            '        DoEvents    ' Yield to other processes.
            '    Loop

' ======================
            wsheet.Calculate '<<<<<<<<<<<<<<
' ======================
        Loop
    Next
    '   включение авто перечета
    ' Application.Calculation = xlCalculationAutomatic
    wsheet1.Activate
    d_rng.Select
    
    Unload UserForm1
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 24.07.2019, 15:37   #3
sega1999
 
Регистрация: 24.07.2019
Сообщений: 6
По умолчанию

тоже самое.

Кстати, если из ячеек с ошибкой убрать данные и запустить макрос , то все прорисуется нормально.
Но заставлять пользователя это делать нельзя.
Вложения
Тип файла: zip Bar-Code-Err1.zip (28.3 Кб, 10 просмотров)

Последний раз редактировалось sega1999; 24.07.2019 в 15:42.
sega1999 вне форума Ответить с цитированием
Старый 24.07.2019, 16:05   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от sega1999 Посмотреть сообщение
тоже самое.
посмотрел ваш файл. Внесена только одна с моих правок.
Удачи в поиску решения.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 24.07.2019, 16:20   #5
sega1999
 
Регистрация: 24.07.2019
Сообщений: 6
По умолчанию

Извиняюсь, и второе Ваше изменение внес.
тоже самое.
Правда если после открытия запустить макрос через редактор, то срабатывает.

может файл битый изначально запускается...
Вложения
Тип файла: zip Bar-Code-Err2.zip (28.5 Кб, 12 просмотров)
sega1999 вне форума Ответить с цитированием
Старый 24.07.2019, 21:25   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Попробуйте такой вариант еще
Вложения
Тип файла: zip Bar-Code-Err2.zip (33.7 Кб, 13 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск значений из нескольких листов в первом листе dwmair23 Microsoft Office Excel 17 07.02.2019 11:52
Макров не срабатывает на активном листе PreoLo Microsoft Office Excel 6 21.05.2015 08:57
Взятие определенных данных с других листов в таблицу на первом листе. Merelins Microsoft Office Excel 3 30.08.2013 15:25
Не срабатывает функция! Nikita090 JavaScript, Ajax 3 15.01.2012 01:12
Фильтрация данных на втором листе по данным на первом ppl Microsoft Office Excel 3 13.08.2008 14:07