メニュー追加の方法

このQ&Aのポイント
  • メニュー追加の方法について調べています。Windows2000とVB6SP6環境での方法を探していますが、過去ログでは異なる方法が見つかりました。現在、メニューは作成しており、構成はmenu + sub(0) + subsub(0)です。しかし、subsub()が不特定のインデックス数で最大100まで変動するため、画面に入りきらなくなっています。sub()を使用してsubsub()を10個ずつに区切ろうと試みましたが、sub(0)以下のメニューしか追加されません。loadで増やしたメニューのさらに下にloadでメニューを増やすことはできないでしょうか?APIを使用して作成するか、最初からメニューを作成するべきでしょうか?ご意見をいただけると助かります。
  • メニュー追加の方法を調べていますが、Windows2000とVB6SP6環境での方法を見つけることができませんでした。現在、メニューは作成しており、構成はmenu + sub(0) + subsub(0)です。subsub()のインデックス数は不特定で最大100まで変動しますが、それにより画面に入りきらなくなっています。sub()を使用してsubsub()を10個ずつに区切ろうとしましたが、うまくいきませんでした。増やしたメニューのさらに下にメニューを増やすことはできないのでしょうか?APIを使用してメニューを作成するか、最初から作成するべきか迷っています。助言をいただけますか?
  • メニュー追加の方法について質問です。Windows2000とVB6SP6環境でメニューの追加を試みていますが、過去ログでは異なる方法が見つかりました。現在、メニューは作成済みで、構成はmenu + sub(0) + subsub(0)です。しかし、subsub()のインデックス数は不特定で最大100まで変動するため、画面には収まりません。sub()を使用してsubsub()を10個ずつに区切ろうとしましたが、うまくいきませんでした。増やしたメニューのさらに下にloadでメニューを増やすことはできないでしょうか?APIを使用して作成するか、最初からメニューを作成すべきでしょうか?ご意見をいただけると助かります。
回答を見る
  • ベストアンサー

メニュー追加の方法

まずは環境を、Windows2000、VB6SP6です。 早速ですがメニューの追加をしたいのですが、過去ログを検索すると http://oshiete1.goo.ne.jp/kotaeru.php3?q=997423 こちらの方法が見つかったのですが、これとは少し違うのです。 あらかじめ、メニューは作成しているのですが、 下記は例ですが構成が menu + sub(0) + subsub(0) となっています。 元々はsubsub()だけだったのですが、 これはインデックス数が不特定で、最大100まで変動する予定です。 (起動時にプラグインのようなもの読み込むため変動します) menu + subsub(0)~subsub(99)とするとメニューが長すぎて画面に入りきりません。 そこで、sub()を間に入れ、subsub()を10個づつに区切ろうとしました。 変動するメニュー数が50個とした場合 for i = 1 to 5     load sub(i)     for j = 1 to 9         load subsub(i * 10 + j)     next i next i とこんな感じにしてみたのですが、実行すると、 sub(0)以下のメニューにしかsubsub()は追加されません。 load で増やしたメニューのさらに下に load でメニューを増やすことは出来ないでしょうか? やはり上記のリンク先のようにAPIで作るか、 メニューを最初から作っておくべきなのでしょうか? 分かりにくいかもしれませんがよろしくお願いします。

質問者が選んだベストアンサー

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

>APIで作るか、メニューを最初から作っておくべきなのでしょうか? その通りです。 構造的に SUB1/SUBSUB11~19 SUB2/SUBSUB21~29 SUB3/SUBSUB31~39 SUB4/SUBSUB41~49 SUB5/SUBSUB51~59 ということだと思いますが、SUB1とSUB2は配列ではありますが、別物です。 SUBSUB11とSUBSUB21は別の親にぶら下がることになるので、SUBSUB11とSUBSUB21を配列としての関係を持たせることは、できません。 さらに、コントロール配列は増やせるが、作成できないので、 SUB1/SUBSUB11 SUB2/SUBSUB21 SUB3/SUBSUB31 SUB4/SUBSUB41 SUB5/SUBSUB51 は最初に存在していなければならなく、各SUBSUBを増やす処理というだけになります。 思いのままのメニュー構造にしたいのであれば、APIを使うしかないと思われます。

ackapapa
質問者

お礼

ご回答ありがとうございます。 やはり思っていた通りですね・・・ 構造はおっしゃる通りのものです。 メニューを最初から作っておくことで解決しようかと思います。 ありがとうございました。

関連するQ&A

  • VB2010でデータグリッドビューに列追加

    VB2010でデータグリッドビューを使用したいのですが、 下記のコードを実行すると、 ※エラー1「指定された列は DataGridView コントロールに既に属しています。」がでます。 列インデックスがいるのかなと、コードを追加してみると ※エラー2「プロパティIndexはReadOnlyです」がでました。 どう直せばよいかわかるかた教えてください。 どうぞよろしくお願いします。 変数に入っているもの 系列数=2 系列名(0)=deg 系列名(1)=V 系列名(2)=P Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "データビュー" '初期化 Me.DataGridView1.Columns.Clear() '列追加 Dim i, j As Long Dim TBColumn As New DataGridViewTextBoxColumn() For i = 0 To 系列数 TBColumn.Name = 系列名(i) TBColumn.Index = i '←※エラー2 エラー後に追加してみた Me.DataGridView1.Columns.Add(TBColumn) '←※エラー1 Next i '行追加 Me.DataGridView1.RowCount = データ数 'データ追加 For j = 1 To データ数 For i = 0 To 系列数 Me.DataGridView1(系列名(i), CInt(j - 1)).Value = グラフデータ(i, j) Next i Next j '列幅設定 For i = 0 To DataGridView1.Columns.Count - 1 Me.DataGridView1.Columns(i.ToString).Width = 30 Next i End Sub End Class

  • Access 追加クエリ実行時のメッセージを表示させない方法

    いつもお世話になっております。 Accessでフォームのボタンを押すと、追加クエリを12回実行させるよう、下記のように作っています。 Private Sub 年次請求_Click() Dim i As Integer For i = 1 To 12 DoCmd.OpenQuery "請求按分4" Next i End Sub しかし、追加クエリが実行される数だけ、メッセージが表示され、非常に鬱陶しいのです。。。 追加クエリを実行する際のメッセージを、表示させない方法をご存知でしたら教えてください。

  • VB バリアント型の配列の例について

    長々と失礼します。私の使用している教科書に 「バリアント型の2次元配列」と「バリアントに2次元配列を代入」というのを組み合わると「行列i要素とする行列」たとえば 2 5 9 4 1 8 7 3 6 1 5 9 8 0 1 6を的確に表現できます。 と書いており、下のように書かれているのですが上のような配列を表示しません。どこが間違っているのでしょうか?そもそも上のように表示できるのか理解に苦しんでおります Option Base 1 Private Sub Command1_Click() Dim a(2,2) As Variant Dim c(2,2) As Integer For i = 1 To 2 For j = 1 To 2 For p = 1 To 2 For q = 1 To 2 c(p,q) = p + q + i * j Next q Next p a(i,j) Next j Next i For i = 1 To 2 For p = 1 To 2 For j = 1 To 2 For q = 1 To 2 Print a(i,j)(p,q), Next q Next j Print Next p Next i End Sub

  • 2重ループ

    下記のマクロを実行させてもB20までのセル(19回繰り返し)にしか数値を書き込んでくれません。 どうして100回繰り返さないのでしょうか? Private Sub CommandButton1_Click() For j = 1 To 10 For i = 1 To 10 Cells(i + j, 2).Value = i + j Next i Next j End Sub

  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • VBAでのマクロ実行中のオーバーフローについて

    以下のマクロ実行時にたまにオーバーフローが出てしまい マクロが止まってしまうときがあります。 毎回出るのであれば、原因を突き止めやすいのすが、 出なくなると全く出なくなりとても困っています。 もしわかる方がいらっしゃいましたら、御教授して頂けると 幸いです。 内容:データが元々10個単位であり、Sheet1に500×10、 Sheet2に500×10のデータを2次元配列に格納する。 Dim RES_CAM1(1 To 4000, 1 To 10) As Integer Dim RES_CAM2(1 To 4000, 1 To 10) As Integer Sub Macro10() ' ' Dim i, j As Integer .................................................... .................................................... Sheets("Sheet1").Select For i = 1 To 500 For j = 1 To 10 RES_CAM1(i, j) = Cells((i - 1) * 10 + j, 19) ← ☆ Next j Next i Sheets("Sheet2").Select For i = 1 To 500 For j = 1 To 10 RES_CAM2(i, j) = Cells((i - 1) * 10 + j, 19) ← ☆ Next j Next i .................................................... .................................................... End Sub 上記☆のところでオーバーフローで止まったりします。。。

  • マクロの行列の掛け算ができません

    エクセルでマクロ勉強中の初心者です。 マクロで行列A(3行4列)、行列B(4行2列)の掛け算のプログラム(下記)を作っているのですが 「インデックスが有効範囲にありません」というエラーメッセージが出てしまいます。 エクセルで関数(MMULT)で同様の計算をするときちんと計算できるのですが・・・。 どなたか教えてください。 よろしくお願いいたします。 Sub s1() ' 次元の設定 Dim A(3, 4), B(4, 2), C(3, 2) N1 = 3: N2 = 4: N3 = 3 ' データの入力 (行列AとBの設定) For I = 1 To N1: For J = 1 To N2 A(I, J) = Worksheets("s1").Cells(I, J) Next J: Next I For I = 1 To N2: For J = 1 To N3 B(I, J) = Worksheets("s1").Cells(I, J + 5) Next J: Next I ' ベクトルの内積 For I = 1 To N1 For J = 1 To N3 For K = 1 To N2 C(I, J) = C(I, J) + A(I, K) * B(K, J) Next K Next J Next I ' 結果の出力 For I = 1 To N1 For J = 1 To N3 Worksheets("s1").Cells(I + 6, J + 7) = C(I, J) Next J Next I End Sub

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • 複数シート削除の追加編集がよくわかりません

    下記コード動作するんですが1回1回クリックして削除しないといけないので、1回で完了したいんですが、追加編集がよくわかりません。 以上 よろしくお願い致します。 ------------ Sub シート2以降を削除() For i = 2 To Worksheets.Count Worksheets(i).Select ActiveWindow.SelectedSheets.Delete Next i End Sub ------------

  • 文字制限方法。

    どなたか知識ある方、教えてください。 ソートプログラムの演習をしているんですが、 どのように書いていいか悩んでます。現在の課題はtextが10個あり、sortボタンをクリックすると左から数字を小さい順に並びます、数字のみ入力可、空白でもエラーなしで(全て空白はエラー)とりあえず数字があれば10個埋めていなくても並べる、文字等はエラーを出したいです。 '配列のインデックス番号の開始に1を設定 Option Base 1 Option Explicit Private Sub cmdCLEAR_Click() '変数の宣言 Dim ans As Integer Dim i As Integer '消去する際の確認事項 ans = MsgBox("消去していいですか?", vbYesNo + vbQuestion) Select Case ans Case vbYes For i = 1 To 10 Step 1 Text(i).Text = "" Next i Case vbNo MsgBox "取り消します", vbInformation End Select End Sub Private Sub cmdSORT_Click() '変数の宣言 Dim intNum(10) As Integer Dim S As Integer Dim j As Integer Dim k As Integer Dim i As Integer '配列の整理 For i = 1 To 10 Step 1 intNum(i) = Int(Text(i).Text) Next i 'バブルソート For k = 1 To 9 Step 1 For j = 1 To 9 Step 1 If intNum(j) > intNum(j + 1) Then S = intNum(j) intNum(j) = intNum(j + 1) intNum(j + 1) = S End If Next j Next k '結果を返して表記する For i = 1 To 10 Step 1 Text(i).Text = intNum(i) Next i End Sub 現在書いたのはここまででどうしてもエラーと文字制限の方法はわからないので教えていただける方、宜しくお願いします。

専門家に質問してみよう