質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

4663閲覧

【VBA】ユーザーフォーム上でランダムに画像を表示するシステムの作成

emirimiyake

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/06/06 16:01

前提・実現したいこと

ユーザーフォーム上でランダムに画像が表示されるシステムを作っています。(一つの画像1回)

発生している問題・エラーメッセージ

変数が定義されていません。

該当のソースコード

VBA(Excel2010以降)

1 2 3 4Sub Gazou() 5 Dim myFlag(1 To 5) As Boolean 6 Dim RandNo As Long 7 Dim i As Long 8 Dim strPicture(5) As String 9 strPicture(0) = "C:\Users\egree\Documents\輪講\VBA\棒人間1.jpg" 10 strPicture(1) = "C:\Users\egree\Documents\輪講\VBA\棒人間2.jpg" 11 strPicture(2) = "C:\Users\egree\Documents\輪講\VBA\棒人間3.jpg" 12 strPicture(3) = "C:\Users\egree\Documents\輪講\VBA\棒人間4.jpg" 13 strPicture(4) = "C:\Users\egree\Documents\輪講\VBA\棒人間5.jpg" 14 Randomize 15 16 Do 17 RandNo = Int((5 - 1 + 1) * Rnd + 1) 18 Loop Until myFlag(RandNo) = False 19 20 Sub UserForm_Initialize() 21 Image1.Picture = LoadPicture(strPicture(RandNo)) 22 End Sub 23 myFlag(RndNo) = True 24 25End Sub 26

試したこと

Sub UserForm_Initialize()
Image1.Picture = LoadPicture(strPicture(RandNo))
End Sub
の部分を分けていましたが、それだと変数を使えなくなるので、Sub Gazouの中に入れてみましたが無理でした。

補足情報(FW/ツールのバージョンなど)

すみません、初心者で至らないところが多きがします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VBAの書き方としてそもそもSub Gazouの中にSub UserForm_Initialize()と書くことはできません。

『ユーザーフォーム上でランダムに画像が表示されるシステムを作っています。(一つの画像1回)』
というのも、提示されたコードを見る限りでは一つの画像一回という要素はどこにもなく
『フォームを開いたときに一度だけ5つの画像からランダムで一つ表示する』
としか読めないので、そういう方向で直すとこんな感じですかね。

vba

1Private Sub UserForm_Initialize() 2 Image1.Picture = LoadPicture(Gazou) 3End Sub 4 5Private Function Gazou() As String 6' Dim myFlag(1 To 5) As Boolean 7 Dim RandNo As Long 8 Dim i As Long 9 Dim strPicture(5) As String 10 strPicture(0) = "C:\Users\egree\Documents\輪講\VBA\棒人間1.jpg" 11 strPicture(1) = "C:\Users\egree\Documents\輪講\VBA\棒人間2.jpg" 12 strPicture(2) = "C:\Users\egree\Documents\輪講\VBA\棒人間3.jpg" 13 strPicture(3) = "C:\Users\egree\Documents\輪講\VBA\棒人間4.jpg" 14 strPicture(4) = "C:\Users\egree\Documents\輪講\VBA\棒人間5.jpg" 15 Randomize 16 17' Do 18 RandNo = Int((5 - 1 + 1) * Rnd) '+1は入れると5も来るので不要では? 19' Loop Until myFlag(RandNo) = False 20 21' myFlag(RndNo) = True 22 Gazou = strPicture(RandNo) 23 24End Function

投稿2020/06/06 21:16

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

emirimiyake

2020/06/07 15:15

回答ありがとうございます。 とても助かりました。 ちなみに、これらの画像をランダムな順番で全て表示するにはどうするかわかりますか?
sousuke

2020/06/08 01:52

「一つの画像1回」と同じで要件がかなりわかりにくいです。 一つの画像コントロールに表示できる画像は当然ですが1つです。 「全て表示する」という方法をまずは提示してください。 例1)1秒に一つ、ランダムな順で「(5秒ほどで)全て表示する」 例2)5回フォームを開いてランダムな順で「全て表示する」 例3)5回ボタンをクリックしてランダムな順で「全て表示する」 例4)画像コントロールを5つ置いてフォームを開いたときにランダムで「全て表示する」 などです。特にここに言及がないのでどうしようもないです。1つの画像コントロールで どうやって「全て表示」するつもりかがわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問