1

大規模なプロジェクトの一部として、一連の画像を 1 つのマクロ内に表示する必要があります。これを実行すると、最後の msgbox の後に最終的な画像が表示され、他の画像はその下に重ねられます。

Sub Macro4()
Dim x As Integer
Dim Pic As Object
Dim picname As String
For x = 1 To 7
picname = ThisWorkbook.Path & "/" & "pic" & x & ".png"
ActiveSheet.Pictures.Insert(picname).Select
MsgBox (x)
Next x
End Sub

Msgbox コマンドはプロセスを遅くするためにあります。これにより、画像の変化を見ることができます (この場合は見えません)。

画像はpic1.png、pic2.pngなどと呼ばれます

マクロ中に個別の画像を表示するにはどうすればよいですか?

再編集:

ここに画像関数と、ミュージーク コンクレットのランダムな曲を演奏するより大きな関数があります。

Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long

showpicは、再生されているサウンドのピッチに関連するイメージを提供します。

Function showpic(value)
Dim v As Integer
v = value
picname = ThisWorkbook.Path & "/" & "pic" & v & ".png"
ActiveSheet.Shapes.AddPicture (picname), True, True, a1, a1, 170, 170
DoEvents
End Function

playは、楽器とピッチを選択し、必要なファイル名を作成するランダム化されたプロセスによって生成された一連の特定のサウンド ファイルを実行します。「ピース」は「メモ」秒間実行され、「条件」に一致するように特定の「セル」の値を変更する別のマクロによってトリガーされます。

Function play(Cell, condition, notes)
Dim WAVFile As String
Dim x As Integer
Dim y As Integer
Dim z As Integer
Dim c As String
Dim d As String
Dim currentcell As String
Dim pitchcell As String
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000
On Error GoTo ErrHandler
For x = 1 To notes
If Evaluate(Cell.value & condition) Then
y = x + 65
z = x + 39
c = Chr(y)
d = Chr(z)
If y > 90 Then c = "A" & d
currentcell = c & 6
pitchcell = c & 3
showpic (Sheets("Sheet1").Range(pitchcell).value)
WAVFile = ThisWorkbook.Path & "/" & Sheets("Sheet1").Range(currentcell).Text & ".wav"
Call PlaySound(WAVFile, 0&, SND_SYNC)
End If
Next x
ErrHandler:
play = False
Exit Function
End Function

3 つの問題があります。

  1. 最初の画像ファイルが表示されない
  2. 最初に「計算」または F9 を実行するため、作品が再ランダム化され、表示されたシーケンスは再生されません。これは最初の DoEvents が原因だと思います。
  3. 2回再生するようになりました!ただし、2 回目にはすべての画像ファイルが表示されます。
4

1 に答える 1

1

編集:
私の最初の答えはうまくいかなかったので、まったく別の方法で結果を達成してみませんか. このメソッドはApplication.OnTimeを使用してサブルーチンを再実行し、次の画像を挿入します。

Sub NextPicture()
    Static x As Integer
    Dim pic As Object
    Dim picname As String
    'Reset x to 0 because I assumed you want to rotate through the pictures.
    'If you want it to stop replace with If x = 7 then exit sub
    If x = 7 Then x = 0
    x = x + 1
    picname = ThisWorkbook.Path & "/" & "pic" & x & ".png"
    ActiveSheet.Pictures.Insert(picname).Select
    'Using 00:00:05 = 5 seconds, change the amount to speed up or slow down the picture changes
    Application.OnTime Now + TimeValue("00:00:05"), "NextPicture"
End Sub

元の回答
コードを機能させることができませんでしたが、場所とサイズを指定する/指定する必要があるため、実際にはShapes.AddPictureを使用するとより堅牢になります。

構文:

expression.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height)

例:

ActiveSheet.Shapes.AddPicture(picname, True, True, 100, 100, 70, 70)
于 2012-10-10T23:14:41.750 に答える