質問失礼します。
エクセル2003でラベル(コントロールツール)を作成し、
ラベルの表示/非表示を別に作成したボタンを押すたびに
切り替えるマクロを作成しています。
一応、自分で作成したものは動作するのですが、余りにも処理が遅いです。
(ボタンを押下後、処理が完了するまでに8秒前後かかります。)
『この場合はこうした方がいい』や『こうすれば早くなる』、または『それが限界』などの
ご意見があれば、ご返答お願い致します。
※ラベルは1グループ18個のa・b・cの3グループで合計54個あります。
※ラベルのオブジェクト名はa1・a2・a3・・・という規則性でつけています。
<作成例>
Private Sub button1_Click()
Dim test As Boolean
If a1.Visible Then
test = False
Else
test = True
End If
With ActiveSheet
For i = 1 To 18 Step 1
.OLEObjects("a" & i).Visible = test
.OLEObjects("b" & i).Visible = test
.OLEObjects("c" & i).Visible = test
Next i
End With
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> ボタンを押下後、処理が完了するまでに8秒前後かかります。
確かにそれは遅すぎですね。下記ソースを試して下さい。
Sub Sample()
MsgBox ActiveSheet.DrawingObjects.Count
End Sub
経験上、表示が遅くなる原因は、データ(計算式含む)が
多すぎる、オブジェクトが多すぎるケースが多いと感じます。
編集(例えばコピー&ペースト、行削除)を繰り返すうちに、
幅や高さが 0 となって存在するものの、見た目で見えなく
なったオブジェクトはありませんか?
上記ソースはアクティブシート内に配置されたオブジェクトの
総数を表示します。この数に異常がないか確認して下さい。
もしあれば、不要オブジェクトを削除します。
余談・・・
> If a1.Visible Then
> test = False
> Else
> test = True
> End If
これは、このように 1 行で書けますね。
test = Not a1.Visible
> With ActiveSheet
> For i = 1 To 18 Step 1
> .OLEObjects("a" & i).Visible = test
> .OLEObjects("b" & i).Visible = test
> .OLEObjects("c" & i).Visible = test
> Next i
> End With
この対象となるラベルコントロールを全てグループ化し、
そのグループ名が Group 1 だとすれば、
ActiveSheet.Shapes("Group 1").Visible = test
で一括切り替えできるかもしれません。
ありがとうございます。
不要なオブジェクトがありましたので削除したところ微妙に早くなりました^^;
また、無駄なコードのご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
イラストレーター10のガイドら...
-
Wordで数式の文字の大きさを均...
-
パワーポイントでの「配置/整列...
-
白飛びした(明るい)写真をiPhon...
-
Androidのスマホで毎回毎回ホー...
-
エクセルである行以下全部を削...
-
EXCEL VBAで全選択範囲の解除
-
Photoshop で8bit /チャンネル ...
-
ipadのpagesでMS明朝を使う方法...
-
画像の四隅を移動して変形でき...
-
「無」と「未」の使い方
-
VBAでファイルを開くときにファ...
-
gimpで色交換できません。
-
新幹線について
-
アクリル絵の具の落とし方
-
教えてgooのマイカテゴリを一つ...
-
「これが」「これで」いいです...
-
Simejiで作ったきせかえを消す...
-
言語の選択や国の選択をする時...
-
初心者です! カテゴリを選択出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで起動時のエラー対処方...
-
イラストレーター10のガイドら...
-
Excel 2016 PDF挿入について
-
Excelのvbaについて教えてくだ...
-
Wordで数式の文字の大きさを均...
-
Adobeイラストレーターで正確な...
-
パワーポイントで下に隠れた図...
-
Wordにイラストレータのパスを...
-
イラストレーターCS2での、拡大...
-
かんたんPDFEDITで入力した文章...
-
エクセルVBA ラベル表示/非表...
-
オブジェクトがコピーされなく...
-
エクセルである行以下全部を削...
-
白飛びした(明るい)写真をiPhon...
-
EXCEL VBAで全選択範囲の解除
-
Androidのスマホで毎回毎回ホー...
-
VBAでファイルを開くときにファ...
-
Photoshop で8bit /チャンネル ...
-
visual studio でインデントを...
-
Excel VBA あるセルでENTERを押...
おすすめ情報