0

最後の 8 つの書式設定を循環しながら、書式ペインタの動作を模倣したいと考えています。そのために、最後にキャプチャした 8 つの Range を List<> オブジェクトにサイクル形式で保存します。適用中に、各範囲呼び出し COPY メソッドを取り出してその範囲をクリップボードにコピーし、以下のように宛先範囲で PasteSpecial メソッドを呼び出します

RangeInfo tempRangeInfo = listRangeInfo[Counter]; 
//Copy to clipboard
                        tempRangeInfo.CopiedRange.Copy();
                        selection.PasteSpecial(xl.XlPasteType.xlPasteFormats,  xl.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
                            false, false);

しかし、元の範囲を削除すると、次のようになります。

Range クラスの PasteSpecial メソッドが失敗しました」というエラーが表示されます。

なにか提案を?

4

1 に答える 1

1

Excelでコピーする場合(コピーされた領域にはアリの境界線があります)、データは実際にはクリップボードにありません。Excelはクリップボードを使用して、貼り付け時にソースセルからリアルタイムで転送します。これは、貼り付け操作中に数式を新しい相対セル参照に再加工できるようにするためです。ソースセルを削除すると、Excelには貼り付け操作中にデータをプルするためのデータが何もありません。

VBAには、クリップボードを直接操作するためのネイティブサポートがありません。ただし、MSFormsをVBAプロジェクトに追加してから、Clipboard関数をサポートするオブジェクトを宣言することができます。

VBAからクリップボードに直接アクセスする手順と例については、次のWebサイトを参照してください。

http://www.cpearson.com/excel/Clipboard.aspx

私の場合、のサイトでreferences提案されているように、使用可能なリストにMSFormsがありませんでしたcpearsonが、C:\ドライブでFM20.dllを検索したところ、あいまいなフォルダーに埋め込まれていることがわかりました。それをC:\のルートにコピーし、ダイアログからreferenceクリックして追加することができました。browseadd references

MSFormsが利用可能になったら、このコードを使用して、ソースセルが削除された後も保持されるクリップボードにテキストをコピーできます。

Public Sub Test()
  Dim obj As New MSForms.DataObject
  obj.SetText ActiveCell.Value
  obj.PutInClipboard
End Sub

これは、持続する数式をコピーします。

Public Sub Test()
  Dim obj As New MSForms.DataObject
  obj.SetText ActiveCell.Formula
  obj.PutInClipboard
End Sub

セルのフォーマットをクリップボードにコピーする方法を理解する時間がありませんが、コピーした値を保持してソースセルの後に貼り付ける場合は、これが進むべき方向のようです。削除されます。

編集#1

Windowsクリップボードは、1つのアイテムに対して複数の形式(たとえば、コピーされた選択範囲のRTFバージョンとテキストバージョン)を保存できますが、一度に保存できるのは1つのアイテムのみです。

OfficeクリップボードはWindowsクリップボードを使用しません。コピーされた値自体を保存し、さまざまな選択を保存できます。ただし、Office 2000の時点では、VBAを介して制御することはできず(Office 2000クリップボードの使用方法を参照)、Excelからコピーされた選択範囲は「テキストの貼り付け」または「すべて貼り付け」のいずれかです。フォーマットを貼り付けるだけの特別な貼り付けはありません。それ以降のバージョンのOfficeでは異なることを言うものは何も見つかりませんでした。

結論:VBAを使用して特別な貼り付けを行う唯一の方法は、アクティブ/有効/コピーされた選択を行うことです。したがって、唯一の解決策は、独自の永続グローバル変数(オブジェクトのリストなど)を宣言し、コピーされた各選択の形式をリストに格納することであることに同意します。クリップボードは実際には実行可能なソリューションではなく、SetData無関係SetDataObjectであるため... VBAコードの1行でセルのフォーマットをキャプチャすることが不可能であることが判明した場合は、いつでも対象のフォーマットを列挙し、保存されているフラグを設定できます。後で使用するためのオブジェクト。

于 2012-09-13T17:06:23.197 に答える