【问题标题】:VBA Excel for Mac : Copy PasteVBA Excel for Mac : 复制粘贴
【发布时间】:2018-11-24 16:20:41
【问题描述】:

在 Mac Excel 2011 中运行的 VBA 宏现在在 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

【问题讨论】:

  • 谢谢马修。我找不到正确呈现 VBA 的方法。
  • 尽量避免选择并进行复制然后直接粘贴,看看这个(如果它有助于给它投票):stackoverflow.com/q/50776026

标签: excel vba macos


【解决方案1】:

未经测试。

由于您只是复制粘贴值,因此跳过剪贴板并将值直接分配给目标范围是有意义的。

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 只是为了看看你是否还有图像。

此外,您似乎正在粘贴到由WbTarget 的第一张表的Range("AN" & n + 2) 中的值确定的行号——其中n 是某个变量(可能在循环中?)。我会将Range("AN" & n + 2).value2 中的值分配给long 类型变量,并检查您是否粘贴到正确的范围/单元格地址。

【讨论】:

  • 您的 VBA“未经测试”部分有效,对我来说很好。我知道问题与剪贴板有关。谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多