J'ai besoin de copier des données à partir de la feuille1 ( La feuille1 aura de nouvelles données à chaque fois. Cela devrait être copié dans la feuille2. P> en feuille2, J'ai le code pour copier le contenu mais il écrasera les données existantes. P> P25: Y103 CODE>) vers une feuille2 dans B63: K1562 CODE>. B1563: k65536 code> a été utilisé pour d'autres détails. Donc, besoin de coller les données dans cette plage et de ne pas écraser les valeurs existantes. P> Sub CopyDatetoSameWorkBook()
Dim rgSource As Range, rgDestination As Range, X As Range
Dim Length As Long
Length = Cells(25, 2).End(xlDown).Row
Set rgSource = ThisWorkbook.Worksheets("Sheet1").Range("P25:Y" & Length)
Set rgDestination = ThisWorkbook.Worksheets("Sheet2").Range("B63")
rgSource.Copy
rgDestination.PasteSpecial xlPasteValues
Set rgSource = ThisWorkbook.Worksheets("Sheet1").Range("Z25:AG" & Length)
Set rgDestination = ThisWorkbook.Worksheets("Sheet2").Range("N63")
rgSource.Copy
rgDestination.PasteSpecial xlPasteValues
ActiveWorkbook.Save
MsgBox "Sheet1 Data Has been copied to Sheet2 Tabsheet"
End Sub
5 Réponses :
Si vous connaissez définitivement la plage de «feuille1», je suggérerais de ne pas utiliser de longueur. Vous pouvez sélectionner la plage directement et copier uniquement des valeurs de ces vendeurs.
Sub CopyDatetoSameWorkBook()
Dim rgSource As Range, rgDestination As Range, X As Range
Set rgSource = ThisWorkbook.Worksheets("Sheet1").Range("P25:R28")
Set rgDestination = ThisWorkbook.Worksheets("Sheet2").Range("B63")
rgSource.Copy
rgDestination.PasteSpecial
ActiveWorkbook.Save
MsgBox "Sheet1 Data Has been copied to Sheet2 Tabsheet"
End Sub
Bonjour, cela remplacera les données existantes, je souhaiterais ajouter les nouvelles données.
J'aime utiliser un Findrow pour le faire. Il fonctionne en trouvant la première ligne vierge, puis le moins 1 représente la ligne ci-dessus (la dernière ligne avec données) afin que vous puissiez devoir modifier la plage en une colonne qui sera toujours complète (comme un identifiant unique)
i Déplacez les données à l'aide de DestinationRange.Value = Sourcerange.Value P>
J'espère que cela a du sens, mais si vous avez des questions sur ce que j'ai fait, faites-le moi savoir! P>
Sub CopyDatetoSameWorkBook()
Dim rgSource As excel.worksheet
dim rgDestination As excel.worksheet
dim X As Range
Dim Length As Long
Dim FindObject as object
Dim LastRow as long
Set rgSource = ThisWorkbook.Worksheets("Sheet1")
Set rgDestination = ThisWorkbook.Worksheets("Sheet2")
'find last row of sheet1
Set FindRow = rgSource.Range("P25:P100000").Find(What:="", LookIn:=xlValues)
LastRow = FindRow.Row - 1
'move the data from sheet1 to sheet2
rgDestination.range("B63:K" & lastrow + 62).value = rgSource.range("P25:Y" & LastRow).value
'Set rgSource = ThisWorkbook.Worksheets("Sheet1").Range("Z25:AG" & Length)
Set rgDestination = ThisWorkbook.Worksheets("Sheet2").Range("N63")
'find last row of sheet1
Set FindRow = rgSource.Range("Z25:Z100000").Find(What:="", LookIn:=xlValues)
LastRow = FindRow.Row - 1
'move the data from sheet1 to sheet2
rgDestination.range("N63:U" & sourcelastrow + 62).value = rgSource.range("Z25:AG" & LastRow).value
ActiveWorkbook.Save
MsgBox "Sheet1 Data Has been copied to Sheet2 Tabsheet"
End Sub
Salut gelée terrifiée, ce code jetant une erreur en tant que matérialiste de type.
Désolé Rajkumar, je n'ai pas changé le type de variable pour les feuilles de calcul. Je l'ai changé maintenant.
Excusez-moi, je suis sous immense cruauté où je travaille actuellement et essaye de vous écrire. Mais je l'ai de travailler exactement comment vous décrivez.
Le dernier truc était de comprendre un moyen d'exciter Excel de coller dans la rangée 63 d'abord au lieu de la rangée 1 ou de la rangée 2 (ou ailleurs comme il l'a parfois fait). Je cherchais un moyen de tromper Excel dans le traitement de la rangée 63 comme rangée 1 ou rangée 2 (sous l'en-tête) mais il ne semble pas y avoir. P>
J'avais le colle continu sans Erreurs, mais la définition de la ligne 63 en première instance me conduisait coincée. Cela a bien fonctionné de la rangée 1 ou 2 et de l'allusion elle-même, voire de n'importe où ailleurs, mais ne pouvait pas comprendre une solution adaptable dynamique pour la ligne de départ. P>
Je pensais qu'il y avait un test Easy Isblank pour une feuille d'Excel, ce qui serait plus facile (et il a trié rapidement aucun problème), mais encore une fois, il n'y a pas. Ne semble pas être. La meilleure et la plus proche alternative est de vérifier si la cellule B63 est vide ou non, ou adaptez l'une de ces fonctions et des boucles à vos besoins ici , ici , ici et ici. comme ive a également fait. p> Alors maintenant tout le processus que vous voulez fonctionner comme vous le souhaitez. J'ai testé de nombreuses fois, avec des données modifiées de la feuille et de la course, de la croissance et de la modification des données de table des tableaux à coller et de courir encore et encore pour vous assurer qu'il fonctionne. etc, etc. Il construit / développe votre table d'insertion dans la feuille 2 de la ligne 63 vers l'envers sans tracas. Cela fonctionne à un tee-shirt. P> Aussi avant, je devais changer vos dernières lignes, car elle ne sélectionnerait pas correctement les données de la feuille1. Ça fonctionne comme vous le souhaitez. p> J'ai aussi fait une version avec Vous pouvez remplacer les conditions IF, Si Isempty (plage («B63»). Valeur) = true alors p>
blockQuote> et p> Si Isempty (plage ("N63"). Valeur) = true p>
blockQuote> pour une vérification plus robuste. P> Veuillez le tester et laissez-moi savoir si vous avez besoin de quelque chose de plus ou que vous avez des problèmes avec cela. P> (excuses pour le Enfant très précipité comme un message à vous.) p> Voici mes coups d'écran et travailler pour vous montrer que cela fonctionne. p> isempty code >). C'était c'était. P> (xlcelltypelastcell) .row code> fonctionne bien mieux. p> si application .Worksheetfunction.Counta ("B63: S64") = 0 ALORS CODE> Ce qui fonctionne mieux pour vérifier si une plage est vide et décide où ou ne pas coller les données. Counta CODE> TESTS Si la plage B63: ... Où que vous souhaitiez, ait ou n'a rien eu quelque chose, et des pâtes de la feuille1 Date dans la feuille2 de Row63 si vrai, ou ajoute à la fin du dernier rangée remplie de feuille2 sinon. p> si Isempty (plage ("B63"). Valeur) = true code> Ensuite et si Isempty (plage ("N63"). Valeur) = true, alors code>, avec: p>
Bonjour Spyros Tzortzis, j'ai essayé avec votre code source, son fonctionnement partiellement en feuille2, j'ai une table comme B63: K1562 et N63: U1562. En dessous de ce que certaines autres valeurs de table sont là. Avec ce code source, il ajoute les données à la dernière ligne vide, mais ce n'est pas ma plage spécifique. Je veux juste coller les données dans une plage spécifique et dans la dernière rangée entre B63: K1562 et N63: U1562 ..
D'accord. Je vois. Donnez-moi un moment, une minute ou 60 minutes ..
D'ACCORD. J'ai besoin d'une pause. Essayé d'utiliser l'évaluation indirecte à un moment donné pour définir de nouvelles destinations avec votre gamme spécifique, mais .. Impossible de vous concentrer suffisamment. Ensuite, la trouva-t-elle presque à l'aide de cellules (quelle pâte n'est pas une propriété de). Mais pour astuce pour refaire le mien ou le vôtre, s'il vous plaît voir ce message: Stackoverflow.com/questions/31842240/...
Merci pour vos réponses. Je pourrais obtenir les choses avec le code source mentionné ci-dessous. Nous avons formé la table sous la plage, puis trouva la dernière ligne de cette table.
Sub CopyDatetoSameWorkBook()
Dim copyrange As Range
Dim rgSource As Range, rgDestination As Range, X As Range
Dim Length As Long
Length = Cells(25, 2).End(xlDown).Row
Set copyrange = LastRowInExcelTable("Sheet1", "Table1")
Set rgSource = ThisWorkbook.Worksheets("Sheet2").Range("P25:Y" & Length)
Set rgDestination = ThisWorkbook.Worksheets("Sheet1").Range("B" & copyrange.Row)
rgSource.Copy
rgDestination.PasteSpecial xlPasteValues
Set rgSource = ThisWorkbook.Worksheets("Sheet2").Range("Z25:AG" & Length)
Set rgDestination = ThisWorkbook.Worksheets("Sheet1").Range("N" & copyrange.Row)
rgSource.Copy
rgDestination.PasteSpecial xlPasteValues
ActiveWorkbook.Save
MsgBox "Sheet1 Data Has been copied to Sheet2"
End Sub
Function LastRowInExcelTable(mysheet As String, mytable As String) As Range
Dim cell As Range
Dim ws As Worksheet
Set ws = Sheets(mysheet)
'Assuming the name of the table is "Table1"
Set LastRowInExcelTable = ws.ListObjects(mytable).Range.Columns(2).Cells.Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
ActiveWorkbook.Save
End Function
Je ne sais pas si vous cherchez toujours une autre réponse, probablement pas, mais comme je ne pouvais pas obtenir votre code pour travailler sans table, et aussi essayé Trarifiedjelly - ses versions n'ont pas fonctionné, ni la première fois. ou la deuxième fois, je l'ai gardé.
Mais j'ai eu ma version de travail pour vos cas. P>
Je trouve la ligne remplie finale à travers une fonction de feuille de calcul pour trouver la première cellule vierge une plage. p> et envelopper le code entiers dans un si -final-Disponible est toujours vide. P> J'ai utilisé la casse de destination 0 pour vérifier , comme dans mes données de test qui était la seule colonne de ma feuille1 sans cellules vides (d'autres ont eu des blancs ici ou là-bas - déliberrtalement - pour les tests). Donc, si toutes vos cellules de votre table dans la feuille1 sont correctement formatées et remplies de quelque chose, pas de problème. Mais s'ils contiennent des cellules vides, vous devez vérifier une colonne qui ne contient définitivement pas de cellule vierge. Sinon, il sera hilter-rajuster les résultats et finira par coller des données sources au mauvais endroit. Quelque chose à nu à l'esprit: avoir au moins 1 colonne correctement formatée em> p> Ainsi, assurez-vous que votre copie a sur une colonne au moins 1 colonne sans cellules vides ( ou de remplissage Une colonne d'assistance sur le côté de la table Editabe et de la culture pour désigner une table existe et vérifiez par cette colonne première cellule vierge em>). Sinon, vous aurez un problème. Vous pouvez également concaténer vos rangées de table Stade1 quelque part et vérifier la première valeur de ligne vide dans une colonne de table ou une matrice aussi off. La clé est de vérifier la première cellule non vide par une colonne que vous êtes sûre que vous serez toujours remplis ou des données comme étant produites / cultivées. P> Le tout fonctionne pour moi maintenant - exactement comme vous le souhaitez - Longtemps 1 colonne dans la sélection / la plage / table (colonne U dans mon boîtier) n'a pas de cellules vides pendant que votre bâtiment 63. P> Alors, je voulais juste vous informer que sa fonctionne exactement comme vous vouloir. p> (demain je vais chercher une feuille de calcul plus robuste pour vérifier la dernière ligne vierge dans une plage 2D, de sorte que je n'ai pas à compter sur un colonne particulière; ou simplement réutiliser la formule finaleRow dans une boucle ou avec et sur les colonnes B sur U qui fera le tour) p> p>
Bonjour Spyros Tzortzis, merci beaucoup pour vos réponses. Merci pour votre temps précieux.