ただし、このマクロを呼び出すたびにエラーが発生し、手動で「Microsoft Forms 2.0 Object Library」を参照設定する必要があります。
マクロ内で「Microsoft Forms 2.0 Object Library」を自動で参照設定する方法はありませんか?
Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーする
Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーするマクロとして以下をメニューから呼び出せるようにしています。
が、呼び出すたびにエラーが出て、手動で「Microsoft Forms 2.0 Object Library」を参照設定しています。マクロ内で「Microsoft Forms 2.0 Object Library」を自動で参照設定ONにするようにはできないでしょうか。
---
Sub SumCopy()
Dim MyData As DataObject
Set MyData = New DataObject
MyData.SetText Application.WorksheetFunction.Sum(Selection), 1
MyData.PutInClipboard
End Sub
ご存知の方がいらっしゃればご教授よろしくお願い致します。
参照設定が消えてしまうのですか?
一応下記で対応ができると思います。
※すでに参照設定されている場合はエラーになります。
On Error Resume Next 命令を入れた方が良いかも知れません。
※参照設定はフルパスで指定しますので、OSや環境により変わるかも知れません。
Sub 参照設定()
ThisWorkbook.VBProject.References.AddFromFile ("C:\Windows\system32\FM20.DLL")
End Sub
以下のようにすれば、クリップボード・オブジェクトを作れます。
一般のクリップボードを使いたければ、Win32 APIのほうが便利かもしれません。
'//
Public myData As Object
Sub SumCopyR()
Const clsid_DATAOBJECT As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
If myData Is Nothing Then
Set myData = CreateObject("new:" & clsid_DATAOBJECT)
End If
myData.SetText Application.WorksheetFunction.Sum(Selection), 1
myData.PutInClipboard
End Sub
'//
ClassID は、以下のようにして検索しました。
検索語:DataObject
HKEY_CLASSES_ROOT\CLSID\{1C3B4210-F441-11CE-B9EA-00AA006B1A69}
Microsoft Forms x.x DataObject
(こちらは、RegSeekerを利用)