2014-09-24 2 views
0

Я пытаюсь создать базу данных аудита, и вам удалось сформулировать некоторый код, чтобы взять каждую строку на листе 2, однако я упал последним и не могу решить, как вставлять значения только ?Paste Special - только значения

вот мой код; любая помощь очень ценится

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim nxtRow As Integer, b As Boolean 
    'Determine if change was to Column I (9) 
    If Target.Column = 9 Then 
     'If Yes, Determine if cell >= 1 
     If IsError(Target.Value) Then 
     b = True 
    Else 
     If Target.Value >= 1 Then 
      b = True 
     Else 
      b = False 
     End If 
     End If 
     If b Then 
     'If Yes, find next empty row in Sheet 2 
     nxtRow = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row + 1 
     'Copy changed row and paste into Sheet 2 
     Target.EntireRow.Copy _ 
     Destination:=Sheets(2).Range("A" & nxtRow) 
      End If 
    End If 
End Sub 

Thanks Matt

+0

Я заметил, некоторые фатальные ошибки в коде, но я не думаю, что если я исправить их, что устраняет вашу проблему. Хочешь, я все равно отвечу? –

+0

да, пожалуйста, чем стабильнее, тем лучше, вытащили это из-за немного работы google. – Matt

ответ

0

Это не может решить эту проблему, но это улучшит ваш код.
вы открываете некоторые операторы if, но вы не закрываете некоторых, которые заставят ваш код сделать что-то еще, чем вы хотите.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim nxtRow As Integer, b As Boolean 
    'Determine if change was to Column I (9) 
    If Target.Column = 9 Then 
     'If Yes, Determine if cell >= 1 
     If IsError(Target.Value) Then ' You open this If but you don't close it 
     b = True 
     'if you don't close it here the next line (else) will be the else of this if 
     End If 
    Else 
     If Target.Value >= 1 Then 
      b = True 
     Else 
      b = False 
     End If 
     'this line had an else if as well. which would just stop your main if statement 
     If b = True Then 
     'you say 'if b then' on the line above, which basically does nothing 
     'If you want to check if b = True for example, do what I did above 

     'If Yes, find next empty row in Sheet 2 
      nxtRow = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row + 1 
      'Copy changed row and paste into Sheet 2 
      Target.EntireRow.Copy _ 
      Destination:=Sheets(2).Range("A" & nxtRow) 
     End If 
    End If 
End Sub 
1

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

Target.EntireRow.Copy 
Sheets(2).Range("A" & nxtRow).PasteSpecial Paste:=xlPasteValues 
+0

Я получаю ошибку компиляции на этом - неправильная внешняя процедура. Вставить это в эту книгу или добавить в свой код? – Matt

+0

Извините, я недостаточно читал ваш код! Вы можете использовать это, но вам придется копировать через буфер обмена - см. Отредактированный ответ. – nekomatic

+0

отличное спасибо – Matt