- 01: 名前:yoda投稿日:2006/09/26(火) 13:46
- Dim myole As Object
とするとき、ShapeにExcelのWorkSheetがリンクオブジェクト
として挿入されていると、
Set myole = objShp.Object
で、例外発生となりますが、回避策はないでしょうか?
- 02: 名前:yoda投稿日:2006/10/04(水) 14:03
- 01の件は、OleObjects コレクションを使用すると、
直接取得できることがわかりました。
話は少し飛びますが、リンクオブジェクトのリンク先を
変更するために、
Application.DoCmd visCmdEditLinks
とすると、「リンク」という、リンク先を変更できる
ダイアログが開きます。
このとき、キーボードから、Alt+C と入力すると、
「リンク元の変更」という名のボタンを押したのと同じ
ように、ファイルダイアログが開きます。
これと同じことを、VBAで行おうとして、
SendKeys "%C", True
としても、リンク先を変更できるダイアログが
アップリケーションモーダルなため、動きません。
そこで、VB.NETのWindowsアプリケーションを
作って、同じようにしてみたのですが、やはり
だめでした。
SendKeys "%C", True を、「リンク」ダイアログに
対して発行することは、できないのでしょうか?
- 03: 名前:yoda投稿日:2006/10/10(火) 12:07
- ようやくできました。
- 04: 名前:yoda投稿日:2006/10/10(火) 12:33
- できました。
- 05: 名前:yoda投稿日:2006/10/10(火) 16:29
- リンク編集ダイアログを開くところも、SendKeyを
使いました。
コードは、以下のとおりです。
'Module Module1
Imports System.Threading
Module Module1
Public Sub main()
Dim myShape As New clsShape
Dim myKey As New clsSendKeys
myShape.mySelect()
Thread.Sleep(200)
myKey.OpenDialog()
Thread.Sleep(200)
myKey.ReplaceLink()
End Sub
End Module
'Class clsShape
Public Class clsShape
Public Sub mySelect()
Dim app As Microsoft.Office.Interop.Visio.Application
app = GetObject(, "visio.application")
Dim shp As Microsoft.Office.Interop.Visio.Shape
shp = app.ActivePage.Shapes(1)
app.ActiveWindow.Select(shp, Microsoft.Office.Interop.Visio.VisSelectArgs.visSelect)
shp = Nothing
app = Nothing
End Sub
End Class
'Class clsSendKeys
Public Class clsSendKeys
Public Sub OpenDialog()
AppActivate("Microsoft Visio")
My.Computer.Keyboard.SendKeys("%E", True)
My.Computer.Keyboard.SendKeys("k", True)
End Sub
Public Sub ReplaceLink()
AppActivate("リンク")
My.Computer.Keyboard.SendKeys("%C", True)
My.Computer.Keyboard.SendKeys("another.xls", True)
My.Computer.Keyboard.SendKeys("%O", True)
Thread.Sleep(200)
My.Computer.Keyboard.SendKeys("%U", True)
My.Computer.Keyboard.SendKeys("{ESC}", True)
End Sub
End Class
- 06: 名前:削除されました投稿日:削除されました
- 削除されました
■トップに戻る リロード 単独スレ表示
|