|
こんばんは。
私も
>>いい方法はないでしょうか?
>別途ファイルを分けるか、Textをセルに入力して
>配布する方法も検討する事をお勧めします。
に賛成です。何故、テキストをわざわざOLEにしなければならないのかも
知りたいところです。
操作が簡単だからですか?
でも、シートに取り込むのだって「外部データの取り込み」で簡単に出来ますよね?
疑問です・・・・。
が、以下のサンプルコードで簡単なテキストファイルではうまく作動しています。
あくまでも新規ブックの標準モジュールに
'===================================================
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function SetActiveWindow Lib "user32" (ByVal hWnd As Long) As Long
'===================================================
Sub test()
Dim olenm As String
Dim ole As OLEObject
Dim hWnd1 As Long
Dim hWnd2 As Long
Dim shll As Object
olenm = mk_sample_ole
MsgBox "サンプルOLEを作成しました" & vbCrLf & _
"これから、OLEの中のテキストをセルに表示します"
Set shll = CreateObject("Wscript.Shell")
shll.AppActivate Application.Caption
Set ole = ActiveSheet.OLEObjects(olenm)
hWnd1 = GetActiveWindow
Application.DisplayAlerts = False
ole.Verb xlVerbPrimary
hWnd2 = hWnd1
Do Until hWnd1 <> hWnd2
Sleep 1000
hWnd2 = GetActiveWindow
Loop
Call SetActiveWindow(hWnd2)
shll.SendKeys "^A"
shll.SendKeys "^C"
DoEvents
shll.AppActivate Application.Caption
Range("a1").Select
ActiveSheet.Paste
SetActiveWindow hWnd2
shll.SendKeys "%FX"
Set shll = Nothing
End Sub
'===================================================
Function mk_sample_ole()
'サンプルとして、テキストファイルを作成し、
'アクティブシートにoleオブジェクトを作成する
Dim g0 As Long
Dim fno As Long
fno = FreeFile
Open ThisWorkbook.Path & "\olesamp.txt" For Output As #fno
For g0 = 1 To 26
Print #fno, String(30, Chr(g0 + 64))
Next
Close #fno
DoEvents
ActiveSheet.Range("F10").Select
With ActiveSheet.OLEObjects.Add(Filename:= _
ThisWorkbook.Path & "\olesamp.txt", Link:=False, _
DisplayAsIcon:=False)
mk_sample_ole = .Name
End With
End Function
上記のコードを含むブックを必ず保存した後にプロシジャーtestを実行してみてください。
サンプルテキストファイル(olesamp.txt)を当該ブックと同じフォルダに作成し、
そのテキストファイルからoleオブジェクトを作成します。
このサンプルoleObjectから、テキストをアクティブシートのセルa1にコピーします。
試してみてください。
これは、あくまでサンプルです。
冒頭で述べたとおり、仕様の変更を検討してみてください。
|
|