seleccion quitar puede problema portapapeles podría pero pegar libro liberar imagenes hay este espacio eliminar desocupar contenido con como celdas borrar excel vba excel-vba

quitar - Excel VBA: ¿cómo borro el portapapeles en otro libro en otra aplicación?



no se puede liberar espacio en el portapapeles excel 2013 (3)

Dado que workbook wb pertenece a otra instancia de aplicación, debe utilizar

wb.Application.CutCopyMode = False

en lugar

Application.CutCopyMode = False

donde wb.Application devuelve la instancia de las aplicaciones a la que pertenece el libro de trabajo wb .

Fondo:

Tengo un script que está formateando Raw Data y anexándolo al final de un libro de análisis que tengo abierto. La secuencia de comandos se ejecuta desde el libro de análisis, ya que los datos sin procesar se completan cada vez.

Problema:

La secuencia de comandos funciona bien con una excepción, no puedo borrar el portapapeles en el otro libro y sospecho que esto se debe a que está abierto en otra instancia (Aplicación) de Excel.

Mi código hasta el momento:

Sub Data_Ready_For_Transfer() Dim wb As Workbook Dim ws As Worksheet Dim rnglog As Range Dim lastrow As Range Dim logrange As Range Dim vlastrow As Range Dim vlastcol As Range Dim copydata As Range Dim pastecell As Range Dim callno As Range Set wb = GetObject("Book1") Set ws = wb.Worksheets("Sheet1") Application.ScreenUpdating = False ''if we get workbook instance then If Not wb Is Nothing Then With wb.Worksheets("Sheet1") DisplayAlerts = False ScreenUpdating = False .Cells.RowHeight = 15 Set rnglog = wb.Worksheets("Sheet1").Range("1:1").Find(What:="Log Date", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlNext) Set lastrow = rnglog.EntireColumn.Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious) Set logrange = wb.Worksheets("Sheet1").Range(rnglog, lastrow) rnglog.EntireColumn.Offset(0, 1).Insert rnglog.EntireColumn.Offset(0, 1).Insert rnglog.EntireColumn.Offset(0, 1).Insert rnglog.EntireColumn.TextToColumns Destination:=rnglog, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 9)), TrailingMinusNumbers:=True rnglog.Value = "Log Date" rnglog.Offset(0, 1).Value = "Time" logrange.Offset(0, 2).FormulaR1C1 = "=WEEKNUM(RC[-2])" logrange.Offset(0, 2).EntireColumn.NumberFormat = "General" rnglog.Offset(0, 2).Value = "Week Number" logrange.Offset(0, 3).FormulaR1C1 = "=TEXT(RC[-3],""mmmm"")" logrange.Offset(0, 3).EntireColumn.NumberFormat = "General" rnglog.Offset(0, 3).Value = "Month" Set vlastrow = wb.Worksheets("Sheet1").Range("A:A").Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious) Set vlastcol = vlastrow.EntireRow.Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious) Set copydata = .Range("A2", vlastcol) copydata.Copy End With With ActiveWorkbook.Worksheets("RAW Data") Set pastecell = .Range("A:A").Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious) Set callno = .Range("1:1").Find(What:="Call No", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlNext) pastecell.Offset(1, 0).PasteSpecial xlPasteValues .Cells.RemoveDuplicates Columns:=5, Header:=xlYes Application.CutCopyMode = False End With wb.Close False Application.ScreenUpdating = True MsgBox "Done" End If End Sub

Pensé que solucionaría el problema cerrando el libro de trabajo de Datos SIN PROCESAR (quiero hacerlo de todos modos), pero recibí un aviso ya que los datos del portapapeles son bastante grandes, así que esto tampoco funciona.


Lo que hago es simplemente copiar cualquier celda en blanco en mi ActiveWorkbook una vez que haya pegado los valores que copié antes y ya no los necesito, y esto reemplaza los datos grandes en el Portapapeles con una cadena vacía (comparativamente nada) y me permite cerrar el libro de trabajo cuando lo necesito.

Entiendo que esto es más bien una solución, pero funciona todo el tiempo.

Otra solución

Lo que debe intentar es obtener el MSForms DataObject e intentar colocarlo en el portapapeles

Dim clipboard As MSForms.DataObject Set clipboard = New MSForms.DataObject

y luego despejarlo de la siguiente manera:

clipboard.Clear

Y si esto no funciona, siempre puedes configurar el texto del portapapeles como vacío

clipboard.SetText "" clipboard.PutInClipboard


Application.CutCopyMode = False no me funcionó para borrar el búfer ni dejar de obtener un error al intentar ActiveSheet . Pegar errorActiveSheet . Pegar error

Para borrar un búfer grande, que está produciendo un error ActiveSheet .Paste, por ejemplo, es simplemente copiar una celda vacía, por ejemplo, Range("A1").Copy , donde la celda A1 estaría vacía o muy pequeña. ¡Esto hará que el buffer sea realmente pequeño! ¡Arreglo fácil! Tal vez no precisamente correcto, pero es funcionalmente correcto.