- ベストアンサー
クリップボードの内容をEXCELに貼付け
クリップボード内容をエクセルのシートに貼り付けることをvbで行おうとしています。 1回目はできるのですが、2回目にはエラーが出てしまいます。(貼り付けるセルを指定したときに) 現状のコードを添付します。おかしなところがわかる方、教えて下さい。 '------------------------------------------------------- 'エクセルを起動させる '------------------------------------------------------- Public Sub ExcelProc() Dim xl2 As Excel.Application Dim xl2Book As Object Dim xl2Sheet As Object Dim ELSFileName As String 'エクセルの起動 Set xl2 = CreateObject("excel.application") xl2.Visible = True xl2.Workbooks.Open ("d:\test.xls") Set xl2Book = xl2.ActiveWorkbook Set xl2Sheet = xl2Book.Worksheets(1) 'D10にクリップボードの内容を貼り付ける xl2Sheet.Select Range("d10").Select ActiveSheet.Paste '保存するファイル名を作成 ELSFileName = "c:\test10.xls" '保存 ChDir "C:\" ActiveWorkbook.SaveAs FileName:=ELSFileName, FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xl2Sheet = Nothing xl2Book.Close True Set xl2Book = Nothing xl2.Quit Set xl2 = Nothing End Sub この関数を2度実行させたらエラーになります。 Range("d10").Select 'この箇所でエラーになる。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下のように変更してみてください。 Active~を使用するとうまくEXCELが開放されないみたい。 'D10にクリップボードの内容を貼り付ける xl2Sheet.Range("d10").PasteSpecial 'Range("d10").Select 'ActiveSheet.Paste ' ''保存するファイル名を作成 ELSFileName = "c:\test10.xls" ''保存 ChDir "C:\" xl2Book.SaveAs FileName:=ELSFileName, FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
横道にそれて済みませんが、VB-->Excelなら VBでなら Sub main() If Clipboard.GetFormat(vbCFText) = True Then s = Clipboard.GetText End If MsgBox s End Sub は単独で動きました。 VBAではオブジェクトがないとエラーになりますが。 何か参照設定でもしてVBAでも動きませんでしょうか。 ClipBoardは安定しています。何回使おうと。 ここが小生には判らないのですが。 VBAではコピー・ペースト(特にペースト)は理屈の理解が難しい。 OKWEBの質問439996で苦労しました。 そこのnishi6さんのご回答など参考になりませんでしょうか。外れていたら済みません。
- taknt
- ベストアンサー率19% (1556/7783)
>Range("d10").Select 'この箇所でエラーになる。 貼り付ける対象が見当たらないからでしょうきっと。 ワークブックとシートをそれぞれアクティブにしてあげたらどうでしょうか?
補足
回答ありがとうございます。 下記のように変更してみました。 'D10にクリップボードの内容を貼り付ける xl2Book.Activate xl2Sheet.Activate xl2Sheet.Select Range("d10").Select ActiveSheet.Paste しかし、結果は変わりませんでした。 補足として、このプロシージャは、コマンドボタンのクリックイベントで実行しています。起動後1回ボタンを押すと正常に動作を行うのですが、2回目ボタンを押すと先ほどの箇所でエラーになります。 いったいどうしてでしょう、原因がわかりません。
お礼
ありがとうございました。 うまくいきました。 ちなみに、クリップボードにはvb上のフォームをコピーしています。 Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) sub test keybd_event &H12, 0, 0, 0 'Altキーを押す keybd_event &H2C, 0, 0, 0 'PrintScreenキーを押す keybd_event &H12, 0, &H2, 0 'Altキーを離す keybd_event &H2C, 0, 0, 0 'PrintScreenキーを離す DoEvents end sub 上記コードでフォームをコピーしているのですが、これだけでなく、フォーム内のコントロールのみを抜き出して、クリップボードにコピーすることなどできるのでしょうか?参考に教えて下さい。 多分、新しい質問にもそのうち入れると思いますがわかるようであれば教えて下さい。