不使用选择拆分复制/粘贴

时间:2015-08-17 20:56:31

标签: excel vba excel-vba

我在VBA中编写Excel宏。在我的代码的某个部分,我需要将一个未合并的单元格复制并粘贴到单独工作簿中的合并单元格中。这个过程的一部分是重复的。对我来说,实现此目的的最有效方法是复制单元格,然后enter code here单独的Call以及要粘贴的位置。我使用Sub编写了一个有效的版本:

Select

但我一直试图离开Sub Macro1() Workbooks("Book1.xlsm").Worksheets("Sheet1").Activate ActiveSheet.Range("A1").Copy Call Macro2 End Sub Sub Macro2() Workbooks("Protected_JD_Form.xlsx").Worksheets("Cover Page").Activate ActiveSheet.Range("E46:G46").Select Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End Sub ,这就是我提出的代码:

Select

此代码为我提供了Range类失败的' PasteSpecial方法'在宏2的唯一一行。

有没有办法复制单元格的内容,然后使用目标和粘贴方法Sub Macro1() Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1").Copy Call Macro2 End Sub Sub Macro2() Workbooks("Protected_JD_Form.xlsx").Worksheets("Cover Page").Range("E46:G46").PasteSpecial xlPasteFormulasAndNumberFormats End Sub 单独的Call,而不使用Sub

编辑:我知道将值设置为彼此相比比复制/粘贴更简单。但是,在这种情况下,这不是可能的。

我也理解合并细胞的缺陷。我知道了。认真。但是我没有选择,因为我正在使用客户的工作簿,而这些工作簿无法更改。

编辑#2:在@ExcelHero发表评论后,我重新启动了计算机并再次运行宏。有效。我不知道出了什么问题。无论如何,感谢@ExcelHero认识到我的代码是正确的。

3 个答案:

答案 0 :(得分:0)

为什么选择第二个宏?

无论如何,如果绝对必要,你需要稍微编辑你的第二个宏。

Sub Macro1()
Dim copyString As String


    copyString = Worksheets("Sheet1").Range("A1").Value
    Call Macro2(copyString)

End Sub

您会注意到现在Macro2后面会调用copyString。这意味着,您将运行Macro2,并使用设置为copyString的任何值执行某些操作。

Sub Macro2(text As String)

    'Workbooks("Protected_JD_Form.xlsx").Worksheets("Cover Page").Range("E46:G46").Value = text
    Workbooks("Protected_JD_Form.xlsx").Worksheets("Cover Page").Range("E46:G46").Value = text
End Sub

在此宏中,您会看到我在宏名称中添加了(text as String)。这将取一些值(来自Macro1,值为copyString变量),然后在宏中使用它。这有意义吗?

同样,如果您绝对需要两个宏来进行此复制/粘贴,我只会这样做。如果你只能使用一个宏,那么这些可以组合成几个简单的行:

Sub Macro3()
Dim copyString As String
copyString = Worksheets("Sheet1").Range("A1").Value
Workbooks("Protected_JD_Form.xlsx").Worksheets("Cover Page").Range("E46:G46").Value = copyString
End Sub

......甚至更进一步,切断了copyString中间人(如@findwindow所提到的):

Sub macro4()
Workbooks("Protected_JD_Form.xlsx").Worksheets("Cover Page").Range("E46:G46").Value = Worksheets("Sheet1").Range("A1").Value
End Sub

答案 1 :(得分:0)

这种格式对我有用 - 只需将复制范围定义为范围并将其传递给第一个子,然后迭代通过将后续单元格声明为粘贴范围的循环,并将该范围传递给粘贴子:

<select class="style-scope exp-affiliation-application-form" name="q_1">
    <option class="style-scope exp-affiliation-application-form" value="1">Sales Associate</option>
    <option class="style-scope exp-affiliation-application-form" value="2">Retail Store Manager</option>
    <option class="style-scope exp-affiliation-application-form" value="3">District Manager</option>
    <option class="style-scope exp-affiliation-application-form" value="4">Regional Manager</option>
    <option class="style-scope exp-affiliation-application-form" value="5">Owner</option>
    <option class="style-scope exp-affiliation-application-form" value="6">Customer Service</option>
    <option class="style-scope exp-affiliation-application-form" value="7">Training Manager</option>
    <option class="style-scope exp-affiliation-application-form" value="8">Buyer</option>
    <option class="style-scope exp-affiliation-application-form" value="9">General Manager</option>
    <option class="style-scope exp-affiliation-application-form" value="10">Manufacturer Rep</option>
    <template class="style-scope exp-affiliation-application-form" as="answer" is="dom-repeat"/>
</select>

答案 2 :(得分:0)

在我编辑代码时,我正在执行的复制/粘贴导致错误。因为我正在复制的代码仍在剪贴板上,所以宏试图将其粘贴到单元格中,从而导致错误。

经验教训:

  • 限制在VBA中使用剪贴板
  • 在编码窗口中复制/粘贴时,请仔细检查以确保不影响现有代码