• 締切済み

ご教授ください。

こんにちは。 MS Office (Excel)で、下記のソースがネット上で公開されていたのですが、細かいコマンドの意味がわからないので、解説頂けないでしょうか? <以下がソースです> Sub コンボボックス作成() Dim i As Integer For i = 1 To 20 Cells(i, 1) = "リスト" & i Next ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _ DisplayAsIcon:=False, Left:=Cells(1, 4).Left, Top:=0, _ Width:=120, Height:=24).Select With Selection .ListFillRange = "A1:A20" .Object.ListRows = 20 .Object.Font.Size = 32 End With Application.CommandBars("Control Toolbox").Visible = False Range("C1").Select End Sub 出来れば1行ずつ解説頂けるとありがたいです。 宜しくお願い致します。

みんなの回答

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.1

全て教えろというのは少々乱暴ですね。 自分で調べるクセをつけないと知識としては向上しませんよ。 また、[使えれば良い]と思うならばブラックボックスのまま使うのでも良いですが・・・。 なお、以下は僕の分かる範囲で解説です。 Sub コンボボックス作成() ' "コンボボックス作成"という名前のサブルーチンを宣言。 ' サブルーチンは[End Sub]まで。 ' 引数/帰り数はない。 Dim i As Integer ' [i]という変数を宣言。 ' 変数型はInteger。 For i = 1 To 20 ' iを1~20まで1ずつ増やしながら繰り返す。 ' iが20の回が終了したら繰り返しが終わる。 ' 繰り返す範囲は[Next]まで。 Cells(i, 1) = "リスト" & i ' Cells=の意味は、セルのA1を1,1としてセル(縦,横)の内容を書き換える。 ' セルの位置がCells(i,1)→i=1~20で繰り返すので、 ' セルA1~A20までを書き換えている。 ' 書き換える内容は、先頭が ' リスト ' で、その後に1~20が順番に付く。 ' つまり、A1には[リスト1]、A2には[リスト2]...A20には[リスト20]と入る。 Next ' ここまでが繰り返し ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _ DisplayAsIcon:=False, Left:=Cells(1, 4).Left, Top:=0, _ Width:=120, Height:=24).Select ' 詳しくはわからないが、 ' コンボボックスを作成してそれを選択する。 ' 最後の方でサイズや位置も指定している。 With Selection .ListFillRange = "A1:A20" .Object.ListRows = 20 .Object.Font.Size = 32 End With ' A1~A20の内容をコンボボックスのリストに入れる ' アイテムの数は20 ' フォントサイズは32pt Application.CommandBars("Control Toolbox").Visible = False ' ツールバーの[コントロール ツールボックス]を不可視に設定。 Range("C1").Select ' セルC1を選択する。 End Sub ' ここまでがサブルーチン

sumomopapa
質問者

お礼

どうもありがとうございます。 勉強させていただきます。

関連するQ&A

  • Excel VBA comboboxへの割り当て

    下記コードにてcomboboxを任意の数作成しました。 このComboboxに Sub Sub1を割り当てたいのですが どうすればいいでしょうか、 (OnChange,Chaneはエラーでした) また、その際どのcomboboxからよばれたか引数で渡したいのですが どうすればいいでしょうか。 '---------------結果こうなるようにしたい Private Sub ComboBox1_Change() call sub1("コンボの名前") End Sub '----------combobox作成 With Worksheets("AAA").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False) .Left = X .Top = Y .Width = 100 .Height = 18 .ListFillRange = "LIST" .OnChange="sub1" ->エラーでした .Change="sub1" ->エラーでした End With

  • VBAで作成したComboboxにVBAでマクロを割り当てたい。

    下記コードでcomboboxをつくったのですが 作成されたCombobox1のComboBox1_Changeエベントに 標準モジュール内のSub cal をVBAで割り当てたいのですが可能でしょうか。 コンボボックス作成マクロ x=0 y=0 With Worksheets("Sheet1").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False) .Left = X .Top = Y .Width = 53.25 .HEIGHT = 18 .ListFillRange = "AAA" End With これで作成したコンボボックスに標準モジュール内マクロをVBAで割りあてしたい。 標準モジュール sub cal ・ ・ end sub

  • エクセルーマクローコマンドボタン表示を消す方法

    エクセルーマクローコマンドボタン表示を消す方法 下記マクロを書いて実行したところ、シートにコマンドボタンというのが付着しました。ファイルを上書きしたので、取れなくなりました。ボタンを消す操作はどうすればいいか。 Sub Macro2() ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _ , DisplayAsIcon:=False, Left:=300, Top:=200, Width:=94.5, Height:=25).Select End Sub

  • イメージコントロールに画像をセット

    イメージコントロールに画像をセットしたいのですが、下記ではうまく動きません。 どうしたらよいでしょうか。 Private Sub Workbook_Open() ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _ DisplayAsIcon:=False, Left:=137.25, Top:=20.25, Width:=270, Height:= _ 154.5).Select Worksheets("Sheet1").Image1.Picture = LoadPicture("D:\My doc\My Pictures\11.jpg") End Sub

  • VBAで任意の数のComboboxにListFillRange追加

    VBAで任意の数分Comboboxを作ります。 そのComboboxすべてのプロパティにListFillRangeを追加したいのですがうまくいきません。 お教え下さい。 コード X=0 Y=100 '------- for i=1 to mmm '<-mmmは変動 '------- '//コンボボックス作成 Worksheets("Sheet1").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _ DisplayAsIcon:=False, Left:=X, Top:=Y, Width:=53.25, HEIGHT _ :=9.75).Select Selection.ShapeRange.ScaleHeight 1.15, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleHeight 1.07, msoFalse, msoScaleFromBottomRight X=X+10 '------- next i '------- '//ここから下がエラーになる。 dim cmd as object For i = 1 To Worksheets("Sheet1").Shapes.Count cmb = ActiveSheet.Shapes(i).Name With Worksheets("Sheet1").cmb .ListFillRange = "AAA" End With Next i 環境Windows XP,Office 2003

  • コンボボックスのダウンリストの行

    フォームツールのコンボボックスを大量に作ろうと考えています。 以前にコントロールツールで作ったのですが結構重い為、今回フォームツールで作成したいのです。 その際、ドロップダウンリストの行を増やすにはどうしたらいいでしょうか? コントロールツールの時は下記コードで Object.ListRows = 20 で増やすことができたのですが、フォームツールの場合サポートしていませんとでます。 VBAで行を増やす事はできないでしょうか? 素人質問ですみません。 Sub Sheet1() Dim sh As Worksheet Set sh = Worksheets("Sheet1") For i = 1 To 100 l = sh.Cells(i, "E").Left t = sh.Cells(i, "E").Top w = sh.Cells(i, "E").Width h = sh.Cells(i, "E").Height With sh.OLEObjects.Add(ClassType:="Forms.ComboBox.1") .Left = l .Top = t .Width = w .Height = h .ListFillRange = "担当者" .Object.ListRows = 20 .LinkedCell = "E" & i .PrintObject = False End With Next i End Sub

  • オブジェクト名をVBAで指定する方法を教えてくださ

    VBAでワークシートにOLEObjectsのコマンドボタンを設置してるのですが ボタンのオブジェクト名をVBAで指定するにはどうすればいいでしょうか? Private Sub CommandButton1_Click() With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False) .Object.Name = "ボタン1" .Object.Caption = "ボタン" .Object.Font.Size = 9 .Width = ActiveCell.Width .Height = ActiveCell.Height End With End Sub を実行すると、 .Object.Name = "ボタン1" の部分で 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」というエラーになります。 他のコードは大丈夫です。 オブジェクト名をVBAで指定する方法を教えてください。 当方エクセル2003です。

  • (VBA)スピンボタンの大量コピー(相対参照)

    お世話になります。質問させていただきます。 表題件ですが、EXCELにて 「A列にコントロールツールの"スピンボタン"をリンクセルを相対参照にして縦に大量にコピー(さらに増減値をデフォルトの1から10に変更)」したいと考えています。 以下に記載したVBAコードは、こちらと同様のQ&Aサイトにて見つけてきた「A列にコントロールツールの"チェックボックス"をリンクセルを相対参照にして縦に大量にコピー」するコードです。 先ずは参考までにご確認ください。 ----------------------------------------------------------------- Sub Checkbox連続作成() Dim myChk As Object Dim i As Long Dim Sakuseisuu As Long Dim StartCell As Range '--------↓ここを変更--------- Sakuseisuu = 20 'チェックボックスの作成数 Set StartCell = Range("A1") 'スタートする位置 '--------↑ここを変更--------- For i = 0 To Sakuseisuu - 1 With StartCell.Offset(i) Set myChk = ActiveSheet _ .OLEObjects.Add(classtype:="Forms.CheckBox.1", _ Link:=False, DisplayAsIcon:=False, _ Left:=.Left, Top:=.Top, _ Width:=.Width, Height:=.Height) End With With myChk .LinkedCell = StartCell.Offset(i, 1).Address .Object.Caption = "" .Object.Value = False End With Next End Sub ------------------------------------------------------------------ 上記コードを参考に、「A列にコントロールツールの"スピンボタン"をリンクセルを相対参照にして縦に大量にコピー」すべく、コードを以下のように短絡的に書き換えてみましたが、エラーとなってしまいます。 ------------------------------------------------------------------ Sub SpinButton連続作成() Dim myspin As Object Dim i As Long Dim Sakuseisuu As Long Dim StartCell As Range '--------↓ここを変更--------- Sakuseisuu = 20 'チェックボックスの作成数 Set StartCell = Range("A1") 'スタートする位置 '--------↑ここを変更--------- For i = 0 To Sakuseisuu - 1 With StartCell.Offset(i) Set myspin = ActiveSheet _ .OLEObjects.Add(classtype:="Forms.SpinButton1.", _ Link:=False, DisplayAsIcon:=False, _ Left:=.Left, Top:=.Top, _ Width:=.Width, Height:=.Height) End With With myspin .LinkedCell = StartCell.Offset(i).Address .Object.Caption = "" .Object.Value = False End With Next End Sub ------------------------------------------------------------------ お詳しいかたがおられましたら、是非ともアドバイスを頂戴したく存じます。 さらにわがままを述べると、増減値をデフォルトの1から10に変更したく考えております。 何卒よろしくお願い申し上げます。

  • ドロップダウンリストの行を増やしたいです。VBA。

    エクセル2000。VBAでコンボボックスを作成したのですが、ドロップダウンリストの表示する行の増やし方が分かりません。” 担当者”は20セル(人)指定しています。 プロパティからならListRowsを8から変更すればいいだけなので分かります。ですがVBAで実施したいです。ドロップダウンリスト表示を20に増やすにはどうしたらいいでしょうか?かなり困っていますのでどうぞ宜しくお願いします。 Selection.ListRows = 20 を足したところ、実行時エラー438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となりました。 Sub test() Dim sh As Worksheet Set sh = Worksheets("Sheet1") For i = 1 To 100 l = sh.Cells(i, "H").Left t = sh.Cells(i, "H").Top w = sh.Cells(i, "H").Width h = sh.Cells(i, "H").Height sh.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _ Left:=l, Top:=t, Width:=w, Height:=h _ ).Select Selection.ListFillRange = "担当者" Selection.LinkedCell = "H" & i Selection.PrintObject = False Next i End Sub

  • VBA オプションボタンの分類について

    http://okweb.jp/kotaeru.php3?q=1424026 でオプションボタンの表示に関して質問をした者です。 ボタンを自動作成する事はできたのですが例えば1日と15日に 休暇を取得した場合、ボタンが6つ表示されるのですが(1日分が3コ、15日分が3コ)、 この6つのボタンのうち1つしか選択ができません。 (2つ目を選択すると、前に入力していたものはチェックが外れる。) 日にちごとに、1つずつボタンを選択するようにするにはどうしたら良いのでしょうか? ちなみに、当該処理の今記述しているソースは以下のとおりです。 休暇情報の書き出しが終了するまでループで回しています。 ご教授ください。宜しくお願い致します。 '当日ボタン作成 Set objOLEToday = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=565, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLEToday.Object.Caption = "当日" '事前ボタン作成 Set objOLEBefore = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=750, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLEBefore.Object.Caption = "事前" '無断ボタン作成 Set objOLENotice = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=920, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLENotice.Object.Caption = "無断" '表示位置設定 objCnt = 405.4 + objCnt