
ワークシート上の所定の位置に、拡大・縮小のコマンドボタンを作って、押すごと、25倍、50倍、100倍・・・(その逆)という風に表示倍率を変えたいのですが、
Dim Zm As Integer
Zm = 25
Private Sub ZoomButton_Click()
Zm = Zm * 2
ActiveWindow.Zoom = Zm
End Sub
と、こんなふうにやってみたんですが、最初値25倍のInitializeが分かりません。どうしたら良いのでしょうか?
VBAど素人なので、よろしくお願いします
No.5ベストアンサー
- 回答日時:
#4です。
>後半のものはうまくいきませんでした。
現象は、ボタンを押すと25%になって、何回押しても変化しないということでしょうか?
それでしたら、「ZmをPublic変数にして」とだけ書いて、ソースに明示しなかった部分の不足だと思います。
Public Zm As Integer 'これを追加
Private Sub CommandButton1_Click()
If Zm = 0 Then
Zm = 25
Else
Zm = Zm * 2
End If
ActiveWindow.Zoom = Zm
End Sub
これで動作すると思います。
できました!
すみません、きわめて初歩的なミスで。おそらく他に出来なかったものも同じようなミスなんでしょうね。
もしよろしかったら、時間がある時で構わないのですが、DimとStaticとPublicと、違いを教えて頂けないでしょうか?
私が使っている参考書には、Dimでの定義のやり方しか載っていません。Publicは、全てのモジュールで使える変数ということでしょうか?
No.6
- 回答日時:
#4です。
>DimとStaticとPublicと、違いを教えて頂けないでしょうか?
まずは、ヘルプを確認して頂いて、その上で不明点は別途質問していただいた方が適切な回答が得られると思います。
>Publicは、全てのモジュールで使える変数ということでしょうか?
(Option Private Module を使用しない場合、)その理解でよろしいと思います。
Dimで宣言された変数は、(Dim文が)呼び出されるたびに初期化されますが、Staticで宣言された変数は、一旦セットされた値を保持します。
Sub testst()
Static x As Long
x = x + 5
Debug.Print x
End Sub
Sub testdim()
Dim x As Long
x = x + 5
Debug.Print x
End Sub
イミディエイトウィンドウで、teststとtestdimを何回か実行してみて下さい。
かさねがさね、ありがとうございます。
おっしゃられる通り、もう少し自分で勉強しないとダメですね。
あまりに便利なサイトを見つけたものですから、ついつい甘えてしまいました。DimとStatic、なんとなく判ったような気がします。
No.4
- 回答日時:
初期値を25にする意味がよく理解できません。
普通現在の値を拡大ボタンを押したらその2倍、縮小ボタンを押したらその半分という風に設定すると思いますが、どうでしょうか?
Private Sub CommandButton1_Click()
Zm = ActiveWindow.Zoom
Zm = Zm * 2
ActiveWindow.Zoom = Zm
End Sub
この場合、ZmをPublic変数にする必要はありません。
勿論、ZmをPublic変数にして、最初の値を25にすることも出来ます。
すでに回答されている以外に、例えば、
Private Sub CommandButton1_Click()
If Zm = 0 Then
Zm = 25
Else
Zm = Zm * 2
End If
ActiveWindow.Zoom = Zm
End Sub
ありがとうございます。
これが一番シンプルで、素人にも大変判りやすいです。後半のものはうまくいきませんでした。
Zm=ActiveWindow.Zmという逆の式が成り立つとは思いもよりませんでした。いい勉強になりました。
マクロって面白いですね。皆さんからご意見いただきましたが、「へぇええ~」の連発です。
No.3
- 回答日時:
標準モジュールを挿入して、Module1 で、
Public Zm As Integer
ThisWorkbook で、
Private Sub Workbook_Open()
Zm = 25
ActiveWindow.Zoom = Zm
End Sub
コマンドボタンを作ったsheet で、
Private Sub CommandButton1_Click() '拡大ボタン
Zm = Zm * 2
ActiveWindow.Zoom = Zm
End Sub
Private Sub CommandButton2_Click() '縮小ボタン
Zm = Zm / 2
ActiveWindow.Zoom = Zm
End Sub
で、うまく行くと思います。
一度保存して、立ち上げ直してテストして下さい。
ボタンの位置は、#1の方も言っているように、拡大して行くと、ボタンの位置がズレて行きますので、出来るだけA1に小さく置くと良いです。
ありがとうございます。
何度試してみても、
WindowクラスのZoomプロパティを設定できません。
と言われてしまいます。
どうしてなのでしょう?
No.2
- 回答日時:
「小さくなり切れば、次は大きくなり、大きくなり切れば、次は小さくなる」と
いうことですね。
こんな感じで如何でしょうか。
Private Sub ZoomButton_Click()
Static UpDn As Boolean
Dim Zm As Single
If UpDn = False Then
Zm = ActiveWindow.Zoom * 2
If Zm = 400 Then
Zm = Zm / 4
UpDn = True
End If
Else
Zm = ActiveWindow.Zoom / 2
If Zm = 12.5 Then
Zm = Zm * 4
UpDn = False
End If
End If
ActiveWindow.Zoom = Zm
End Sub
すみません、質問の言葉が悪かったです。
拡大→拡大→縮小→縮小という折り返しが必要なわけではないんです。両方のボタンを作るという意味でした。
ありがとうございます。
No.1
- 回答日時:
(1)Zmをシートのセルの値として持たせる方法。
(2)ZmをPublic変数とし、先だってZm=25を実行する方法
(3)ZmをStatic変数にし、初回に0にしてくれるのを利用する方法
(2)
Sub test01()
zm = 25
End Sub
Private Sub CommandButton1_Click()
zm = zm + 25
ActiveWindow.Zoom = zm
CommandButton1.Caption = zm
End Sub
(3)
Private Sub CommandButton1_Click()
Static zm
zm = zm + 25
ActiveWindow.Zoom = zm
CommandButton1.Caption = zm
End Sub
(1)
Private Sub CommandButton1_Click()
zm = Cells(1, 3)
zm = zm + 25
ActiveWindow.Zoom = zm
CommandButton1.Caption = zm
Cells(1, 3) = zm
End Sub
しかし
(1)倍率減少のボタンも必要でしょう
(2)倍率が上がると画面からボタンが消えて、使い難い
です。
と言うことで総合的にみて現実的ではないですね。
ありがとうございます。
(2)だけが、どうしても実行できません。
(3)と(1)は出来ました。Static変数というものを知らないので、(1)が単純でいいですね。セルに入れてしまうというのは気が付きませんでした。
ただ、両方とも、+25ならいけるのですが、*2では駄目なようです。なぜんでしょう。
画面からボタンが消えてしまうのは、問題ですね。拡大した後に、毎回ボタンだけ縮小・位置修正しなければならないという、致命的な構成ミスです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAについて教えてください 4 2022/11/10 12:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
風俗店へ行く前のご飯
-
EXCELで式からグラフを描くには?
-
血液検査の結果が悪くefgrの値...
-
検便についてです。 便は取れた...
-
VLOOKUP関数を使用時、検索する...
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
2つの数値のうち、数値が小さい...
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
納豆食べた後の尿の納豆臭は何故?
-
ExcelのVBAでフォームが表示さ...
-
精子に血が・・・
-
エクセルのラベルの値(文字列...
-
小数点以下を繰り上げたものを...
-
エクセルでエラーが出て困って...
-
最近、飲酒すると手のひらが真...
-
エクセルでθを求めたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報