• ベストアンサー

excel スクロールしても常にボタンが表示される様にしたい。

nayuta_lotの回答

  • ベストアンサー
回答No.3

こんにちは ボタンを固定したいだけなら、ANo1様の回答に私も賛同します。 ただ、VBAを勉強中ということで、どうしたもんか?ということで あれば、一例として載せますのでご参考まで。 動かない理由はANo2様が指摘している通りだと思います。 ボタン2のあるシートの時でも、Set myBtn = Sh.Shapes("ボタン 1") が実行されます。 On Error GoTo EndLineを指定しているので、エラーは表示されませんが、 実際にはエラーが発生して終了します。 試しにOn Error GoTo EndLineをコメントアウトして実行してみると わかると思います。 ---------------以下VBA 参考------------------------------ Option Explicit         'おまじない Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim myBtn  As Object Dim WinTop  As Double Dim WinLeft As Double On Error GoTo EndLine If Sh.Name = "Sheet1" Then    'Sh.Name は ActiveSheet.NameでもOK Sheet1の名称は必要に応じて変更   'MsgBox ("Sheet1の時のみ実行します。")   Set myBtn = Sh.Shapes("ボタン 1")   WinTop = ActiveWindow.VisibleRange.Top   WinLeft = ActiveWindow.VisibleRange.Left   With myBtn     .Top = WinTop + 90 '上から     .Left = WinLeft + 790 '左から(右までで全部で650ぐらい)   End With ElseIf Sh.Name = "Sheet2" Then  'Sh.Name は ActiveSheet.NameでもOK Sheet2の名称は必要に応じて変更      'MsgBox ("Sheet2の時のみ実行します。")   Set myBtn = Sh.Shapes("ボタン 2")   WinTop = ActiveWindow.VisibleRange.Top   WinLeft = ActiveWindow.VisibleRange.Left   With myBtn     .Top = WinTop + 210 '上から     .Left = WinLeft + 790 '左から(右までで全部で650ぐらい)   End With End If EndLine: End Sub Option Explicit は下記を参照 http://tryasp.winscom.co.jp/document/vbscript/586.htm If myBtn Is Nothing Then Exit Sub での判定は On Error GoTo EndLine と同じ効果なので除外しています。 とりあえずご参考まで

akito-1
質問者

お礼

ありがとうございます。 思い通りの動作を得る事ができました。

関連するQ&A

  • エクセルのウインドウをど真ん中に表示したい

    Sub Macro2() Dim i As Long Dim j As Long i = Application.UsableHeight / 20 j = Application.UsableWidth / 40 With ActiveWindow .Top = i .Left = j End With With ActiveWindow .Height = i * 18 .Width = j * 38 End With End Sub これで、エクセルのアプリケーション内にウインドウを表示させたくて、 上下左右同じ長さの空白を入れたいのですが 左側の空白が多いです。 何故均等にならないのでしょうか?

  • Excelの罫線に関するマクロ

    Excelの罫線に関するマクロ 罫線を引き、それを赤くするマクロを作ったのですが、赤罫線の下にもうひとつ罫線が表示されてしまいます。どこを削除すればよいのでしょうか。 ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub よろしくお願いします。

  • 図形をコピーするマクロ(エクセル)

    以下のマクロで、シート上にある図形(四角形 1)を、選択状態にあるセルの上に移動させることができます。 Sub test() Dim seru As Range On Error GoTo Errorline Set seru = Range(ActiveCell.Address) ActiveSheet.Shapes("四角形 1").Select With Selection.ShapeRange .Left = seru.Left .Top = seru.Top End With Errorline: End Sub 移動ではなくコピーにするには、どう変えればいいでしょうか?

  • 図形の移動をセンチの数値でマクロを実行したい

    エクセル初心者です。 以下のマクロを教えて頂きました。 セルに入力する数値は他の計算式から数値を割り出しています。 このマクロをセンチで入力して、実行する事は可能でしょうか。 その方法がありましたら、教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) With ActiveSheet.Shapes.Range(Array("Group 1")) .Top = 100 .Left = 100 .Height = ActiveSheet.Range("A2").Value .Width = ActiveSheet.Range("A3").Value End With End Sub よろしくお願いします。

  • マクロで二つの構文を繋ぐには

    いつもお世話になります。 WIN7 EXCELL2010 です。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value End Sub ThisWorkbook に上記のマクロに下記のマクロを追加したいのですが、 End Sub の ところを End If End With などに変えたのですがうまくゆきません。 御指導お願いできませんでしょうか。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myRange As Range Set myRange = Intersect(Target, Range("M3:V27")) If Not myRange Is Nothing Then Select Case Target.Value Case "" Target.Value = "○" Case "○" Target.Value = "●" Case Else Target.ClearContents End Select Cancel = True End If End Sub 宜しくお願いいします。

  • Excelのセル内にある図形を削除したいのです。

    皆様おはこんばんちわ。 セル(Ex.B2,B3,B4)をダブルクリックする度に、そのセル内にオートシェイプを描画/削除したいのです。 描画は下記(で良いのかですが)で出来たのですが、削除がどうしてもわかりません。 ------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("B2:B4")) Is Nothing Then Exit Sub With ActiveCell With ActiveSheet.Shapes.AddShape _ (msoShapeOval, .Left, .Top, .Width, .Height) .Fill.Visible = msoFalse .Line.Weight = 1.75 .Line.ForeColor.SchemeColor = 0 End With End With End Sub ------------------------------------------------------------------------- 既に図形があるセルをダブルクリックで削除するにはどの様な方法があるのでしょうか。 バージョンはExcel2007です。 皆様よろしくご教示ください。

  • ファイル共有化時のエクセルスピンボタンのコピー

    先日、質問NO.9401071にてスピンボタンのコピーについて問い合わせたものです。 おかげさまでいただいた回答を基に作成しうまくいったのですが、ファイルを共有化したところエラーメッセージが出てスピンボタンが起動しなくなりました・・・。 共有化をはずすときちんと動くので、共有化が良くないのはわかるのですが、どこかを直せばうまくいくのでしょうか。 ちなみにいただいた回答は下記になります。 「フォーカスに追随して、スピンボタンが移動する」 ように組み直しました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   ' 名前が"Spin1"なシェイプがあったら削除   For Each sh In ActiveSheet.Shapes     If sh.Name = "Spin1" Then sh.Delete   Next   ' スピンボタンを表示したいセル範囲はここで指定   ' 指定範囲の「外」なら何もしないで終了   If Intersect(Target, Range("B1:J5")) Is Nothing Then Exit Sub      With ActiveSheet.Spinners.Add(Target.Left + Target.Width, _                 Target.Top, _                 24, 48)  ' スピンボタンのサイズはここ                      ' なお、横, 縦で指定     .Name = "Spin1"  ' 名前は固定     .Value = Target.Value     .Min = 0     .Max = 30000     .SmallChange = 1     .LinkedCell = Target.Address     .Display3DShading = True   End With   Target.HorizontalAlignment = xlCenter End Sub これを該当シートのモジュールに書き込んでやればOK。 ベストアンサーの方でもそれ以外の方でも良いのでご回答いただけたら幸いです。

  • Excelの写真貼り付け(90度回転)について

    xcelに写真のサイズを自動的に変更するマクロ、(セルの大きさに合わせて)を利用しています。 このマクロに対して写真を90度角度を変更して、写真を表示させたいのですが、どのようにすればよいのでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) ActiveSheet.Unprotect Dim C As Range, cm As Range Application.ScreenUpdating = False For Each C In Selection Set cm = C.MergeArea If C.Address = cm.Item(1).Address Then If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub With Selection .Left = cm.Left .Top = cm.Top .Height = cm.Height .Width = cm.Width End With End If Next Set cm = Nothing Application.ScreenUpdating = True Range("a1").Select End Sub

  • Visual Basicがわかりません。

    Public Class Form1 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics Dim PenColor As New System.Drawing.Pen _ (System.Drawing.Color.Black) GraphicsFun.DrawRectangle(PenColor, 30, 30, 450, 300) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top + 31 Then PictureBox1.Left = PictureBox1.Left + 1 Else If PictureBox1.Top < 330 - PictureBox1.Height Then PictureBox1.Top = PictureBox1.Top + 1 Else If PictureBox1.Left > 30 Then PictureBox1.Left = PictureBox1.Left - 1 Else If PictureBox1.Top > 30 And PictureBox1.Left + 31 Then PictureBox1.Top = PictureBox1.Top - 1 End If End If End If End If End Sub End Class ピクチャーボックスを四角形の中で右周りに枠の中をボタンを押すと回るようにしたいんですけど、2回目の動作と3回目の動作がかぶってしまい、うまくいきません。4回目の解決策を教えてください。また、ボタン2を押すと反対周りにピクチャーボックスが回る、コマンドを 教えてください。

  • VB2008でPictureBoxをキーボードを使って動かしたい

    VBを始めたばかりの初心者です。 VB2008を使ってPictureBoxに取り込んだイラストをキーボードを使って自由に動かしたいと思っています。 今作ったものの問題点 1.現状、全く同時に→と↑のキーを押せば右上に動きます。  また、→キーを押してイラストが右に動いているときに、↑キーを押すと上に動きます。  これを右上に動くようにする方法が知りたいのです。 2.キーを押し続けてイラストを動かし続けようとすると、一回動いて止まってから動き続けるという風になってしまいます。  これを止まらずに動くようにしたいのです。 ちなみにこれ↓が今のソースコードです。 Public Class Form1 Private Sub form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Up Then PictureBox1.Top = PictureBox1.Top - 10 End If End Sub Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Down Then PictureBox1.Top = PictureBox1.Top + 10 End If End Sub Private Sub form1_KeyLeft(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Left Then PictureBox1.Left = PictureBox1.Left - 10 End If End Sub Private Sub form1_KeyRight(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Right Then PictureBox1.Left = PictureBox1.Left + 10 End If End Sub End Class これ↑を実行する場合は、デザインにPictureBoxを表示してください。PictureBoxに入れるイラストは適当なものを入れてください。 よろしくお願いします。