Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8 : Excel 2013)
ユーザーフォームにクリップボードの自動貼り付けを行うには
投稿日時: 19/06/12 11:31:23
投稿者: eco2019

お世話になります。
 
クリップボードにコピーしている画像をユーザーフォームに自動で表示するには
どうすればよいでしょうか?
 
 
Sub test1()
 
 Dim c As Range
 Set c = Selection
 
 c.CopyPicture _
     Appearance:=xlScreen, Format:=xlPicture
 
End Sub
 
 
宜しくお願いします。

回答
投稿日時: 19/06/12 11:54:41
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示したコードは、
ユーザーフォームといっているのに、なぜ、セルなんですか?
セルには画像は貼り付けできません。
シートならば、
ActiveSheet.Paste
で対応可能です。
  
質問の説明とコードが全く整合していないのですが・・・・
  
どちらがお望みなんでしょうか?
  
   
クリップボードでなくてはいけませんか?
  
↓の例は、ユーザーフォームをクリックしたときに
画像ファイルを選択して、ユーザーフォームそのものに貼り付けるコードです。
  
Private Sub UserForm_Click()
 Dim Filename As String
   
     Filename = Application.GetOpenFilename("画像ファイル,*.jpg")
       
     Me.Picture = LoadPicture(Filename)
 End Sub
  

投稿日時: 19/06/12 11:59:39
投稿者: eco2019

WinArrowさん、有難うございます。
 
作業している内容を画像としてコピーし、ユーザーフォームでそれを表示しながら、また別なシートの作業を行いたいと思いまして。

回答
投稿日時: 19/06/12 12:01:53
投稿者: WinArrow
投稿者のウェブサイトに移動

アイデア
 
ワークシートの画像をユーザーフォームのイメージコントロールに貼り付ける
記事があったので紹介します。
 
https://www.extendoffice.com/ja/documents/excel/4927-excel-userform-image-from-worksheet.html

回答
投稿日時: 19/06/12 16:10:55
投稿者: WinArrow
投稿者のウェブサイトに移動

eco2019 さんの引用:

WinArrowさん、有難うございます。
 
作業している内容を画像としてコピーし、ユーザーフォームでそれを表示しながら、また別なシートの作業を行いたいと思いまして。

 
ユーザーフォームは、どの様にして開いているのですか?
ユーザーフォームが開いているときにも、シートの操作ができるような指定をしていますか?

回答
投稿日時: 19/06/12 16:46:10
投稿者: WinArrow
投稿者のウェブサイトに移動

Excelだけではできないと思います。
APIを使うことになります。かなり難易度が高そうですが、↓を参考にしてみてくだし。
  
https://oshiete.goo.ne.jp/qa/2885043.html

投稿日時: 19/06/12 22:22:32
投稿者: eco2019

ユーザーフォームは、開いているEXCELシートの右上にでも開いたままで、ユーザーフォームが開いているときでも、シートの操作ができるような指定をしています。
 
Excelだけでは難しいのですね。有難うございます。
 
 

投稿日時: 19/06/17 16:10:09
投稿者: eco2019

お世話になります。先日の質問に直接関連してないかも知れませんが。。
 
ユーザーフォームに写真を表示するようにしました。写真があるフォルダーの写真を
ダブルクリックしています。
 
TextBox1 に表示された写真名を表示したいのですが、下記ではどのように
すればよいでしょうか?
 
あと、フォルダーの写真を連続で表示するボタンがあると便利かと思っているのですが、
可能でしょうか?
 
Private Sub Test()
   On Error Resume Next
   ANS = Application.GetOpenFilename("ピクチャーファイル*.png,*.png;*.jpg;*.gif;*.bmp")
   If ANS <> False Then
      Image1.Picture = LoadPicture(ANS)
      If Err.Number <> 0 Then
 
         Image1.Picture = LoadPicture(ThisWorkbook.Path & "\temp.jpg")
          
        TextBox1 = Val(TextBox1.Value)
          
         Kill ThisWorkbook.Path & "\temp.jpg"
 
         End If
      End If
   Me.Hide
 
   Me.Show
 
End Sub

回答
投稿日時: 19/06/17 17:13:50
投稿者: WinArrow
投稿者のウェブサイトに移動

eco2019 さんの引用:
お世話になります。先日の質問に直接関連してないかも知れませんが。。
 
ユーザーフォームに写真を表示するようにしました。写真があるフォルダーの写真を
ダブルクリックしています。
 
TextBox1 に表示された写真名を表示したいのですが、下記ではどのように
すればよいでしょうか?
 
あと、フォルダーの写真を連続で表示するボタンがあると便利かと思っているのですが、
可能でしょうか?
 
Private Sub Test()
   On Error Resume Next
   ANS = Application.GetOpenFilename("ピクチャーファイル*.png,*.png;*.jpg;*.gif;*.bmp")
   If ANS <> False Then
      Image1.Picture = LoadPicture(ANS)
      If Err.Number <> 0 Then
 
         Image1.Picture = LoadPicture(ThisWorkbook.Path & "\temp.jpg")
          
        TextBox1 = Val(TextBox1.Value)
          
         Kill ThisWorkbook.Path & "\temp.jpg"
 
         End If
      End If
   Me.Hide
 
   Me.Show
 
End Sub

 
話が少しわからないのですが、
 
まず、画像をクリップボードから、ユーザーフォーム(のImageコントロール?)への貼付けは、
解決したのですか?
 
それを、明示してから、別の質問にしましょう。
 
話が見えない点
 
(1)1つ目の疑問
>写真があるフォルダーの写真をダブルクリックしています。
と、下に記述のコードとは、どのような関係にあるのですか?
 
(2)2つ目の疑問
>TextBox1 に表示された写真名を表示したいのですが、下記ではどのように
すればよいでしょうか?
@TextBox1には、どのような方法で写真名(本当はファイル名?)を入力しているのですか?
 その時、ファイル名だけなのか?フルパスなのか?
 
(3)3つ目の疑問
>あと、フォルダーの写真を連続で表示するボタンがあると便利かと思っているのですが、可能でしょうか?
可能か?
といわれれば可能です。
一つのImageコントロールでよいのですか?
次の画像表示方法は、どのようにするのですか?
なお、
Application.GetOpenFilenameメソッドに複数選択できるオプションがありますので
それを使えば、1回のフォルダ表示で、複数の画像を配列で取得できます。
 
(4)4つ目の疑問
このプロシジャは、どこに記述していますか?
Me.Hide
Me.Show
とかいてあるから、ユーザーフォームモジュールとは思いますが、
testプロシジャの実行方法は?
なぜ、Me.HideとMe.Showがあるのですか?
 
 
 

回答
投稿日時: 19/06/17 17:43:28
投稿者: WinArrow
投稿者のウェブサイトに移動

「連続して画像取り込む」に関するアイデア提供
 
ユーザーフォームを2つ用意するか、1つでも右半分/左半分とか区切って使うか
どちらでもよいが、
 
1つの場合、右半分に、サムネイル形式で画像を取り込み、
サムネイルの一つを選択して、左半分に表示する
という方法です。(半分と書きましたは半分である必要はありません)
 
Application.GetOpenFilenameで複数選択できるので、取得した画像を
サムネイルに取り込みます。
ファイル個数がサムネイルの個数より多い場合を想定して、ページ切替のような制御機能をつけます。
 
 
 
 

投稿日時: 19/06/17 21:26:53
投稿者: eco2019

WinArrowさん、有難うございます。
 
お陰様で、画像をクリップボードから、ユーザーフォームへの貼付けは、
新規のBookを開いて、そこに貼り付けるようにしました。
 
(1)先日、ご教授頂いたのを試みてから思いつきました。フォルダーにある写真を見る時、開くのが遅かったりするため、ユーザーフォームだと
早いし、綺麗に見えます。色々、検索し、そのコード(ダブルクリックで写真を表示)に辿り着きました。
 
(2)その下にファイル名、ボタンを設けダブルクリックとは別に連続で写真を表示できるとよりいいかと思いました。
 
Textbox1に写真名(ファイル名だけ)が表示できないかと思っています。
 
(3)写真はフォルダーに100枚とか入っていますので、出来れば連続がいいですね。
 
(4)Me.Hide
の下にコメントが有り、これを書かないとエラーになる場合があるとか書いてたような気がします。
アイデア有難うございます。

回答
投稿日時: 19/06/18 11:08:30
投稿者: Suzu

こんにちは。
 
 「連続」とはどの様な状態でしょうか。
  一定時間(3〜3秒)程度で、自動で次の画像に切り替わるという意味でしょうか?
  
 であれば、自分なら御免です。 先頭に近い位置で表示されれば良いですが、
 後半なら選択できるまでに、2秒x100枚=200秒 待たされます。
 
 ユーザーにとっては サムネイルで表示させた方が優しくありませんか?
 FilePicker のサムネ機能では不足でしょうかね?

投稿日時: 19/06/18 16:07:10
投稿者: eco2019

すみません、言葉足らずで。
 
連続とは、自分で一回一回クリックしていくことです。
 
あと、ユーザーフォームに写真が表示された時に、ファイル名が表示できればいいのですが、
私が書いた下記では違ってたみたいでした。
 
TextBox1 = Val(TextBox1.Value)
 
お手数をお掛けして申し訳ございません。

投稿日時: 19/06/18 16:12:22
投稿者: eco2019

FilePicker のサムネ機能とは、ソフトのことですね。使った事ないのですが、出来ればエクセルを開いて、アドイン機能を用いてその中で解消できればと思っています。
 
宜しくお願い致します。

回答
投稿日時: 19/06/18 18:00:26
投稿者: Suzu

eco2019 さんの引用:
FilePicker のサムネ機能とは、ソフトのことですね。使った事ないのですが、出来ればエクセルを開いて、アドイン機能を用いてその中で解消できればと思っています。

 
ソフト?? アドイン??
 
サムネ機能。。
エクスプローラーで、画像の入っているフォルダを開き 表示で
 大きいアイコン とか、縮小版 とか を選択すると、画像の内容が表示されませんか?
 
その機能の事です。
 
 
 
1.「ツール」-「その他のコントロール」-「Microsoft Web Browser」 から 【WebBrowser1】を配置
2.「ツールボックス」の イメージコントロール【Image1】を配置
3.コマンドボタン
   【CommandButton1】(Caption:SelectFolder)
   【CommandButton2】(Caption:SelectImageFile)
     を配置
 
以下コード(エラーコードは含めていません。)
'参照設定
'Microsoft Internet Controls
'Microsoft Shell Controls And Automation
'Microsoft Scripting Runtime
 
Private Sub CommandButton1_Click()
  With Excel.Application.FileDialog(msoFileDialogFilePicker)
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    strPath = .SelectedItems(1)
    Set FSO = CreateObject("Scripting.FileSystemObject")
    strPath = FSO.GetParentFolderName(strPath)
  End With
 
  Me.WebBrowser1.Navigate strPath
End Sub
 
Private Sub CommandButton2_Click()
  Set shellFolder = Me.WebBrowser1.Document
  Me.Image1.Picture = LoadPicture(shellFolder.FocusedItem.Path)
End Sub

投稿日時: 19/06/18 22:52:09
投稿者: eco2019

サムネ機能、分かりました。表示されました。
 
こんなことも出来るんですね。すごいですね。
 
WinArrowさん、Suzuさん有難うございます。