[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA コントロールについて』(kiss)
いつも大変お世話になっております
お手数と思いますが
ご教示頂けると幸いです
Aという名前のファイルにユーザーフォームが有りまして
コマンドボタンを配置しております
コマンドボタン6から40までは下記のようなコードが組み込まれています
Private Sub CommandButton6_Click()
Sheets(4).Select
End Sub
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Private Sub CommandButton40_Click()
Sheets(38).Select
End Sub
このコマンドボタンを押したとき
既に開かれている B というファイルの
同じくsheets(4)を選択するような事は
出来るのでしょうか??
< 使用 Excel:Excel2013、使用 OS:Windows8 >
とりあえず、コマンドボタン6は↓のような感じでいけます。 ただ、コマンドボタン6からコマンドボタン40まで規則性がありますので、 クラス等を使って簡略化できると思います。
Private Sub CommandButton6_Click() Dim mywb As Workbook Dim myws As Worksheet Dim otherwb As Workbook Dim otherws As Worksheet Dim wsnum As Integer wsnum = 4 Set mywb = ThisWorkbook Set myws = mywb.Worksheets(wsnum) mywb.Activate myws.Select Set otherwb = Workbooks("B.xlsx") Set otherws = otherwb.Worksheets(wsnum) otherwb.Activate otherws.Select Set myws = Nothing Set mywb = Nothing Set otherws = Nothing Set otherwb = Nothing End Sub (カリーニン) 2014/09/23(火) 22:34
コマンドボタンを大量に作るよりも、リストボックス等で 4〜38の数値を選択するようにしたらもっと簡単にできますが、 リストボックスやコンボボックスではだめなのでしょうか? (カリーニン) 2014/09/23(火) 22:41
#書いている間にカリーニンさんから回答が出てますね。 #カリーニンさんのコードをクラスに書けば、出来るかもしれません。
出来ると思いますけれど、35 個のボタンに全部同じコードを書くのですか? ご苦労様です。
とりあえず、たたき台の想定コードですけれど、参考になるでしょうか。 新規ブックで試してください(シートは適当に増やしておいてください)。
UserForm1 を作成し、UserForm に下記のコードを置きます。
Option Explicit Dim cmd() As Class1 Private Sub UserForm_Initialize() Dim cb As MSForms.CommandButton Me.Width = 220 Me.Height = 225 Dim r As Long, c As Long Dim n As Long For r = 0 To 6 For c = 0 To 4 ReDim Preserve cmd(n) Set cmd(n) = New Class1 Set cb = Me.Controls.Add("Forms.CommandButton.1") cb.Top = 20 + r * 25 cb.Left = 10 + c * 40 cb.Width = 35 cb.Height = 20 cb.Caption = "No." & (n + 1) Set cmd(n).cbEvent1 = cb cmd(n).Number = n + 1 n = n + 1 Next Next End Sub
クラスモジュール (Class1)を作成して、下記のコードを置きます。 Option Explicit
Public WithEvents cbEvent1 As MSForms.CommandButton Public Number As Long
Private Sub cbEvent1_click() If ActiveWorkbook.Worksheets.Count >= Number Then _ ActiveWorkbook.Worksheets(Number).Activate UserForm1.Hide End Sub
これでユーザフォームでボタンをクリックすれば、番号のシートが選択されます。 ブックを指定したい場合は、クラスモジュールに Workbooks("B.xlsx").Worksheets(Number).Activate のようなコードを追加すれば(変更すれば)、そういった動作になると思いますが、 ファイルが開いていないときどうするのか、シート数がないときどうするのか、といった チェックはした方が良いように思います。 (Mook) 2014/09/23(火) 22:48
本当に助かりました
流石 自己流 浅知恵とは違い
驚かされるばかりです
もう十倍以上勉強が必要ですね
最初からこんなになると思ってなかったんですけど
機能を増やしていたら
なんかすごくなってしまったって
感じてはいます
(kiss) 2014/09/23(火) 23:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.