dポイントプレゼントキャンペーン実施中!

ワークシート上の所定の位置に、拡大・縮小のコマンドボタンを作って、押すごと、25倍、50倍、100倍・・・(その逆)という風に表示倍率を変えたいのですが、

Dim Zm As Integer
Zm = 25

Private Sub ZoomButton_Click()
Zm = Zm * 2
ActiveWindow.Zoom = Zm
End Sub
と、こんなふうにやってみたんですが、最初値25倍のInitializeが分かりません。どうしたら良いのでしょうか?
VBAど素人なので、よろしくお願いします

A 回答 (6件)

#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
これで動作すると思います。
    • good
    • 0
この回答へのお礼

できました!
すみません、きわめて初歩的なミスで。おそらく他に出来なかったものも同じようなミスなんでしょうね。
もしよろしかったら、時間がある時で構わないのですが、DimとStaticとPublicと、違いを教えて頂けないでしょうか?
私が使っている参考書には、Dimでの定義のやり方しか載っていません。Publicは、全てのモジュールで使える変数ということでしょうか?

お礼日時:2004/06/02 13:11

#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を何回か実行してみて下さい。
    • good
    • 0
この回答へのお礼

かさねがさね、ありがとうございます。
おっしゃられる通り、もう少し自分で勉強しないとダメですね。
あまりに便利なサイトを見つけたものですから、ついつい甘えてしまいました。DimとStatic、なんとなく判ったような気がします。

お礼日時:2004/06/03 19:06

初期値を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
    • good
    • 0
この回答へのお礼

ありがとうございます。
これが一番シンプルで、素人にも大変判りやすいです。後半のものはうまくいきませんでした。
Zm=ActiveWindow.Zmという逆の式が成り立つとは思いもよりませんでした。いい勉強になりました。
マクロって面白いですね。皆さんからご意見いただきましたが、「へぇええ~」の連発です。

お礼日時:2004/06/02 09:02

標準モジュールを挿入して、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に小さく置くと良いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
何度試してみても、
WindowクラスのZoomプロパティを設定できません。
と言われてしまいます。
どうしてなのでしょう?

お礼日時:2004/06/02 08:39

「小さくなり切れば、次は大きくなり、大きくなり切れば、次は小さくなる」と


いうことですね。

こんな感じで如何でしょうか。

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
    • good
    • 0
この回答へのお礼

すみません、質問の言葉が悪かったです。
拡大→拡大→縮小→縮小という折り返しが必要なわけではないんです。両方のボタンを作るという意味でした。
ありがとうございます。

お礼日時:2004/06/02 08:58

(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)倍率が上がると画面からボタンが消えて、使い難い
です。
と言うことで総合的にみて現実的ではないですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
(2)だけが、どうしても実行できません。
(3)と(1)は出来ました。Static変数というものを知らないので、(1)が単純でいいですね。セルに入れてしまうというのは気が付きませんでした。
ただ、両方とも、+25ならいけるのですが、*2では駄目なようです。なぜんでしょう。
画面からボタンが消えてしまうのは、問題ですね。拡大した後に、毎回ボタンだけ縮小・位置修正しなければならないという、致命的な構成ミスです。

お礼日時:2004/06/02 08:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!