2017-09-30 3 views
0

Ich bin etwas neu mit VBA und ich habe ein Problem, das ich nicht lösen kann und kann nicht die richtigen Lösungen in früheren Fragen finden. In der Tat sieht es ziemlich einfach aus. Ich möchte einen Bereich im Arbeitsblatt mit dem Namen "Blad3" kopieren und die Werte in das Arbeitsblatt mit dem Namen "Blad1" einfügen. Das habe ich gemacht und wo läuft es schief?VBA Excel FEHLER 1004 Probleme mit Einfügen Wert

ActiveSheet.Cells(dattel, 4).Select 

    ActiveCell.Range("A1:J1").Copy 

    Sheets("Blad1").Select 
    Cells(8 + aantkk, 6).Select 
    ActiveSheet.Unprotect 
' ActiveCell.PasteSpecial xlPasteValues 
    Selection.PasteSpecial Paste:=xlValue 
' ActiveSheet.Paste 

    ActiveSheet.Protect 
+0

Ja, antworten Sie bitte auf welche Linie es schief geht und was Sie Fehlermeldung – peakpeak

+2

bekommen würde es nicht überraschen, zu erfahren, dass 'Unprotect' endet die' CutCopyMode' so eine Paste nicht funktionieren würde. Die [echte Antwort] (https://meta.stackexchange.com/q/66377/147640) auf Ihre Frage ist jedoch [hier] (https://stackoverflow.com/a/29787935/11683). Wenn du das getan hast, solltest du https://stackoverflow.com/q/10714251/11683 sehen. – GSerg

Antwort

0

Erstens ist die wirkliche Antwort auf dieses Dilemma ist zu protect the worksheet mit dem Userinterfaceonly: = True Parameter, so dass Sie müssen es nicht Entschützen Werte schreiben VBA-Code.

Führen Sie dies einmal aus.

Jetzt können Sie alles, was Sie wollen, auf dem Blad1-Arbeitsblatt in VBA tun, während Sie es vor dem Benutzer schützen.

Wie zu Ihrem ursprünglichen Code ist es verwirrend. Wenn .Cells(dattel, 4) D4 auf dem Blad3-Arbeitsblatt ist, kopiert ActiveCell.Range("A1:J1").Copy nicht A1: J1; es kopiert D4: M4. In jedem Fall ist die direkte Wertübertragung eine effizientere Methode zum Übertragen von Werten als Copy, Paste Special, Values.

dim rng as range 
set rng = worksheets("blad3").cells(dattel, 4).resize(1, 10) '<~~ figure out what this is supposed to be 
with worksheets("Blad1") 
    .cells(8 + aantkk, 6).resize(rng.rows.count, rng.columns.count) = rng.value 
end with 
+0

Danke für Ihre Antwort. Ich habe jetzt FEHLER 438, wenn ich diesen Code eintippe – Chielmos

+0

Meine Entschuldigung; Ich hätte das vor dem Posten kompilieren sollen. Ich habe es nur von oben geschrieben; Es stellt sich heraus, dass ich den unteren Teil eines unteren anatomischen Bereichs abgeschrieben habe. Ändere 'rng.values' in' rng.value' wie oben beschrieben. – Jeeped

-1

Mai werden diese

Sub Demo() 
    Dim srcSht As Worksheet, destSht As Worksheet 
    Dim rng As Range 
    Set srcSht = ThisWorkbook.Sheets("Blad3") 'this is source sheet 
    Set destSht = ThisWorkbook.Sheets("Blad1") 'this is destination sheet 

    With destSht 
     .Unprotect       'unprotect sheet Blad1 
     Set rng = srcSht.Range("A1:J1")  'set range to copy 
     .Cells(8 + aantkk, 6).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 'paste only values 
     .Protect        'protect sheet Blad1 
    End With 
End Sub 

SELECT versuchen und ACTIVATE vermieden werden sollte. Einzelheiten finden Sie unter this.

0

Würde dies für Sie arbeiten?

Sheets ("Blad3") Bereich. ("A1: J1"). Copy

Sheets ("Blad1") Bereich. ("A1: J1"). Paste Paste: = xlValue

Ich testete es auf einem neuen Arbeitsbuch und es schien gut zu funktionieren.

Verwandte Themen