Страницы: 1
RSS
Макрос стирает нужные ячейки
 
Добрый день, друзья. Нужна помощь в исправлении макроса. Макрос копирует из листа 1 на лист 2 столбцы A,B,C при условии, если заполнен столбец A. Однако, если попробовать написать что-нибудь в столбцах D, E, F и тд, и перейти со 2 листа на 1, то он стирает все, что было написано на 2 листе. Можно это как-нибудь исправить?
Код
Private Sub Worksheet_Activate()
    Dim a(), i&, ii&, x&
    a = Sheets(1).UsedRange.Value
    ReDim b(1 To UBound(a, 1), 1 To UBound(a, 1))
    For i = 1 To UBound(a)
        If Len(a(i, 1)) Then
            ii = ii + 1
                b(ii, 1) = a(i, 1) 'столбец A
                b(ii, 2) = a(i, 2) 'столбец B
                b(ii, 3) = a(i, 3) 'столбец C
        End If
    Next
    [a1].Resize(ii, UBound(b, 1)) = b
End Sub
 
Цитата
Екатерина Ковалева написал:
Макрос копирует из листа 1 на лист 2 столбцы A,B,C
а вот и нет. Макрос копирует ВСЕ данные. Об этом говорит UsedRange. Возможно, так сработает(файл не смотрел, писал на коленке):
Код
Private Sub Worksheet_Activate()
    Dim a(), i&, ii&, x&
    on error resume next
    With Sheets(1)
        a = Intersect(.Columns(1).Resize(,2),.UsedRange).Value
        if not is array(a) then
           exit sub
        end if
    End With
    ReDim b(1 To UBound(a, 1), 1 To UBound(a, 1))
    For i = 1 To UBound(a)
        If Len(a(i, 1)) Then
            ii = ii + 1
                b(ii, 1) = a(i, 1) 'столбец A
                b(ii, 2) = a(i, 2) 'столбец B
                b(ii, 3) = a(i, 3) 'столбец C
        End If
    Next
    [a1].Resize(ii, UBound(b, 1)) = b
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Екатерина Ковалева написала:
при условии, если заполнен столбец A.
Дмитрий(The_Prist) Щербаков, может ли Len это определить во всех возможных случаях? нулевые строки, пробелы в разных вариантах? (просто вопрос для общего развития, т.к. не спец в этом)
 
Дмитрий(The_Prist) Щербаков, говорит, что ошибка в строчке  if not is array(a) then
 
Екатерина, Дмитрий говорит про UsedRange.

Цитата
Екатерина Ковалева написал: говорит, что ошибка...
Екатерина Ковалева, извините, где он про это говорит? И по задаче - похоже Вы не все рассказали (выгрузка из другой программы, отсюда и проблемы со столбцом "А"?)    :)  
 
_Igor_61, не понимаю про какую другую программу идет речь, я скинула файл в котором идет работа. Ошибка в синтаксисе
 
Добавьте в свой макрос из #1 после строки 3
Код
Debug.Print UBound(a, 1), UBound(a, 2)

и посмотрите, какие размеры имеет массив "a". То же выполните с массивом "b" и сравните.
Если Вы хотите работать с 3 столбцами, то и отводите в массиве b 3 столбца.
Изменено: sokol92 - 02.02.2021 20:06:47
Владимир
 
Цитата
Екатерина Ковалева написал:
Ошибка в синтаксисе
Екатерина, поскольку Вы в этом абсолютно уверены, несмотря на предыдущие посты, продолжайте искать ошибки в синтаксисе   :) Не обижайтесь, посмотрите здесь
Изменено: _Igor_61 - 02.02.2021 20:52:31
 
_Igor_61, за что мне на вас обижаться, спасибо за помощь, мне помог пост, который Вы скинули, все работает, ничего не стирается. sokol92, спасибо!
 
Цитата
Екатерина Ковалева написал:
говорит, что ошибка в строчке  if not is array(a) then
по сути надо-то было всего лишь убрать пробел :) На автомате, видимо, напечатал
Код
if not isarray(a) then
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх