2017-07-19 8 views
2

Ich habe diesen Code mit einer Reihe anderer Codes erstellt, die ich zusammengefügt habe, da ich selbst nicht sehr gut in VBA bin.Senden mehrerer Zellen an die letzte Zeile einer anderen Arbeitsmappe

ich eine Arbeitsmappe haben, die meine ist, es Daten, die alle über den Ort, zB: Name ist L2, Kontonummer ist C3 etc etc.

Dieser Code ist alle diese Daten in einem schicken bestimmte Zeile, zu einem anderen Arbeitsbuch, das von den übrigen Kollegen verwendet wird, und zur letzten Zeile dieses Arbeitsbuchs. Diese

Sub Save_To_Register() 

Dim count As Integer 
Dim r1 As Range, r2 As Range, 

'Officer Name 
Set r1 = Range("L2") 
Set r2 = Sheets("Sheet1").Range("A100") 
r2.Value = r1.Value 

'Account Number 
Set r1 = Range("C3") 
Set r2 = Sheets("Sheet1").Range("C100") 
r2.Value = r1.Value 

'Account Address 
Set r1 = Range("C4") 
Set r2 = Sheets("Sheet1").Range("D100") 
r2.Value = r1.Value 

'Applicant of Take Over 
Set r1 = Range("L3") 
Set r2 = Sheets("Sheet1").Range("E100") 
r2.Value = r1.Value 

'Applicant of Take Over 
Set r1 = Range("C3") 
Set r2 = Sheets("Sheet1").Range("C100") 
r2.Value = r1.Value 

Application.Workbooks("PM-#8873088-v4-SUB-METERING_REGISTER.XLS").Activate 
Application.Wait (Now + TimeValue("0:00:1")) 


ThisWorkbook.Sheets("Sheet1").Range("A100:K100").Copy 

ActiveSheet.Select 
ActiveSheet.Range("A1").Select 


count = 1 

Do While Not (ActiveCell.Value = None) 
    ActiveCell.Offset(1, 0).Range("A1:K1").Select 
    count = count + 1 

Loop 

ActiveSheet.Range("A" & count).PasteSpecial 


End Sub 

ist kein sehr effizienter Code, ich bin die Spiegelung im Grunde die Zellen L2, C3, C4 & L3 zu einer einzigen Reihe A100: K100. In dieser Zeile enthalten sind eine Reihe von = Today() -Formeln.

Alles funktionierte gut, obwohl nicht so effizient wie es sein könnte. Wenn ich diesen VBA verwende, kopiert es alle Daten perfekt in die andere Arbeitsmappe , aber es aktualisiert alle Daten von früheren Einträgen.

Ich dachte, dass die Verwendung von Pastenspecial nur über die Werte übertragen würde, aber es scheint, dass alle Datenzellen, die in die neue Arbeitsmappe (Sub-Metering-Register) kopiert wurden = Today(), anstatt nur den tatsächlichen Wert .

Hat jemand irgendwelche Vorschläge, wie sichergestellt werden kann, dass die Datumswerte als Werte und nicht als ihre Formel kopiert werden oder wie verhindert man, dass die Werte jeden Tag in der neuen Arbeitsmappe aktualisiert werden?

Danke

Antwort

1

Sie benötigen xlPasteValues nach Paste.

ActiveSheet.Range("A" & count).PasteSpecial xlPasteValues 

Edit: Um Kritiker dieser Antwort: Ich weiß, mein Beitrag fördert nicht einen effizienteren Ansatz, der nicht copy/paste mit sich bringt - aber wenn ein Mann (oder Frau) ist nur ein Wort weg von einer Lösung ... Ich poste es einfach und stelle keine Fragen! :)

0

Verwenden Sie Cells(row, column).Value Syntax.

Noch ein paar Tipps, über Effizienz. Versuchen Sie, Objekte so wenig wie möglich zu aktivieren und auszuwählen. In Ihrem Code ist es genug, um die zusätzliche Arbeitsmappe zu öffnen, speichern Referenzen in zwei Referenzvariablen vom Typ Workbook, zum Beispiel Arbeitsmappe:

Dim myWorkbook As Workbook 
Set myWorkbook = ThisWorkbook 

Dazu Verwendung dieser Syntax myWorkbook.Sheets(1).Cells(1, 1).Value (nur Beispiel) machen könnte. Dann können Sie im Code With Block verwenden, wenn Sie nicht alle Arbeitsmappennamen eingeben möchten.

Verwandte Themen