質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

3回答

523閲覧

異なるViewControllerからTabBarControllerへの値渡し[Swift4,Xcode8]

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2018/06/21 05:05

編集2018/06/30 08:26

前画面で入力したプロフィール情報を画面を移動した先(TabBarControllerの内の一つのView(Profile.swift))に表示したいです。
Profile_Setting.swiftのguard let profile = tab.~
*の部分を何を書けばいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ladybird

2018/06/21 06:19

「①と②のやり方がわかりません」とありますが、①と、②の途中まではできているような・・・?リストボックスを2列にする方法が分からないか、フォルダパスの取り方が分からないか、あたりでしょうか。②をもう少し分解して、分からない点を整理してみてください。(ちなみに、挙げたどちらかであれば検索で十分解決できるかと。)
ladybird

2018/06/21 06:29 編集

あ、失礼、「フォーム上に」がポイントなんですね。それは自前でゴリゴリ作るくらいしかないんじゃないかなぁ・・・。なぜ普通のダイアログじゃダメなのかを記載していただければ、別なアプローチの回答は出てくるかもしれません。
guest

回答3

0

VBA - VBA ツリービューからファイル印刷(132027)|teratail

上記の質問で希望に沿う回答がなかったので質問しなおしたのですね。
上記ではツリービュー以外の方法がいくつか提案されていたが、それでは満足できなかったということですね。

CheckBox付きTreeViewのTips紹介
にあるようなCheckBox付きTreeViewを使えばどうでしょう。このリンク先はC#ですが、VBAでも可能です。

かなりのスキルが必要になりますが、下記等を参考にチャレンジしてみてください。
Office TANAKA - Excel VBA Tips[TreeViewコントロールの使い方]

リストボックスの2列表示については、下記をご参考に。
Office TANAKA - Excel VBA Tips[複数列のリストボックス]

ツリービューで作成してみた

将来使うことがあるかもしれないので、ツリービューの勉強がてら作成してみました。

イメージ説明

ユーザーフォーム上にツリービュー(TreeView1)を配置します。
配置の仕方は上記の Office TANAKA のリンク先を参考にしてください。
他に下記のコントロールを配置します。
イメージリストと連携させてアイコンも表示できるようだが、私の環境ではエラーが出てアイコンが登録できなかったのでアイコンはなしです。

コマンドボタン
cmdBookPrint 選択したブックの印刷
cmdSelectFolder 親フォルダの選択

テキストボックス
txtRootFolder 親フォルダのパス格納用

ユーザーフォームのモジュール

vba

1Option Explicit 2 3Private Sub cmdBookPrint_Click() 4 Dim n As Node 5 For Each n In TreeView1.Nodes 6 If n.Checked And n.Children = 0 Then 7 Debug.Print n.FullPath 8 End If 9 Next 10End Sub 11 12Private Sub cmdSelectFolder_Click() 13 With Application.FileDialog(msoFileDialogFolderPicker) 14 .InitialFileName = txtRootFolder.Value 15 .AllowMultiSelect = False 16 .Title = "親フォルダの選択" 17 If .Show Then txtRootFolder.Value = .SelectedItems(1) 18 End With 19 TreeView1.Nodes.Clear 20 InitFileTreeView 21End Sub 22 23Private Sub UserForm_Initialize() 24 txtRootFolder.Value = "C:\PFolder" 25 With TreeView1 26 .CheckBoxes = True 27 .Indentation = 14 ''インデントの幅 28 .LabelEdit = tvwManual ''ラベル編集の許可 29 .BorderStyle = ccNone ''線の種類 30 .HideSelection = False ''非アクティブ時の選択解除 31 .LineStyle = tvwRootLines ''ルート(最上位)線の表示 32 End With 33 34 InitFileTreeView 35End Sub 36 37Sub InitFileTreeView() 38 Dim objFSO As FileSystemObject 39 Dim strDir As String 40 Dim i As Long 41 42 strDir = txtRootFolder.Value 43 'FileSystemObjectのインスタンスの生成 44 Set objFSO = New FileSystemObject 45 'フォルダの存在確認 46 If Not objFSO.FolderExists(strDir) Then 47 MsgBox ("指定のフォルダは存在しません") 48 Exit Sub 49 End If 50 '親フォルダーの登録、展開 51 TreeView1.Nodes.Add(Key:="n0", Text:=strDir).Expanded = True 52 i = 1 'キーインデックス 53 '再帰処理モジュールのコール 54 Call GetDirFiles(objFSO.GetFolder(strDir), i, "n0") 55 'オブジェクトの解放 56 Set objFSO = Nothing 57End Sub 58 59Sub GetDirFiles(ByVal objFolder As Folder, ByRef i As Long, ByVal PKey As String) 60 Dim objFolderSub As Folder, objFile As File 61 Dim n As Node 62 'サブフォルダの取得 63 For Each objFolderSub In objFolder.SubFolders 64 i = i + 1 65 Set n = TreeView1.Nodes.Add(Relative:=PKey, Relationship:=tvwChild, _ 66 Key:="n" & i, Text:=objFolderSub.Name) 67 Call GetDirFiles(objFolderSub, i, "n" & i) 68 If n.Children = 0 Then 69 TreeView1.Nodes.Remove n.Index 70 Else 71 n.Expanded = True 72 End If 73 Next 74 'ファイルの取得 75 For Each objFile In objFolder.Files 76 With objFile 77 If .Type = "Microsoft Excel ワークシート" Then 78 i = i + 1 79 TreeView1.Nodes.Add Relative:=PKey, Relationship:=tvwChild, _ 80 Key:="n" & i, Text:=.Name 81 End If 82 End With 83 Next 84 'オブジェクトの解放 85 Set objFolderSub = Nothing 86 Set objFile = Nothing 87End Sub

投稿2018/06/21 06:41

編集2018/06/23 17:43
hatena19

総合スコア33782

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/21 07:47

hatena19さん〉 回答ありがとうございます 以前質問した複数のフォルダの複数のファイルを表示させる質問で https://teratail.com/questions/131957 ①のフォルダが固定じゃないときの場合の回答で→ 任意のフォルダから複数のファイルを選択するなら、リストボックスを2列表示にして、1列目にファイル名、2列目にフォルダーのパスを格納する。GetOpenFilenameメソッド選択したファイルをリストボックスに追加していくようにする。 という回答を頂いたのですがGetOpenFilenameメソッドでは1つのフォルダが対象で複数のフォルダに対しては対象にできませんが、フォーム上ではなくファイルを開くダイアログでリストボックスに複数のフォルダの複数のファイルを表示させることは可能ですか? よろしくお願い致します
退会済みユーザー

退会済みユーザー

2018/06/21 08:01

hatena19さん〉 すみません質問を変えます。 以前質問した https://teratail.com/questions/131198 質問した時のコードでリストボックスないファイルの印刷はできますでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/21 09:07 編集

以前質問したコードに下記のコードを付けてリストボックス内のファイルを印刷しようとしたのですが フォルダが違うファイルがあるとエラーになってしまいました。 https://teratail.com/questions/131198 Private Sub btn_Cilck() dim wb As Variant dim Fn As Variant,i As Long with Me.BookInput For i = 0 To .ListCount -1 Set wb = Workbooks.Open(.List(i,0)) wb.PrintOut wb.Close Next End With Application.ScreenUpdating = True End Sub
hatena19

2018/06/23 17:21 編集

今までの回答やほかの方の回答で十分ヒントは出ていると思います。 この質問のコード(以前私が回答したもの)の btn_FileOpen_Click で、 .Clear(リストボックスのクリア)を削除して、 For Each の部分を、ttyp03 さんの回答のものに置き換えて、 Me.lblPath.Caption = .List(0, 1)を削除すれば、 ファイルダイアログで選択したファイル名とパスがリストボックスに追加されていきます。 印刷ボタンでワークブックを開く部分のコードは、 Set wb = Workbooks.Open(.List(i,1) & .List(i,0)) というようにパスとファイル名を & で結合すればいいでしょう。 あとは「リストのクリア」ボタンを追加して、リストボックスをクリア出来るようにすればいいでしょう。
退会済みユーザー

退会済みユーザー

2018/06/22 02:35

hatena19さん〉 回答ありがとうございます ファイルのリスト表示、印刷、リスト削除 できることができました。 また質問があるのですが… 'カレントディレクトリを指定 ChDrive "C" ChDir "C:\test" 上記のカレントディレクトリを指定仕方で サーバー(ネットワーク)のフォルダをカレントディレクトリとして指定することはできますか? パス→¥¥◯◯¥■■¥△△¥~ よろしくお願い致します
hatena19

2018/06/22 03:39

「chdir ネットワークパス」をキーワードでネット検索すればすぐに見つかりますよ。 ここで質問して回答をまっているより解決が早いと思います。
退会済みユーザー

退会済みユーザー

2018/06/22 05:35 編集

hatena19さん〉 下記を参考にしてカレントディレクトリをネットワークにしようとしたのですが、カレントディレクトリがローカルのままになってしまいました。 https://excwlvba.blogspot.com/2013/07/blog-post_24.html?m=1 Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long Sub S2_ChDir() '変更後パスFilePathの宣言 Dim FilePath As String '変更するファイルパスの指定 FilePath = "¥¥◯◯¥■■¥△△~" '変更の実行 Call SetCurrentDirectory(FilePath) End Sub
hatena19

2018/06/22 09:11 編集

当方の環境では問題なくネットワークのフォルダーがカレントになりましたよ。 Private Sub btn_FileOpen_Click()     Dim OpenFileName As Variant, Target As Variant     'カレントディレクトリを指定     Call SetCurrentDirectory("\Server\myFolder")     OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls?", _                                                MultiSelect:=True)
guest

0

①ユーザーフォーム上にファイルを開くダイアログ、もしくはエクスプローラのような画面を表示

もしくはって言っててダイアログのは実現できているのでいいですよね。
もしフォーム上でエクスプローラー風の画面を作りたいなら、TreeViewコントロールなんかで実現できると思います。
TreeView自体は汎用的なものなので、自力でファイルを取得してツリーを構築する必要があります。
そこまでする必要があって自力でできなさそうなら改めて質問をあげてください。

パス名の取得は既にラベルに設定しているのでわからないわけではないですよね。
よってリストボックスの使い方がわからない、ということでよろしいでしょうか。
With内のみ抜粋ですが、こんな感じにすればよいかと思います。

VBA

1 With Me.BookInput 2 .Clear 3 'リストボックスにファイル名を表示 4 For Each Target In OpenFileName 5 Filename = Dir(Target) 6 Pathname = Replace(Target, Filename, "") 7 .AddItem "" 8 .List(BookInput.ListCount - 1, 0) = Filename 9 .List(BookInput.ListCount - 1, 1) = Pathname 10 Next Target 11 'ファイルのあるフォルダーのパスをラベルに表示 12 Me.lblPath.Caption = .List(0, 1) 13 End With

ただこれって意味あります?
ファイル選択ダイアログで取得できるファイルは、同じフォルダが対象なので、全部の行に同じパスが設定されますし、ラベルにもパスが設定されます。
何がしたいのか要件を見直してみてください。

追記
リストボックスのColumnCountプロパティは2にしておいてください。

投稿2018/06/21 06:31

編集2018/06/21 06:42
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「vba ファイル選択ダイアログ」でぐぐってみればどうでしょう

投稿2018/06/21 06:08

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/21 06:17

y_waiwaiさん 回答ありがとうございます ファイル選択ダイアログでファイルの選択はできますが、フォーム上にファイル選択ダイアログを表示する方法は質問する前に探してもなかったので質問致しました。
y_waiwai

2018/06/21 06:23

フォーム上にダイアログを表示するとはどういうことでしょう ふつうはフォームを表示した上にダイアログを表示しますが、そうではないということ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問