簡體   English   中英

VBA:粘貼在特定宏中(突然)停止工作

[英]VBA: Paste ceases to work (suddenly) in specific macro

我是一個非常新的自學程序員,所以請在你的回答中記住這一點。 我已經廣泛搜索了這個論壇和其他論壇,似乎找不到類似的問題。

以下代碼已運行數周且未更改。 (我的宏包含更多的變量和代碼,但我從拆開它的過程中知道這些部分是有效的,所以為了清楚起見,我將它們排除在外)。 據我所知, PasteSpecial函數特別不起作用。

Dim StimSheet As String

ActiveCell.Rows("1:290").EntireRow.Select
Selection.Copy
'Copies the data for the current stimulus
StimSheet = Application.InputBox("Enter the name of the stimulus")
'asks name of the stimulus

Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = StimSheet
'adds new sheet at the end and names whatever you input as stimulus name

Sheets(StimSheet).Select
Selection.PasteSpecial Paste:=xlPasteValues
'pastes data into new sheet

此時沒有錯誤,宏只是在復制和創建新工作表后停止。

這是我所知道/嘗試過的:

  1. 宏成功地制作和命名新工作表並將選擇復制到剪貼板,因為我可以在運行宏后手動粘貼它。 它似乎卡在粘貼片上。

  2. 使用完全相同的復制/粘貼特殊格式的其他宏仍然可以正常工作

  3. 另一個具有類似程序的論壇建議在即時窗口中輸入“Application.EnableEvents=True”。 這並沒有改變任何東西。

  4. 這個宏已經運行了幾個星期沒有錯誤。 我使用以前保存的代碼制作了新的宏,以防在當前的代碼中無意中更改了某些內容,但這也不起作用。

  5. 粘貼選項在新文件上工作一次,然后再次停止工作。

預先感謝您的建議。

您可能會發現問題在於您無法控制此代碼適用於哪個工作簿和工作表。 最好盡可能避免沒有父級的ActiveSheetSelectSheet

如果您只需要復制單元格的值而不進行任何格式設置,則也不需要Paste

嘗試將您的代碼更改為以下內容,看看您是否有更好的運氣:

Const BOOK_NAME As String = "Book1.xlsm" 'change this to your workbook name
Const SOURCE_SHEET_NAME As String = "Sheet1" 'change this to your sheet name
Dim wb As Workbook
Dim sourceSheet As Worksheet
Dim newSheet As Worksheet
Dim newSheetName As String
Dim validName As Boolean
Dim rng As Range

' Set the book, sheet and range objects
Set wb = Workbooks(BOOK_NAME)
Set sourceSheet = wb.Worksheets(SOURCE_SHEET_NAME)
Set newSheet = wb.Worksheets.Add(After:=wb.Worksheets(wb.Worksheets.Count))

' Acquire the new sheet name and check it's valid.
Do
    newSheetName = InputBox("Enter the name of the stimulus")
    On Error Resume Next
    newSheet.Name = newSheetName
    validName = (Err.Number = 0)
    On Error GoTo 0
    If Not validName Then MsgBox "Sheet name isn't valid. Try again."
Loop Until validName

' Write the values into the new sheet
Set rng = sourceSheet.Cells(1, 1).Resize(290, sourceSheet.UsedRange.Columns.Count)
newSheet.Range(rng.Address).value = rng.Value2

我移動了這一行:

StimSheet = Application.InputBox("Enter the name of the stimulus")

到方法的頂部,它似乎可靠地工作。 我希望我能確切地告訴你原因,但至少你可以繼續。 也許這與焦點的變化有關。

此外,當我(Office 2013)失敗時,我收到以下錯誤:

運行時錯誤 1004:應用程序定義或對象定義的錯誤。

當 Sub 在一個 Sheet 代碼后面時,這個:

Range 類的運行時錯誤“1004”PasteSpecial 方法失敗。

粘貼到模塊中時。

暫無
暫無

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

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