簡體   English   中英

我想將ActiveX控件從一張紙復制到另一張紙。 我的方法不可靠。 你能想到可靠的東西嗎?

[英]I want to copy ActiveX control from one sheet to another. My method is not reliable. Can you think of something reliable?

以下代碼有時會產生錯誤“無法使用粘貼方法”。 有時可以,有時卻不可以-即使我在完全相同的文件上運行宏。

您能找出原因還是提出更穩定的方法?

Set x = srcWbk.Sheets("C").OLEObjects("MCFB")
Set y = x.Duplicate
xName = x.Name
y.Cut
trgtWbk.Sheets("C").Activate
trgtWbk.Sheets("C").Range("O1").Select
With trgtWbk.Sheets("C")
    .Paste
    .OLEObjects(.OLEObjects.Count).Name = xName
    .Activate
End With

這是一個暫時的答案。 當OP看到代碼時,它將被刪除

復制按鈕約一百次,沒有錯誤。 確保正確關閉了trgtWbk並釋放了引用。 我看不到完整的代碼以及如何操作工作簿對象,因此很難說出為什么會出錯。

嘗試重新安排您的代碼以最適合以下架構

Sub Main()

    Dim wb1 As Workbook, wb2 As Workbook
    Set wb1 = ThisWorkbook
    Set wb2 = Workbooks.Open("C:\Users\...\Desktop\Book2.xlsm")

    CopyActiveX "cmd1", wb1, wb2

    CopyActiveX "cmd2", wb1, wb2

    wb2.Save
    wb2.Saved = True
    wb2.Close

    Set wb2 = Nothing
End Sub


Sub CopyActiveX(cName As String, ByRef srcWbk As Workbook, ByRef trgtWbk As Workbook)

    Dim x As OLEObject
    Dim y As OLEObject
    Dim xName As String

    Set x = srcWbk.Sheets("C").OLEObjects(cName)
    Set y = x.Duplicate
    xName = x.Name
    y.Cut
    trgtWbk.Sheets("C").Activate
    trgtWbk.Sheets("C").Range("O1").Select
    With trgtWbk.Sheets("C")
        .Paste
        .OLEObjects(.OLEObjects.Count).Name = xName
        .Activate
    End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM