Страницы: 1
RSS
Использование функции переноса данных с одного листа на другой (VBA) в shared workbook, Перенос строки на другой лист с последующим удалением с листа-донора
 
Коллеги, добрый вечер

Возможно тема поднималась ранее (не смог найти, к своему сожалению), но попробую спросить:
существуют ли какие-нибудь ограничения на макрокоманды в книгах с общим доступом?

При выполнении данного кода в книге - происходит корректный перенос (копирование с листа "info_list" на "лист1" выделенного в Listbox1 диапазона).
Однако, как только книга приобретает статус расшаренной для общего доступа, при выборе последнего в списке listbox1 значения происходит ошибка и на лист1 переносятся все записи (и выбранные и не выбранные, включая заголовки из листа "info_list").

Объявление переменных, к сожалению не помогло.
Прошу вашей помощи.
Код
Private Sub CommandButton2_Click()
    Dim i As Long
    
    With ListBox1

    For i = Me.ListBox1.ListCount - 1 To 0 Step -1
        If Me.ListBox1.Selected(i) Then
           j = j + 1
            Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Copy Sheets("Лист1").Range("A" & Rows.Count).End(xlUp).Offset(1)
            Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Delete
        End If
   Next i
    
    LoadListBox
    
      MsgBox "'OK'", vbInformation
End With
End Sub
Изменено: Astroid1 - 09.03.2016 22:57:42
 
Список ограничений книг с общим доступом читали?
не нужно оскорблять.
 
не то
Изменено: Александр Сергеевич - 09.03.2016 23:03:47
не нужно оскорблять.
 
так вроде работает, но я так и не понял причины(лень ваш код разбирать) просто обошел проблему
Код

Private Sub CommandButton2_Click()
    Dim i As Long
    
    With ListBox1

    For i = Me.ListBox1.ListCount - 1 To 0 Step -1

    
    
        If Me.ListBox1.Selected(i) Then
        
                If i = Me.ListBox1.ListCount - 1 Then
                Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Copy Sheets("Лист1").Range("A" & Rows.Count).End(xlUp).Offset(1)
                Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Value = ""
                j = j + 1
                Else
        
        
           j = j + 1
            Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Copy Sheets("Лист1").Range("A" & Rows.Count).End(xlUp).Offset(1)
            Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Delete
                End If
        End If
   Next i
    
    LoadListBox
    
      MsgBox "'OK'", vbInformation
End With
End Sub
не нужно оскорблять.
 
Astroid1,
такой глупый вопрос а для чего в коде   j = j + 1 ?
не нужно оскорблять.
 
Astroid1, проблема в команде удаления. Попробуйте в режиме общего доступа проделать это вручную - выделить ряд из 7 ячеек, правый клик - Удалить. Как видите, удалить можно только строку или столбец, причем для последней строки по умолчанию выбирается столбец, а для средних строк - строка!
Поэтому укажите явно, что Вы хотите удалить строку:
Код
            Sheets("Info_list").Range("A" & i + 2).EntireRow.Delete

А в коде много лишнего, да.
Изменено: Казанский - 10.03.2016 00:29:19
 
Казанский,

?Sheets("Info_list").Range("A" & 100 + 2).Resize(1, 7).address
$A$102:$G$102

?Sheets("Info_list").Range("A" & 100 + 2).Resize(1, 7).entirerow.address
$102:$102


Цитата
Казанский написал:
причем для последней строки по умолчанию выбирается столбец, а для средних строк - строка!
это специфека только для книг с общем доступом?  то что он удаляет целый столбик я заметил, в какой момент он выделяет целый столбик?
не нужно оскорблять.
Страницы: 1
Наверх