J'essaie de copyr datatables de la gamme sheet1 sur la plage2, mais rien n'est copié. C'est le code complet que j'essayais d'accomplir, mais je me suis coincé dans l'endroit basique. Aidez-nous
Edit: J'ai essayé la Macro tout de suite et la même chose s'est produite avec ce code. Consultez l'instantané où vous pouvez voir que le Snap 1 contient des données source et également sélectionné, mais ne sont pas copiés sur Snap 2. Cependant, les plages sont sélectionnées ici.
Sub copy() Range("A1:J4").Select Selection.copy Sheets("Sheet2").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save End Sub
Mettre à jour
Style-1
Option Explicit Dim objSheet1,objSheet2,TotalRows,TotalcolCopy,strPathExcel1 Dim oXls : Set oXls = CreateObject("Excel.Application") Dim aData ': aData = oWb.Worksheets(1).Range("$A2:$C10") Dim dicP : Set dicP = CreateObject("Scripting.Dictionary") strPathExcel1 = "D:\WIPData\AravoMacro\Finalscripts\GE_Wing_To_Wing_Report.xlsx" oXls.Workbooks.open strPathExcel1 Set objSheet1 = oXls.ActiveWorkbook.Worksheets(1) Set objSheet2 = oXls.ActiveWorkbook.Worksheets(2) TotalRows=oXls.Application.WorksheetFunction.CountA(objSheet1.Columns(1)) - 3 TotalcolCopy=oXls.Application.WorksheetFunction.Match("Parent Business Process ID", objSheet1.Rows(3), 0) objSheet1.Range(objSheet1.Cells(4,1),objSheet1.Cells(TotalRows,TotalcolCopy)).Copy(objSheet2.Range("A1")) '======================= oXls.ActiveWorkbook.SaveAs strPathExcel1 oXls.Workbooks.close oXls.Application.Quit '======================
Style-2
Option Explicit Dim objSheet1,objSheet2,TotalRows,TotalcolCopy,strPathExcel1 Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject") Dim oXls : Set oXls = CreateObject("Excel.Application") Dim aData ': aData = oWb.Worksheets(1).Range("$A2:$C10") Dim dicP : Set dicP = CreateObject("Scripting.Dictionary") oXls.Workbooks.Open(oFs.GetAbsolutePathName("Test.xlsx")) Set objSheet1 = oXls.ActiveWorkbook.Worksheets(1) Set objSheet2 = oXls.ActiveWorkbook.Worksheets(2) TotalRows=oXls.Application.WorksheetFunction.CountA(objSheet1.Columns(1)) - 3 TotalcolCopy=oXls.Application.WorksheetFunction.Match("Parent Business Process ID", objSheet1.Rows(3), 0) objSheet1.Range(objSheet1.Cells(4,1),objSheet1.Cells(TotalRows,TotalcolCopy)).Copy(objSheet2.Range("A1")) '======================= oXls.ActiveWorkbook.SaveAs "Test.xlsx" oXls.Workbooks.close oXls.Application.Quit '======================
Pourriez-vous me dire quelles sont les différences entre Style-1 et Style-2.Because dans Style-1, toutes datatables copiées sont enregistrées, ce qui n'est pas le cas dans Style-2. Ce problème de design est principalement le problème général auquel j'ai été confronté depuis le matin.
De quelle manière Style-2 n'est pas parfait?
Le moyen le plus simple de copyr d'une gamme à l'autre serait de recoder une macro. En regardant votre code, quelles sont les valeurs que vous obtenez pour TotalRows
et LastCol
? En supposant que datatables correspondantes sont returnnées de votre Match()
, il y a donc des lignes à copyr
Option Explicit Sub CopyPastes() Dim rng1 as Range Dim rng2 as Range Set rng1 = Sheets(1).Range("B2:C12") Set rng2 = Sheets(2).Range("B2") rng1.Copy rng2.PasteSpecial xlPasteValues End Sub
Dans votre cas, pouvez-vous le simplifier? Supprimez la ligne suivante. Il suffit de spécifier la gamme de départ de Sheet2 et d'essayer. Vous n'avez pas à vous soucier de resize
à ce stade.
remplacez-le,
ObSheet2.Range(ObSheet2.Cells(4,1),ObSheet2.Cells(TotalRows,LastCol)).PasteSpecial
avec soit: coz vous manquer, collez l'argument spécial
ObSheet2.Range(ObSheet2.Cells(4,1),ObSheet2.Cells(TotalRows,LastCol)) _ .PasteSpecial xlPasteValues
ou: ici sans cellules de fantaisie, mais scope directe
ObSheet2.Range(ObSheet2.Range("A4").PasteSpecial xlPasteValues