XL97: PasteSpecial Method Activates Target SheetID: Q158360
|
In Microsoft Excel 97, if you run a Visual Basic for Applications macro that uses the PasteSpecial method, you may find that the wrong worksheet becomes activated. This may cause problems if your macro assumes that a particular sheet is still active.
This problem occurs because, in Microsoft Excel 97, the PasteSpecial method
activates the sheet into which you are pasting information (the "target
sheet"). In earlier versions of Microsoft Excel, the PasteSpecial method
does not activate the target sheet.
Note that this problem occurs only when information is pasted into a sheet
other than that from which it was copied.
Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact the Microsoft fee-based consulting line at (800) 936-5200. For more information about the support options available from Microsoft, please see the following page on the World Wide Web:
http://www.microsoft.com/support/supportnet/refguide/If you need your Visual Basic macro to copy information from one sheet, PasteSpecial the information into another sheet, and keep the original sheet active, you will need to add two lines of code to the macro. These lines of code keep track of the original sheet and reactivate it after the PasteSpecial method is complete.
Sub CopyAndPasteSpecial1()
Sheets("Sheet1").Range("A1:B5").Copy
Sheets("Sheet2").Range("A1").PasteSpecial xlValues
End Sub
you will need to add two lines to the macro:
Sub CopyAndPasteSpecial2()
'This new line remembers the name of the original sheet.
Set xOriginalSheet = ActiveSheet
Sheets("Sheet1").Range("A1:B5").Copy
Sheets("Sheet2").Range("A1").PasteSpecial xlValues
'This new line activates the original sheet.
xOriginalSheet.Activate
End Sub
The modified code will work in all versions of Microsoft Excel, including
Microsoft Excel 97.
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.
In Microsoft Excel, you can use the PasteSpecial method in a Visual Basic macro when you want to paste copied information in a certain way. For example, if you copy a range of cells that contains formulas, and then you want to paste just the results of the formulas, you could use a line of code similar to the following:
Range("A1").PasteSpecial xlValues
You can even paste information into a different sheet or into a sheet in
another workbook, by adding a reference to the sheet and/or workbook to the
line of code. For example:
Workbooks("Book2").Sheets("Sheet3").Range("A1").PasteSpecial xlValues
If you do this in Microsoft Excel 97, the target sheet (in this case,
[Book2]Sheet3) will be activated. This may cause problems if your macro
assumes that the original sheet is still active.
Additional query words: 8.00 97 XL97
Keywords : kbprg kbdta KbVBA xlvbmigrate
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbbug
Last Reviewed: July 2, 1999