[[20220113092029]] 『コントロールフォームとactivexフォーム』(たんたん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コントロールフォームとactivexフォーム』(たんたん)

マクロ初心者ですが、宜しくお願い致します。

◆やりたいこと
エクセルブックの各シート(10シート以上あり)に同じ配置に用意してあるフォームボタンがあり
それを押すと任意のファイルを選ぶ。
ボタンの横のセル今回は「C4」とします。
そこに「C:\Users\sample\Desktop\sample\sampl\画像URL\dl-item-1.csv 」とフォームボタンで選んだファイル名がでる。

「C4」の最後の階層の「フォルダ」をフォームボタンを押すと開ける。
※同じフォルダに最新のダウンロードしたファイルを保存していくため、ボタンを押すとC4のフォルダが開けるのが楽です。
現在、過去スタッフが用意したものだとよく分かりませんが以前選択したフォルダが表れるのかランダムなのか毎回フォルダを選びに行く作業が面倒でした。

◆コントロールフォームとactivexフォームの使い方
いまいち理解できずコントロールフォームはマクロ一覧から選択したマクロを呼び出せるようですが、activexに使用しているコードの場合マクロ一覧がでてこずコード自体を変えないとだめ?なのか流用できず同じコードを各シートごとにコードをコピペしなければならないのでできればその作業は避けたいです。
今回したい作業をactivexフォームですと
━━━━━━━━━━
'*****************************************************************************************
'*** 「読み込み先選択」ボタンクリック時処理
'*****************************************************************************************
Private Sub cmdReadFile1_Click()

    Call setData(1, 1)
End Sub

Sub setData(kbn As Long, no As Long)
Dim i As Integer
Dim wRange As Range

Select Case kbn
Case 1
'ファイル参照ダイアログ表示
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Filters.Add "CSVファイル", "*.csv"
Select Case no
Case 1
Set wRange = Me.Range("C4")
End Select

'初期表示フォルダの設定
.InitialFileName = "C:\"
.InitialFileName = wRange.Value

If .Show = -1 Then 'ファイルダイアログ表示
' [ OK ] ボタンが押された場合
wRange.Value = .SelectedItems(1)
End If
End With

End Select
End Sub
━━━━━━━━━━

上記のコードで運用はできましたがシートが10個以上あるためコピペしていくのは非効率ではないかと思いました。

なのでフォームコントロールにしてコードを作り直す必要がありそうなのですが分かりませんでしたので、ご教授頂けますと幸いです。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 こんにちわ。。。^^
え〜と
各シートに対応したcsvファイルを選択して、何を
なさりたいのか[目的を明確に]。。。を
教えて頂くと、お手伝い出来るかもしれません。
<< _ _ >>
(隠居Z) 2022/01/13(木) 10:36

 フォームのコントロールだと、登録するマクロは、
 標準モジュールかシートジュールのPublicなSubプロシジャです
 シートをコピーしても、最初に設定した元のプロシジャが実行されます。
 
 ActiveXのコントロールは、既定ではシートのPrivateなSubプロシジャです。
 シートをコピーすると、そのシートモジュール内のプロシジャが実行されます。
 プロシジャをコピーするんじゃなくて、シートをコピーすればいいのです。
 (ただし、それでちゃんと動くようなコードになってないといけないです。)

 どっちが便利かといわれると、場合によるので、いい方を使えばいいんじゃないでしょうか 
(´・ω・`) 2022/01/13(木) 10:43

>フォームコントロールにしてコードを作り直す

こんなことでしょうか。
・コードを標準モジュールにコピーする
・「Private Sub cmdReadFile1_Click()」だとマクロ一覧にでないので、「Private」を消す
・フォームコントロールに登録する

(わからん) 2022/01/13(木) 10:51


たくさんのコメントありがとうございます。

◆わからんさん
━━━━━━━━━━
・「Private Sub cmdReadFile1_Click()」だとマクロ一覧にでないので、「Private」を消す
・フォームコントロールに登録する
━━━━━━━━━━
上記試しましてマクロ一覧ででてきましたがコンパイルエラー「Me キーワードの使用法が不正です」とでてしまいました。

◆隠居Zさん
すでにブック内に複数シートがありフォームコントロールボタンを設置しております。
フォームボタンを押すと読み込みたいファイルを選択したいのですが、選択したいファイルの
フォルダは決まっておりますので、ボタンをクリックするとそのフォルダが最初に開くようしてファイルだけ選ぶような作業がしたいです。

最初に開くフォルダはC4セルのファイル名の最後のフォルダを開くようにしたいです。
冒頭で申し上げました
例)「C:\Users\sample\Desktop\sample\sampl\画像URL\dl-item-1.csv 」
だとすると「画像URL」のフォルダが開きその中のファイルを選ぶ。
そうするとC4には選んだファイル名が表れる。

標準モジュールに上記のマクロを登録できましたら、各シートのフォームボタンにマクロを登録していこうと思っております。

また、フォームコントロールの場合下記のマクロですと対象のファイルを選択するのに最初に開くフォルダが指定されていないため違うフォルダが開くのでこちらのコードを元に上手くできないでしょうか?

━━━━━━━━━━
Sub Select_Dir2()

Dim FileA As String

With Application.FileDialog(msoFileDialogFilePicker)

    .Title = "保存フォルダを選択してください。"
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "CSVファイル", "*.csv"
    If .Show Then
     FileA = .SelectedItems(1)
    End If
End With

ActiveSheet.Range("C4").Value = FileA

End Sub
━━━━━━━━━━
(たんたん) 2022/01/13(木) 11:06


>「Me キーワードの使用法が不正です」

「Me キーワード」を使わないので、外しているかもしれませんが...

 Set wRange = Me.Range("C4") ⇒ Set wRange = Range("C4")

(わからん) 2022/01/13(木) 11:18


 こんにちわ ^^
1.各シートのボタンに一意な名前を付けて、任意の一つのマクロを
  登録[すべてのボタンに同じマクロ]
2.1.のマクロで、どのボタンから呼び出したかを、アプリケーションカーラで判定、分岐
  各シートに対応するパスをInitialFileNameに指定
3.必要な処理を記述[セルに書き込む等]
とかでは?[シートは配列変数にでも格納してループで一括でオブジェクトにしておけば指定も楽に^^;]
ご提案の、一括選択で、対応表を基に振り分けるのも有りかも^^;
<< _ _ >>
(隠居Z) 2022/01/13(木) 11:27

 https://docs.microsoft.com/ja-jp/office/vba/api/overview/library-reference/filedialog-members-office

 FileDialogの初期フォルダの指定は、
 InitialFileName プロパティで指定できます

 With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = "C:\"
    .Title = "保存フォルダを選択してください。"
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "CSVファイル", "*.csv"
    If .Show Then
     FileA = .SelectedItems(1)
    End If
 End With
(´・ω・`) 2022/01/13(木) 11:39

 >標準モジュールに上記のマクロを登録できましたら、各シートのフォームボタンにマクロを登録していこうと思っております。

 フォームコントロールを張り付ける。
 既定値では名前と表示名は「ボタン 1〜」となります。

 ボタンの名前を変更したいのならボタンを右クリックして
 数式バーの左横にある名前ボックスで変更可能です。

 ボタンの表示名を変更したいのならボタンを右クリックして
「テキストの編集」クリックして編集する。

 Private Sub cmdReadFile1_Click() 
    Call setData(1, 1)
 End Sub

 を切り取り標準モジュールに貼り付ける。(シートモジュールに記載していたら)

 Sub cmdReadFile1() 
    Call setData(1, 1)
 End Sub

 に書き換える

 ボタン 1を右クリックしてこれを登録する。

 以上フォームコントロールについてでした。
(nm) 2022/01/13(木) 11:45

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.