こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クリップボードの内容を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 'この箇所でエラーになる。


お願いします。

投稿日時 - 2003-01-11 12:34:10

QNo.442754

すぐに回答ほしいです

質問者が選んだベストアンサー

以下のように変更してみてください。
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

投稿日時 - 2003-01-11 13:32:35

お礼

ありがとうございました。
うまくいきました。
ちなみに、クリップボードには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
上記コードでフォームをコピーしているのですが、これだけでなく、フォーム内のコントロールのみを抜き出して、クリップボードにコピーすることなどできるのでしょうか?参考に教えて下さい。
多分、新しい質問にもそのうち入れると思いますがわかるようであれば教えて下さい。

投稿日時 - 2003-01-11 17:17:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

横道にそれて済みませんが、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さんのご回答など参考になりませんでしょうか。外れていたら済みません。

投稿日時 - 2003-01-11 13:53:14

ANo.1

>Range("d10").Select 'この箇所でエラーになる。

貼り付ける対象が見当たらないからでしょうきっと。

ワークブックとシートをそれぞれアクティブにしてあげたらどうでしょうか?

投稿日時 - 2003-01-11 12:49:49

補足

回答ありがとうございます。
下記のように変更してみました。
'D10にクリップボードの内容を貼り付ける
xl2Book.Activate
xl2Sheet.Activate
xl2Sheet.Select
Range("d10").Select
ActiveSheet.Paste
しかし、結果は変わりませんでした。
補足として、このプロシージャは、コマンドボタンのクリックイベントで実行しています。起動後1回ボタンを押すと正常に動作を行うのですが、2回目ボタンを押すと先ほどの箇所でエラーになります。
いったいどうしてでしょう、原因がわかりません。

投稿日時 - 2003-01-11 13:19:47

あなたにオススメの質問