2015-02-03 2 views
1

У меня есть отчет, который я извлекаю непосредственно из нашей базы данных (Query), но он содержит больше информации, чем необходимо (элементы без значений), поэтому я добавил подпрограмму для удаления лишних строк. Подпрограмма, похоже, отлично работает, чтобы исправить пустые строки. Затем у меня есть другая подпрограмма, которая копирует возвращаемые значения и помещает их ниже на другой лист, где уже размещен заголовок, а затем другой, чтобы добавить блок подписи внизу. Когда все это будет завершено, пользователь сделает копию этого листа и переименует его в течение месяца и года, к которому он относится. Это был бы законченный и простой процесс, но ...Когда я обновляю свои данные, он меняет результаты моего Sub

Проблема в том, что когда данные рабочей книги обновляются, чтобы создать новый отчет, все предыдущие копии отформатированных и готовых отчетов внезапно включают строки, которые были удален. Я не понимаю, как удаленные строки возвращаются к отчетам на разных листах, но вот VBA, которые я использую для этого. (С тех пор я установил это для автоматического запуска при обновлении данных, но получаю тот же результат)

Надеюсь, кто-то может помочь, спасибо за любую помощь заранее.

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim wb1 As Workbook 
    Dim lr As Long, i As Long 
    Set wb1 = ActiveWorkbook 
    With wb1.Sheets("DATA SHEET") 
     lr = Application.Max(.Cells(Rows.Count, 4).End(xlUp).Row, _ 
      .Cells(Rows.Count, 6).End(xlUp).Row) 
     For i = lr To 1 Step -1 
      If .Cells(i, 4).Value = 0 And _ 
       .Cells(i, 5).Value = 0 And _ 
       .Cells(i, 7).Value = 0 And _ 
       .Cells(i, 8).Value = 0 And _ 
       .Cells(i, 9).Value = 0 And _ 
       .Cells(i, 10).Value = 0 Then 
       .Rows(i).EntireRow.Delete 
      End If 
     Next i 
    End With 
End Sub 

Вот VBA, чтобы скопировать данные, которые были только записью Макро. Мне нужно сохранить форматирование, но не видел, как передавать значения и форматировать только.

Sub CopyToTemplate() 
' 
' CopyToTemplate Macro 
' 

' 
    Rows("3:100").Select 
    Selection.Copy 
    Sheets("SAVE TEMPLATE").Select 
    Range("A7").Select 
    ActiveSheet.Paste 

End Sub 
+1

Не могли бы вы указать свой код для запроса базы данных и для копирования из базовых данных в отформатированный отчет? Эта проблема более вероятна в одном из них или взаимодействии между ними. –

+0

Это код для передачи данных на второй странице Sub CopyToTemplate() ' ' CopyToTemplate Макро ' ' Ряды ("3: 100") Выбрать Selection.Copy Sheets ("SAVE ШАБЛОН".) .Выберите Диапазон («A7»). Выберите ActiveSheet.Paste End Sub –

+0

Пожалуйста, отредактируйте дополнительную информацию в сообщение вопроса. Вы, скорее всего, получите полезные ответы, тем легче вы сделаете это для людей, чтобы понять вашу проблему и ее контекст. –

ответ

0

Скорее всего, вы копируете ячейки, которые автоматически связаны с вашим запросом данных. Поскольку вы копируете всю ячейку, ссылка идет с ней.

Чтобы скопировать только значения и форматирование, замените

Range("A7").Select 
Activesheet.Paste 

с

Range("A7").PasteSpecial Paste:=xlPasteValues 
Range("A7").PasteSpecial Paste:=xlPasteFormats 

Here документация на PasteSpecial.

+0

Исаак, спасибо за документацию, я совершенно новичок в VBA и ценю ссылку. Это дает ошибку, хотя. Это не нравится первая строка, и я не уверен, как ее изменить, чтобы исправить. –

+0

@DavidTinsley Извините. Какую ошибку вы получили? Я изменил команду paste, чтобы вставить ее в диапазон, а не в лист, который должен работать. Я не учитывал тот факт, что PasteSpecial - это метод диапазона, а не лист. –

+1

Вот и все! Спасибо. Он больше не отвечает на обновления запросов и прекрасно работает. Ты восхитителен! –

Смежные вопросы