我有一個Excel宏做兩個非常簡單的事情:爲什麼Excel vba複製到剪貼板不一致?
- 它顯示在一個小窗口中的當前日期和時間。
- 它將顯示內容複製爲文本字符串,以根據需要粘貼到其他應用程序中。
所顯示的細胞中有下面的公式:
=TEXT(NOW(),"yyyy.MM.dd hh:mm:ss")
每5秒,宏刷新時間和時鐘滴答。
我的問題是,當我從單元格中複製時間時,我並不總是將內容粘貼到剪貼板。有時單元格內容被髮布到剪貼板。我無法弄清楚它爲什麼有時會起作用,而不是別人,因爲沒有太多事情要做。它應該始終工作。
我知道的數據是不是剪貼板上,因爲我可以嘗試粘貼剪貼板到像記事本和其他文本應用程序並沒有任何反應不同的程序。
整個代碼都在一個模塊中。
Dim stopSwitch As Integer
Dim NextTick
Sub myupdate()
If ActiveCell.Address = "$B$1" Then
growWindow ' resize window beyond just clock display
stopTime '
Exit Sub ' stop updating
End If
Range("a1").Select
Calculate
DoEvents
If ActiveWorkbook.Name = "calendar clock.xlsb" Then shrinkWindow
NextTick = Now + TimeValue("00:00:05") ' give me 5 seconds to copy/paste
Application.OnTime NextTick, "myupdate"
ThisWorkbook.Save ' futile attempt to prevent save dialog
End Sub
Sub auto_open()
' to stop clock, tap right arrow to select cell b1 when workbook is active
Range("a1").Select
myupdate
End Sub
Sub growWindow()
Application.Width = 768
Application.Height = 621.75
ThisWorkbook.Save
End Sub
Sub shrinkWindow()
' strip decorations so window is as small as possible
Application.DisplayFormulaBar = False
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayHeadings = False
' move window to second monitor and size to single cell display
Application.WindowState = xlNormal
Application.Top = 0
Application.Left = -720
Application.Width = 174
Application.Height = 127
ActiveWindow.WindowState = xlMaximized
End Sub
Sub stopTime() ' called when workbook is closed
On Error Resume Next
Application.OnTime NextTick, "myupdate", schedule:=False
Range("b1").Select
End Sub
Sub copyTime()
Range("a1").Copy ' copy time
Range("f5").PasteSpecial xlPasteValues ' strip formatting
Range("f5").Copy ' copy time as text
DoEvents ' hack to attempt to make copy work consistently
End Sub
上述代碼調整窗口的大小並每隔5秒更新一次時鐘。
要將時鐘複製爲文本複製到剪貼板,我已經在工作簿
Private Sub Workbook_Activate()
Application.OnKey "^c", "module1.copyTime"
End Sub
Private Sub Workbook_Deactivate()
Application.OnKey "^c"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' turn off auto update
Module1.stopTime
' resize window so if I open another spreadsheet, it's a reasonable size
Application.WindowState = xlNormal
Application.Width = 768
Application.Height = 621.75
Application.OnKey "^c"
ThisWorkbook.Save ' try to prevent save dialog at close
End Sub
以下代碼我修改copyTime函數來驗證^ C是通過選擇未格式化的細胞可見,我可以看到數據一致地進入單元格,所以我知道我的問題不在範圍(「a1」)中,在複製時間複製步驟或將粘貼單元複製到單元格f5。
剩下的範圍(「A5」)。複製命令作爲壞人當複製失敗這是奇怪的。就好像只要數據保存在電子表格中一樣,複製就會工作,但無法持續更新外部剪貼板。
這個意見使我嘗試設置application.cutcopymode到xlcopy,真假,看看是否有幫助。我嘗試所有設置時看到的唯一效果是我是否看到f5使用選取框突出顯示 - 沒有任何設置強制複製到外部剪貼板。
我試圖複製到看看是否有被清除剪貼板中如果是時候更新時鐘複製以下之前等待一個時鐘週期。這似乎有所幫助,但是,再次不一致。
那麼,爲什麼拷貝無法總是更新剪貼板?爲什麼它不起作用,當它不起作用時呢?更好的是,我怎樣才能修改這段代碼,以便它總是輸出到外部剪貼板?
難道我的回答幫助? – Sifu
不幸的是不是四福。不過謝謝。 Steven Martin使用msforms'putinclipboard方法的解決方案似乎很穩固。 – Michael