目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
88 / 118 ツリー ←次へ | 前へ→

【112】シート上のアクティブX(ActivX)コントロールについて Jaka 05/10/11(火) 11:35 Excel[未読]
【113】シート上アクティブXコントロールのフレーム... Jaka 05/10/11(火) 11:43 Excel[未読]
【115】フレームのバックカラー、フォントカラー変更... Jaka 05/10/14(金) 10:42 Excel[未読]
【114】シート上アクティブXコントロールのタブスト... Jaka 05/10/11(火) 12:29 Excel[未読]
【116】シート上アクティブXコントロールのマルチペ... Jaka 05/10/14(金) 10:47 Excel[未読]

【112】シート上のアクティブX(ActivX)コントロ...
Excel  Jaka  - 05/10/11(火) 11:35 -

引用なし
パスワード
   シート上アクティブXコントロールについての、コードが書いてあるところが意外と少ないと思いませんか?
(ろくな検索をしてない!)
特にフレーム、タブストリップ、マルチページは....。
そこで、ちょこちょこテストして、なんとなく解った事だけを記載していきたいと思います。

尚、コードのパターンが毎回違ったり、戯けた事が記載してあったり、理解しづらくてもご了承ください。
もっと効率の良いコードや方法があると思いますので、手法の1つと思ってください。
やっぱり解らなくて途中で放り投げるかもしれませんから、誰かが続いてくれるのを期待してます。

【113】シート上アクティブXコントロールのフレー...
Excel  Jaka  - 05/10/11(火) 11:43 -

引用なし
パスワード
   その1 シート上アクティブXコントロールのフレーム(Frame)とオプションボタン

・シート上にフレームの作るには。
 コントロールツールボックスのコントロールの選択の中から、「Micrsoft Forms 2.0 Frame」を選んで作成。

 注)作ったフレーム上にアクティブXコントロールのOptionボタンを作っても、
   1つ1つのパーツでしかないためか、デザインモードを解除すると、
   なぜかボタン類が後ろに隠れてしまう。

・フレームの上にOptionボタンを作るには。
 デザインモードにしてから、
 フレームを右クリック → フレームオブジェクト → 編集
 で、出てきたツールボックスから作る。

・作ったOptionボタンのCaptionを編集するには。
 フレームを上記、編集状態にして、Optionボタン右クリック → プロパティ
 で、変更できます。

----------------------------------
○上記方法で作ったOptionボタンのCaptionを取得する。

下の1,2のコードは、フレームがあるシートモジュール、標準モジュールのどちらからでも取得できます。
シート上コマンドボタンの場合、プロシジャー名を
Private Sub CommandButton1_Click()
等に置き換えてください。

by Win98se & EXCEL2000 SR-1
  Win2000SP3 & EXCEL97 SR-2

1、
Sub 選択されたフレーム上OPTボタンのCaption取得()
  With Worksheets("Sheet1").Frame1
    For i = 0 To .Controls.Count - 1
      If .Controls(i).Value Then
        MsgBox .Controls(i).Caption
        Exit For
      End If
    Next
  End With
End Sub

2、
Sub 選択されたフレーム上OPTボタンのCaption取得OLE版()
  With Worksheets("Sheet1").OLEObjects("Frame1").Object
    For i = 0 To .Controls.Count - 1
      If .Controls(i).Value Then
        MsgBox .Controls(i).Caption
        Exit For
      End If
    Next
  End With
End Sub

【114】シート上アクティブXコントロールのタブス...
Excel  Jaka  - 05/10/11(火) 12:29 -

引用なし
パスワード
   その2 シート上アクティブXコントロールのタブストリップ(TabStrip)

・シート上にタブストリップの作るには。
 コントロールツールボックスのコントロールの選択の中から、「Micrsoft Forms 2.0 TabStrip」を選んで作成。

・タブストリップのページが複数合っても、配置した1つのコントロールを共通で使います。
 例えば、リストボックスを1つ配置した場合、ページを切り替えても、同じリストボックスが表示されたままです。

・不可解
 マクロでタブ名を変更後、シートを切り替えると、なぜかブック起動時の状態に戻ってしまう。
 マウスポインタをタブストリップ上に持っていくと、変更した状態になる。
 ブック起動後は、前回保存した時の状態のままだが....。

by Win98se & EXCEL2000 SR-1
  Win2000SP3 & EXCEL97 SR-2

----------------------------------
タブストリップ上にリストボックスを1つ作ったとして。
1,2は、シートモジュール、標準モジュールどちらからでも変更できます。

○タブ名の変更

1、
Sub タブ名変更()
  With Sheets("Sheet1").TabStrip1
    For i = 0 To .Tabs.Count - 1
      .Tabs(i).Caption = "タブ" & (i + 1)
    Next
    'ここから下、タブ名変更がすぐに反映されない為に必要。
    'PCスペック、エクセルバージョン等による?
    If Val(Application.Version) = 8 Then
      ActiveCell.Activate '97だと無いとエラーになる。
    End If         '2000で、エラーになるか未確認の為、97専用にしました。
    .Activate
  End With  
  ActiveCell.Activate
  DoEvents
End Sub

2、
Sub タブ名変更OLE版()
  With Worksheets("Sheet1").OLEObjects("TabStrip1")
    For i = 0 To .Object.Tabs.Count - 1
      .Object.Tabs(i).Caption = "OLE" & (i + 1)
    Next
    'ここから下、タブ名変更がすぐに反映されない為に必要。
    'PCスペック、エクセルバージョン等による?
    If Val(Application.Version) = 8 Then
      ActiveCell.Activate '97だと無いとエラーになる。
    End If         '2000で、エラーになるか未確認の為、97専用にしました。
    .Activate
  End With  
  ActiveCell.Activate
  DoEvents
End Sub

3、
シートモジュールに書く場合、Worksheets("Sheet1")等は、省いても可。

Private Sub CommandButton1_Click()
  TabNm = Array("Tab1", "Tab2", "Tab3")
  With TabStrip1
    For i = 0 To .Tabs.Count - 1
      .Tabs(i).Caption = TabNm(i)
    Next
    'ここから下、タブ名変更がすぐに反映されない為に必要。
    'PCスペック、エクセルバージョン等による?
    If Val(Application.Version) = 8 Then
      ActiveCell.Activate '97だと無いとエラーになる。
    End If         '2000で、エラーになるか未確認の為、97専用にしました。
    .Activate
  End With  
  ActiveCell.Activate
  DoEvents
End Sub


○タブ上リストボックスのリスト作成
 タブ切り替え時にリスト内容が変わるようにする為には、
 1つのリストボックスの内容を切り替え時に都度書き換えます。
 注)リストボックスの内容とリストボックスの高さが合わない場合、
   勝手にリストボックスサイズが、縮小されてしまうのを防ぐ為に
   ListBoxの「IntegralHeightプロパティ」を、Falseにしておいた方が良いです。

タブが3つあったとして。

Private Sub TabStrip1_Change()
  If TabStrip1.Value = 0 Then
    CelAd = "A1:A10"
  ElseIf TabStrip1.Value = 1 Then
    CelAd = "B1:B10"
  Else
    CelAd = "C1:C10"
  End If
  ListBox1.List = Range(CelAd).Value
End Sub

配列とAddItem の使用(タブは2つとして)

Private Sub TabStrip1_Change()
  Dim ListTB As Variant
  ListTB = Array("配列0", "配列1", "配列2", "配列3", "配列4", "配列5")
  Sheets("Sheet1").ListBox1.Clear
  If TabStrip1.Value = 0 Then
    Sheets("Sheet1").ListBox1.List = ListTB
    Erase ListTB
  Else
    For i = 0 To 8
      Sheets("Sheet1").ListBox1.AddItem "AddItem" & i
    Next
  End If
End Sub


○リストボックス選択項目抽出
 通常の取り出し方で良いようです。

1、
Private Sub CommandButton1_Click()
  With ListBox1
    If .ListIndex >= 0 Then
      MsgBox .List(.ListIndex)
    Else
      MsgBox "リストボックス項目が選択されてません。"
    End If
  End With
End Sub

2、OLE版
Sub リストボックス選択項目抽出OLE版()
  With Worksheets("Sheet1").OLEObjects("ListBox1").Object
     If .ListIndex >= 0 Then
      MsgBox .List(.ListIndex)
     Else
      MsgBox "リストボックス項目が選択されてません。"
     End If
  End With
End Sub

【115】フレームのバックカラー、フォントカラー変...
Excel  Jaka  - 05/10/14(金) 10:42 -

引用なし
パスワード
   フレームのバックカラー、フォントカラー変更手順
(ユーザーフォーム上と同じで、マルチページは、各ページの色を変更できないみたいでした。)

 フレームを右クリック → プロパティ を開く
 BackColor の番号(000000ff - Unknown)見たいなものを控えておき、
 これをオプションボタン等のプロパティに使います。
 フォントの色も同じように調べてください。少し面倒。

バックカラー(フレームの場合)
000000ff - Unknown デフォルト
000000ff - Unknown 赤
00000080 - Unknown ブラウン

フォントカラー(フレームの場合)
00ffffff - Unknown 白
80000012 - Button Text 黒デフォルト

【116】シート上アクティブXコントロールのマルチ...
Excel  Jaka  - 05/10/14(金) 10:47 -

引用なし
パスワード
   その3 シート上アクティブXコントロールのマルチページとリストボックス

・シート上にマルチページの作るには。
 コントロールツールボックスのコントロールの選択の中から、「Micrsoft Forms 2.0 MultiPage」を選んで作成。

・マルチページの上にリストボックスボタンを作るには。
 デザインモードにしてから、
 マルチページを右クリック → マルチページオブジェクト → 編集
 で、出てきたツールボックスから作る。
 この辺りはフレームjと同じです。

・ページの増減、タブ名の変更は、タブを右クリックすれば編集できます。

---------------------------------
マルチページのページ枚数が4枚、各ページにリストボックスがあったとして。

尚、コードの書き方に With〜End With 使ったり使わなかったり、
シートから記述してあったり無かったり、、とか、
リスト項目の作成時に、1つのFor..Nextステートメントの中に「AddItem」、「配列」、「RowSource」
などごちゃ混ぜに入れてますが、色々なパターンを紹介したいが、区分けして書くのが面倒だったので、節操無くごちゃ混ぜにし、しかもメモ書き状態のままで色々載せてみます。
全標準モジュールから、シートモジュールで使える??
余計に解りづらかったらすみません。

注).Pages(i).Controls(0)
  の場合、ページ番号やリストボックスのControls番号が一致していないとエラーになります。
  マルチページに作ったオブジェクトの種類なども注意してください。


・現在選択されているページ番号の取得
Sub 選択されているページ()
  PGNo = Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Value
  MsgBox Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(PGNo).Caption & vbLf & _
      "選択ページ " & PGNo + 1 & vbLf & _
      ".Value は、" & PGNo
End Sub


・2ページ目のリストボックスの場合
Sub リストボックスリスト作成1()
  Dim OBJ As Object
  Application.EnableEvents = False
  For Each OBJ In Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(1).Controls
   If OBJ.Name = "ListBox2" Then
     OBJ.List = Worksheets("Sheet1").Range("C1:C5").Value
     Exit For
   End If
  Next
  Application.EnableEvents = True
End Sub


・全ページ(4ページ)の場合
Sub リストボックスリスト作成2()
  'Pagesは、0から
  Dim TB() As String, TB2() As String
  For i = 0 To Sheets("Sheet1").OLEObjects("MultiPage1").Object.Pages.Count - 1
    Select Case i
      Case 0
        '.Value使用
        Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).List = Range("A1:A10").Value
      Case 1
        'AddItem
        For ii = 1 To 10
          Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).AddItem Cells(ii, 2).Value
        Next
      Case 2
        '配列使用(1次元、2次元可)
        'ReDim TB(1 To 10, 1 To 1)
        ReDim TB2(1 To 10)
        For ii = 1 To 10
          'TB(ii, 1) = Cells(ii, "C").Value
          TB2(ii) = Cells(ii, "C").Value
        Next
        Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).List = TB2
        Erase TB2
      Case 3
        'RowSource使用
        Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).RowSource = "Sheet1!A15:A20"
    End Select
  Next
End Sub


・リストボックス内容消去
Sub 全ページListBox消し()
  With Worksheets("Sheet1").OLEObjects("MultiPage1").Object
    For i = 0 To .Pages.Count - 1
      'ListBoxのIndexが、全て0ならこれで良い。
      '.Pages(i).Controls(0).Object.Clear
      For ii = 0 To .Pages(i).Controls.Count - 1
        If TypeName(.Pages(i).Controls(ii)) = "ListBox" Then
          '↓ RowSource設定されていた場合を考えて入れた。
          .Pages(i).Controls(ii).RowSource = vbNullString
          '注)Clearは、RowSourceで設定されていた場合は、エラーになる。
          .Pages(i).Controls(ii).Object.Clear
        End If
      Next
    Next
  End With
End Sub


・コンボボックスのリスト作成
Sub コンボボックスリスト作成直書き()
  '配列仕様(注)Pagesは、0から
  Dim CbTb As Variant
  CbTb = Array("Combo_01", "Combo_02", "Combo_03", "Combo_04", "Combo_05")
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Object.Value = ""
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Object.List = CbTb
  'X Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Object.FontSize = "9pt MS Pゴシック"
  Erase CbTb
  
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").Object.Value = ""
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").RowSource = "Sheet1!B14:B20"
End Sub


・コンボボックス内容の消去
Sub コンボボックスリスト消し直書き()
  '(注)Pagesは、0から、.Objectは、無くても動いた。
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Value = ""
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").RowSource = ""
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Clear

  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").Object.Value = ""
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").RowSource = ""
  Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").Object.Clear
  
  PGNo = Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Value
  MsgBox "選択ページ " & PGNo + 1 & vbLf & _
      ".Value は、" & PGNo & vbLf & _
      Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(PGNo).Caption
End Sub


・選択されたオプションボタン名の取得
Sub オプションボタン取得()
  '2Pege (注)Pagesは、0から
  Dim Flg As Boolean
  With Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2)
    For i = 0 To .Controls.Count - 1
      If TypeName(.Controls(i)) = "OptionButton" Then
        rtgh = .Controls(i).Value
        If .Controls(i).Value Then
         No = i
         Flg = True
        End If
      End If
    Next
    If Flg Then
      'i を使うなら、Forで、1プラスされるから -1する。
      MsgBox .Caption & vbLf & _
         .Controls(No).Caption
    Else
      MsgBox "OptionButtonチェック無。"
    End If
  End With
End Sub


・テキストぼっクの内容取得と消去
Sub テキストボックス()
  With Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0)
    MsgBox .Controls("TextBox1").Object.Value & vbLf & _
        "メッセージボックス閉じた後消します。"
    .Controls("TextBox1").Object.Value = ""
  End With
End Sub


全然まとまってませんが、大体こんな感じだということでお願いします。

フレーム、マルチページ上に作ったCommandButtonのコードは、わかりません。
クリックイベントも無いようですし、マクロ登録できるのかも解りませんでした。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
88 / 118 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free