MultipageにそれぞれImagecontrolを張り付けて
エクセルで自動作成したマーカー付折れ線グラフを
表示させるマクロを書いてみたんですが
2Pageまでは、上手く動作するんですが3page目をクリックしても
全く反応しません。何がおかしいのかどなたかお分かりの方
ご教授下さい。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Private Sub MultiPage1_Change()
Application.ScreenUpdating = False
Dim chartrange As Range
Me.MultiPage1.Value = 0
ActiveSheet.Range("a8").CurrentRegion.Select
Set chartrange = Selection
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=chartrange, PlotBy:=xlRows
ActiveChart.Location where:=xlLocationAsObject, Name:="記録"
Const graphimage2 As String = "C:\Users\user\Pictures\Graph.bmp"
If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub
ActiveSheet.ChartObjects(1).Chart.Export graphimage2
If Len(Dir(graphimage2)) > 0 Then
With Image1
.PictureSizeMode = fmPictureSizeModeStretch
.PictureAlignment = fmPictureAlignmentCenter
.BorderStyle = fmBorderStyleNone
.Picture = LoadPicture(graphimage2)
End With
Kill graphimage2
End If
ActiveSheet.ChartObjects.Delete
Me.MultiPage1.Value = 1
ActiveSheet.Range("a11").CurrentRegion.Select
Set chartrange = Selection
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=chartrange, PlotBy:=xlRows
ActiveChart.Location where:=xlLocationAsObject, Name:="記録"
Const graphimage3 As String = "C:\Users\user\Pictures\Graph.bmp"
If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub
ActiveSheet.ChartObjects(1).Chart.Export graphimage2
If Len(Dir(graphimage3)) > 0 Then
With Image2
.PictureSizeMode = fmPictureSizeModeStretch
.PictureAlignment = fmPictureAlignmentCenter
.BorderStyle = fmBorderStyleNone
.Picture = LoadPicture(graphimage3)
End With
Kill graphimage3
ActiveSheet.ChartObjects.Delete
End If
Me.MultiPage1.Value = 2
ActiveSheet.Range("a14").CurrentRegion.Select
Set chartrange = Selection
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=chartrange, PlotBy:=xlRows
ActiveChart.Location where:=xlLocationAsObject, Name:="記録"
Const graphimage4 As String = "C:\Users\user\Pictures\Graph.bmp"
If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub
ActiveSheet.ChartObjects(1).Chart.Export graphimage4
If Len(Dir(graphimage4)) > 0 Then
With Image3
.PictureSizeMode = fmPictureSizeModeStretch
.PictureAlignment = fmpictueralignmentcenter
.BorderStyle = fmBorderStyleNone
.Picture = LoadPicture(grphimage4)
End With
Kill graphimage4
End If
ActiveSheet.ChartObjects.Delete
Application.ScreenUpdating = True
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
まず、
fmPictureAlignmentCenter と書くべきところを fmpictueralignmentcenter
graphimage4 と書くべきところを grphimage4
2カ所、これはコンパイルエラーで弾かれますね。
ActiveSheet.ChartObjects(1).Chart.Export graphimage2
が2カ所にありますが、2つめは、
ActiveSheet.ChartObjects(1).Chart.Export graphimage3
という意図で書かれたものとお察しします。
もっとも、定数に設定する値が共通ならば、
3種類の定数を宣言する必要はなく、ひとつの定数にした方が解り易いと思います。
指定したファイルパスでエクスポートして、処理後に毎度Killステートメントで削除している訳ですから、
パスを共通のものにしておいて問題ないです。
///
コードを読めば、どんな動作をするかはだいたい理解できるものですが、
どんなことがやりたいのか、こちらに伝わってくるかどうかは、また別の問題です。
MultiPage1_Change イベントって、UserForm上で手動で【ページを切り替えた時】、
という意味ですから、
3ページめを表示中に、3ページめ(のタブ)を、クリックしたとしても。
MultiPage1_Change イベントは呼び出されません。
クリックした時、ということなら、
Private Sub MultiPage1_Click(ByVal Index As Long) イベント
もありますが、
これは、タブ以外の所(ページ下部)をクリックしても発生しますから、
処理内容から考えて、案外扱い難いものになるでしょう。
///
3ページ分のグラフイメージなら、一気に読込・表示してしまってもいいと思いますが、
如何でしょう。
例えば、Private Sub UserForm_Activate() や Private Sub UserForm_Initialize() イベントで一気に、とか、
専用のボタンを設けておいて、Private Sub CommandButton1_Click() イベントで一気に、とか、
そういう感じの例示をひとつ挙げておきます。※1
次に、
MultiPage1_Change イベントの意味を理解して貰った上で、
「現在表示されていないページを表示しようとするタイミングで」
都度都度、新たに表示しようとしているページの分だけ、読込・表示する例を挙げておきます。※2
ただ、ページを切り替える度に忙しくグラフを更新する必要がある、とは思えないので、
今想像できる範囲では、※2は、そちらのニーズに応えるものではないと考えてはいます。
※1と※2の共存は不要です。どちらかひとつを選んで使うことになります。
///
グラフ作成手順、書き換えています。
すべて、Sheets("記録")に対して処理します。
.Cells(5 + i * 3, "A") という記述で、A8,A11,A14を参照しています。
.ChartObjects.Count でグラフの有無を確認する意味が解らなかったので外しています。
///
' ' ※1 ///
Private Sub UserForm_Activate() ' 8506000
' ' Private Sub UserForm_Initialize()
' ' Private Sub CommandButton1_Click()
Dim i As Long
Const graphimage As String = "C:\Users\user\Pictures\Graph.bmp"
Application.ScreenUpdating = False
With Sheets("記録")
.Select
For i = 1 To 3
.Shapes.AddChart(xlLineMarkers).Select
On Error Resume Next
ActiveChart.SetSourceData Source:=.Cells(5 + i * 3, "A").CurrentRegion, PlotBy:=xlRows
On Error GoTo 0
ActiveChart.Export graphimage
If Dir(graphimage) <> "" Then
With Controls("Image" & i)
.PictureSizeMode = fmPictureSizeModeStretch
.PictureAlignment = fmPictureAlignmentCenter
.BorderStyle = fmBorderStyleNone
.Picture = LoadPicture(graphimage)
End With
Kill graphimage
End If
Next i
.ChartObjects.Delete
End With
MultiPage1.Value = 0
Application.ScreenUpdating = True
End Sub
' ' ///
' ' ※2 ///
Private Sub MultiPage1_Change() ' 8506000
Dim nIdx As Long
Const graphimage As String = "C:\Users\user\Pictures\Graph.bmp"
nIdx = MultiPage1.Value + 1
Application.ScreenUpdating = False
With Sheets("記録")
.Select
.Shapes.AddChart(xlLineMarkers).Select
On Error Resume Next
ActiveChart.SetSourceData Source:=.Cells(5 + nIdx * 3, "A").CurrentRegion, PlotBy:=xlRows
On Error GoTo 0
ActiveChart.Export graphimage
If Dir(graphimage) <> "" Then
With Controls("Image" & nIdx)
.PictureSizeMode = fmPictureSizeModeStretch
.PictureAlignment = fmPictureAlignmentCenter
.BorderStyle = fmBorderStyleNone
.Picture = LoadPicture(graphimage)
End With
Kill graphimage
End If
.ChartObjects.Delete
End With
' MultiPage1.Value = 0
Application.ScreenUpdating = True
End Sub
' ' ///
回答いただきましてありがとうございます。
Private Sub MultiPage1_Change()
Application.ScreenUpdating = False
Dim chartrange As Range
Select Case Me.MultiPage1.Value
Case Is = 0
ActiveSheet.Range("a8").CurrentRegion.Select
Set chartrange = Selection
Call makegraph(chartrange, Image1)
Case Is = 1
ActiveSheet.Range("a11").CurrentRegion.Select
Set chartrange = Selection
Call makegraph(chartrange, Image2)
Case Is = 2
ActiveSheet.Range("a14").CurrentRegion.Select
Set chartrange = Selection
Call makegraph(chartrange, Image3)
Case Is = 3
ActiveSheet.Range("a17").CurrentRegion.Select
Set chartrange = Selection
Call makegraph(chartrange, Image4)
End Select
Application.ScreenUpdating = True
End Sub
Private Sub makegraph(a As Range, b As Control)
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=a, PlotBy:=xlRows
ActiveChart.Location where:=xlLocationAsObject, Name:="記録"
Const graphimage2 As String = "C:\Users\user\Pictures\Graph.bmp"
If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub
ActiveSheet.ChartObjects(1).Chart.Export graphimage2
If Len(Dir(graphimage2)) > 0 Then
With b
.PictureSizeMode = fmPictureSizeModeStretch
.PictureAlignment = fmPictureAlignmentCenter
.BorderStyle = fmBorderStyleNone
.Picture = LoadPicture(graphimage2)
End With
Kill graphimage2
End If
ActiveSheet.ChartObjects.Delete
ActiveSheet.Range("a1").Select
End Sub
これで何とかなりました。
全部のパーツ箱の消費量を一つのグラフで表示すると
単位が違い過ぎて、比較にならないので、此処のパーツ箱につき
其々グラフを作成してMultipageで表示しようとしたんです。
パーツ箱の1日当たりの消費量や実稼働日数の計算は
問題なくできたのですが、まぁ プレゼン?の一環として
グラフもつけたかったんです。お騒がせしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VBAでIEの「Web ページからのメ...
-
左シングルクリックと左ダブル...
-
VB2005 DataGridView上でクリッ...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
VBAのユーザーフォームのframe...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
小さな表示窓の呼び方は
-
Excelでワードアートや図を常に...
-
バッチファイルでdiskpart.exe...
-
PDFファイルの向きを縦から横に...
-
【Android】ユーザー補助機能ボ...
-
PDFを(htmlのように)無限に縦...
-
Photoshop 7 画像に上の青い境...
-
Windowsのポップアップの表示方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「Cancel = True」とはどういう...
-
別フォームから戻ったときのイ...
-
VB2005 DataGridView上でクリッ...
-
excelのタスクバーアイコンが・...
-
Perlで数値(小数点、負の数、...
-
VB6.0のEnabledをfalseにしても...
-
VBAでIEの「Web ページからのメ...
-
エクセル アプリケーションの...
-
【ImageMagick】 PDF → JPG 変...
-
【C#】ラベルのダブルクリック...
-
Perlでページ処理がどうしても...
-
vba IE操作で こういう事って...
-
別ページからのタブ切り替えの...
-
処理終了後のに砂時計が、クリ...
-
数千行HTML 画面表示の性能改善
-
javascriptの中で、perlのコマ...
-
C# マウスオーバーの記述方法
-
実行中のOSを知るには?
-
C++での連続した左クリックの禁...
-
Sleep関数の最大時間について
おすすめ情報