VBA Excel для Mac: копирование, вставка - PullRequest
0 голосов
/ 24 ноября 2018

Макрос VBA, работающий в Mac Excel 2011, теперь дает странные результаты в Mac Excel 2016. В частности, в макросе ниже:

  • Шаг 1 - открывает «портфолио», копирует диапазонданные и закройте их
  • Шаг 2 - активирует другую уже открытую книгу и вставляет туда данные.

Но теперь вместо данных, передаваемых в каждую ячейку, я вставляю изображение свнутри него все скопированные данные.Я не знаю, исходит ли это от копии или вставки.

'Step 1'
        Set WbPort(n) = Workbooks.Open(Portfolio(n))
        Sheets(1).Select
        Range("A2:O101").Copy
        Application.CutCopyMode = False
        WbPort(n).Close SaveChanges:=False

'Step 2'
        WbTarget.Activate
        Sheets(1).Select
        Range("C" & Range("AN" & n + 2)).PasteSpecial xlPasteValues

1 Ответ

0 голосов
/ 25 ноября 2018

Не проверено.

Поскольку вы копируете только значения, имеет смысл пропустить буфер обмена и просто присвоить значения непосредственно целевому диапазону.

Set WbPort(n) = Workbooks.Open(Portfolio(n))

Dim rangeToCopy as range
Set rangeToCopy = WbPort(n).Worksheets(1).Range("A2:O101")

With WbTarget.Worksheets(1)
.Range("C" & .Range("AN" & n + 2).value2).resize(rangeToCopy.rows.count, rangeToCopy.columns.count).value2 = rangeToCopy.value2
End with

WbPort(n).Close SaveChanges:=False

Если этоработает для вас, но вы все еще хотите исправить свой существующий код, возможно, стоит попробовать:

Set WbPort(n) = Workbooks.Open(Portfolio(n))
WbPort(n).Worksheets(1).Range("A2:O101").Copy

With WbTarget.Worksheets(1)
.Range("C" & .Range("AN" & n + 2).value2).PasteSpecial xlPasteValues
End with

Application.CutCopyMode = False
WbPort(n).Close SaveChanges:=False

Или вместо xlPasteValues попробуйте другой xlPasteType (https://docs.microsoft.com/en-us/office/vba/api/excel.xlpastetype) например xlPasteAll просточтобы увидеть, получаете ли вы еще изображение.

Кроме того, вы, кажется, вставляете номер строки, определяемый значением в Range("AN" & n + 2) первого листа WbTarget - где n - это некотороепеременная (возможно, в цикле?). Я бы присвоил значение в Range("AN" & n + 2).value2 переменной типа long и проверил бы, что вы вставляете правильный адрес диапазона / ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...