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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2012, 08:17   #31
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
""
одна кавычка лишняя
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 10.10.2012, 09:12   #32
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
Private Sub Worksheet_Activate()
    Dim a(), i&, ii&    'объявляем переменные
    Cells.Clear    'очистка
    a = Sheets("Лист заказа").UsedRange.Columns(1).Resize(, 5).Value    'заполняем массив из первых колонок , расширяем + 5 колонок

    ReDim b(1 To UBound(a), 1 To 2)    'объявляем массив по размеру a() в высоту, шириной 2 столбца

    For i = 1 To UBound(a)    'цикл с одного по количество элементов первого массива

        If Len(a(i, 1)) Then    'если есть значение (т.е. значение имеет длину) - откидываем пустые

            If IsNumeric(a(i, 1)) Then    ' проверка на числовое значение - откидываем нечисла

                If a(i, 1) > 0 Then    'проверяем на ноль - откидываем нули

'...

[a2].Resize(ii, 2) = b 'заполняем лист из массива - расширяем с A2 вниз на значение ii, вправо на 2 столбца
"Offset(1)" - это сдвиг на одну строку вниз. В данном случае всей полученной ресайзом области.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.10.2012, 09:33   #33
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Код:
       If Len(a(i, 1)) Then
            If IsNumeric(a(i, 1)) Then
можно заменить на
Код:
       If VarType(a(i, 1)) = vbDouble Then
При этом, конечно, потеряются числа, записанные как текст. Но зачем записывать числа как текст?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 10.10.2012, 15:13   #34
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
По умолчанию

Ага, он ругается если нет заполненных ячеек, то вылетает на строчке [a2].Resize(ii, 2) = b
сделал по аналогии:
Код:
If Len(b(1, 1)) Then
          [a2].Resize(ii, 2) = b
    End If
Норм?
TorLink вне форума Ответить с цитированием
Старый 10.10.2012, 15:13   #35
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
одна кавычка лишняя
Просто копировал из 1С, яж как строку передаю в модуль.
TorLink вне форума Ответить с цитированием
Старый 10.10.2012, 15:14   #36
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Но зачем записывать числа как текст?
Ну так а если формат ячейки текст?

Ещё вопрос, а как поменять Листы местами?? Я программно добавляю лист, переименовываю их, а потом нужно поменять местами по порядку.

Последний раз редактировалось TorLink; 10.10.2012 в 15:49.
TorLink вне форума Ответить с цитированием
Старый 10.10.2012, 15:58   #37
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
[CODE]Private Sub Worksheet_Activate()
"Offset(1)" - это сдвиг на одну строку вниз. В данном случае всей полученной ресайзом области.
Всё равно не понятно, на что он ругается.
Код:
.Resize(.Rows.Count - 1).Offset(1).Clear
вылетает на этой строчке
Код:
Private Sub Worksheet_Deactivate()
   With Sheets("Сумма заказа").UsedRange
    .Resize(.Rows.Count - 1).Offset(1).Clear
    End With
End Sub
Пока сделал просто Cells.Clear, но надо исправить наверное)

Последний раз редактировалось TorLink; 10.10.2012 в 16:06.
TorLink вне форума Ответить с цитированием
Старый 10.10.2012, 16:13   #38
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

"вылетает на строчке [a2].Resize(ii, 2) = b"
Да, это забыл.
Там нужно сперва проверить значение ii:


If ii > 0 Then [a2].Resize(ii, 2) = b

А что за If Len(b(1, 1)) Then ?



"ругается.
.Resize(.Rows.Count - 1).Offset(1).Clear
вылетает на этой строчке"

Ну только если
Sheets("Сумма заказа").UsedRange.Rows.Count < 2.
Т.е. если там только шапка. Да, это проблемка... Нужно сперва посчитать это UsedRange.Rows.Count - если 1, то ничего не чистим.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.10.2012, 22:01   #39
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
"вылетает на строчке [a2].Resize(ii, 2) = b"
Да, это забыл.
Там нужно сперва проверить значение ii:

If ii > 0 Then [a2].Resize(ii, 2) = b

А что за If Len(b(1, 1)) Then ?

"ругается.
.Resize(.Rows.Count - 1).Offset(1).Clear
вылетает на этой строчке"

Ну только если
Sheets("Сумма заказа").UsedRange.Rows.Count < 2.
Т.е. если там только шапка. Да, это проблемка... Нужно сперва посчитать это UsedRange.Rows.Count - если 1, то ничего не чистим.
Ругалось видимо на b
Код:
If Len(b(1, 1)) Then
Это я так проверил, что b заполнено, после этого всё заработало...

Код:
Private Sub Worksheet_Deactivate()
If Sheets("Сумма заказа").UsedRange.Rows.Count >1 Then   
   With Sheets("Сумма заказа").UsedRange
    .Resize(.Rows.Count - 1).Offset(1).Clear
    End With
End If
End Sub
так?

Ещё можете прояснить, как воспринимается параметр ".Rows.Count - 1" ? без объекта перед точкой? Это стандатный синтаксис VBA?

И не ответили) :
"Ещё вопрос, а как поменять Листы местами?? Я программно добавляю лист, переименовываю их, а потом нужно поменять местами по порядку."

Последний раз редактировалось TorLink; 11.10.2012 в 18:26.
TorLink вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# Обработчик события yulshaz Помощь студентам 7 24.09.2012 08:12
Обработчик события окна 3StYleR Паскаль, Turbo Pascal, PascalABC.NET 0 25.04.2012 16:54
Обработчик события yardie Общие вопросы .NET 3 26.03.2011 18:30
Динамический обработчик события SKYDOS Помощь студентам 2 11.04.2008 06:46
Обработчик события... Flash_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 12.03.2007 21:24