- 締切済み
excel:PasteSpecialで実行エラー
PasteSpecialが実行エラーとなってしまいます エラー番号:80010108(16進) エラー内容:'PasteSpecial' メソッドは失敗しました: 'Range' オブジェクト 発生条件:クリップボードを監視しているソフトを常駐していると発生する 情報不足であれば補足します
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 しつこいようですが、切り貼りのコードでは不具合の有無すら検証出来ませんし、何をされたいのかも解かりません。 かなりVBAの知識がおありのようで、私などの出る幕では無いようです。 レスはこれで最後にしようと思いますが、参考まで。 失敗の原因とクリップボード監視ソフトの因果関係は検証出来ないので解かりませんが、個人的な印象としては、何らかの原因で iniFaileSetPositionSheet を見失う事があり、それが原因で失敗しているように感じます。 iniFaileSetPositionSheet を Workbook.Worksheet.Range のように明示的にブックから指定してみるとか。。。 最後に、CSVをタブ区切りに変えてセルの書式が標準のシートに、クリップボードを使ってコピー&ペーストするのと、単純に開くのと、どんな違いがあるのか私には解かりませんでした。 Sub Test() Dim wb As Workbook, fName As String fName = "C:\aaa.csv" Set wb = Workbooks.Open(fName) wb.Worksheets(1).UsedRange.Copy End Sub
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 動作しない形でコードを提示されても、検証出来ません。 myTextData ? iniFaileSetPositionSheet ? 省略するにしても最低限の動作はするコードで、この場合はOKで、この場合はダメなどの状況説明が無いと辛いです。 不明な部分を独自に補正&加工して下記のようにし、常駐秀丸でクリップボード監視をさせながら試しましたが別に問題なかったです。(Windows2000 + Excel2000とWindows95 + Excel97) '******************************************************************** Private Sub Workbook_Open() Dim myInt As Integer Randomize myInt = Int((100 * Rnd) + 1) 'コピー用データをランダムに作るだけ If iniFileSet(ThisWorkbook.Worksheets(1), Str(myInt)) Then MsgBox Str(myInt) & " を " & _ ThisWorkbook.Worksheets(1).Name & _ " の A2 に貼付けました。", vbInformation End If End Sub '******************************************************************** Public Function iniFileSet(ws As Worksheet, s As String) As Boolean On Error GoTo ER: iniFileSet = False Set MyDataObject = New DataObject MyDataObject.SetText s MyDataObject.PutInClipboard ws.Range("A2").PasteSpecial iniFileSet = True Exit Function ER: End Function '******************************************************************** もとのコードはクリップボード監視ソフトが常駐していなければ問題なく動くんでしょうか?
補足
>myTextData Dim myTextData As String Set myFso = New Scripting.FileSystemObject Set myTst = myFso.OpenTextFile(faileNeme) With myTst Do While .AtEndOfStream = False myTextData = myTextData & Replace(.ReadLine, ",", vbTab) & vbCrLf Loop End With CSVファイルを読み込み、','をTABコードに変換しています >iniFaileSetPositionSheet すべてのセルの書式が標準の空のシート (読み込んだCSVを書き込みシート) >もとのコードはクリップボード監視ソフトが常駐していなければ問題なく動くんでしょうか? はい 問題なく動きます
- papayuka
- ベストアンサー率45% (1388/3066)
これだけで的確な回答を出来る人がいるでしょうか? 実際に見ているのと違い、文章だけでのやり取りですので、 Excelのバージョン 具体的なコード プロシージャを呼び出している状態(シートに置いたCommandButtonから実行など) クリップボード監視ソフトの名前 ブックやシートの状態 etc 可能な限り具体的に提示された方が回答が得られやすいと思います。
補足
Excelのバージョン:2000,2002 両方で発生 具体的なコード: Private Sub Workbook_Open() ~略~ iniFaileSet ~略~ End Sub Public Function iniFaileSet() As Boolean ~略~ Set myDataObject = New DataObject myDataObject.SetText myTextData myDataObject.PutInClipboard iniFaileSetPositionSheet.Range("A2").PasteSpecial ~略~ End Function クリップボード監視ソフトの名前 :なんでもいいです たとえば 秀丸
お礼
お礼が遅くなってすみません 1秒WAITさせたら、エラーがでなくなりました とりあえずこれで行きます でも 原因が不明なんです。。。。 Application.Wait (Now() + TimeValue("00:00:01")) iniFaileSetPositionSheet.Range("A2").PasteSpecial