[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『拡張子を変更したらエラーが起きる』(あみ)
プログラミングの知識はほぼ無いと思ってください。
xlsmの拡張子のファイルでVBAを書いていましたがテンプレート形式のxltmで作り直そうとしましたが、xltmの拡張子だとうまく動きませんでした。
やり方としては下記になります。
・標準フォームに全てコードを書いていたのでそちらをエクスポート
・テンプレート形式のxltmを新規で作成しインポート
・コード内でFileSystemObjectのオブジェクトを使用しているためツールの参照設定から『Microsoft Scripting Runtime』のチェックを付けました。
・実行すると『vba ユーザー定義型は定義されていません』と表示されました。
・(蛇足でいらない情報かもしれないです)もともとコードを入力しており正常に動いていたxlsmの拡張子のファイルの参照先のチェックとテンプレート形式のxltmの参照先のチェックを比較すると、テンプレート側のxltmの方でチェックが付いていない部分がありましたのでチェックを付けて実行しみたらツリービューは表示されました。しかしUpdateButtonを実行すると『Set TargetNode = TreeView.Nodes.Add(, , , TargetFolder)』で型が一致しないとエラーが起きました。
コードは下記になります。
文章を書くのが下手で理解に申し訳ありませんが分かる方いらっしゃいましたら回答をよろしくお願いいたします。
Option Explicit
Private Sub UpdateButton_Click()
Dim Fso As FileSystemObject Dim TargetFolder As Folder Dim TargetNode As Node Set Fso = New FileSystemObject
TreeView.Nodes.Clear '指定のフォルダー名を取得 Set TargetFolder = Fso.GetFolder("C:\Users\Tanaka\Desktop\フォルダ") '指定フォルダーのフルパスを取得 Set TargetNode = TreeView.Nodes.Add(, , , TargetFolder) '指定フォルダー内のファイル及びサブフォルダーを取得 Call sFolderSearch(TreeView, TargetNode, TargetFolder) Set Fso = Nothing
End Sub
Private Sub sFolderSearch(ByVal MyTreeView As TreeView, _
ByVal MyNode As Node, ByVal MyFolder As Folder) Dim mySubFolder As Folder Dim myFile As File Dim ChildNode As Node Dim filenode As Node 'サブフォルダーを取得 For Each mySubFolder In MyFolder.SubFolders 'フォルダーをツリー表示 Set ChildNode = MyTreeView.Nodes.Add(MyNode, tvwChild, , mySubFolder.Name) 'サブフォルダーがある場合再帰的に繰り返す Call sFolderSearch(MyTreeView, ChildNode, mySubFolder) Next mySubFolder '現在のフォルダー内のファイルを取得 For Each myFile In MyFolder.Files 'ファイルをツリー表示 Set filenode = MyTreeView.Nodes.Add(MyNode, tvwChild, , myFile.Name) filenode.BackColor = RGB(255, 255, 0) Next myFile End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
(マナ) 2019/09/05(木) 19:52
Dim Fso As Object Dim tv As Object
Set Fso = CreateObject("Scripting.FileSystemObject") Set tv = UserForm1.Controls.Add("MSComctlLib.TreeCtrl")
(マナ) 2019/09/05(木) 20:45
Option Explicit
Dim tv As Object
Private Sub UserForm_Initialize()
Set tv = UserForm1.Controls.Add("MSComctlLib.TreeCtrl")
tv.Top = 10 tv.Left = 10 tv.Width = 200 tv.Height = 400
End Sub
Private Sub CommandButton1_Click() Dim Fso As Object Dim TargetFolder As Object Dim TargetNode As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
tv.Nodes.Clear '指定のフォルダー名を取得 Set TargetFolder = Fso.GetFolder("C:\Users\Tanaka\Desktop\フォルダ") '指定フォルダーのフルパスを取得 Set TargetNode = tv.Nodes.Add(, , , TargetFolder) '指定フォルダー内のファイル及びサブフォルダーを取得 Call sFolderSearch(tv, TargetNode, TargetFolder) Set Fso = Nothing End Sub ' Private Sub sFolderSearch(ByVal MyTreeView As Object, _ ByVal MyNode As Object, ByVal MyFolder As Object) Dim mySubFolder As Object Dim myFile As Object Dim ChildNode As Object Dim filenode As Object Const tvwChild = 4 'サブフォルダーを取得 For Each mySubFolder In MyFolder.SubFolders 'フォルダーをツリー表示 Set ChildNode = MyTreeView.Nodes.Add(MyNode, tvwChild, , mySubFolder.Name) 'サブフォルダーがある場合再帰的に繰り返す Call sFolderSearch(MyTreeView, ChildNode, mySubFolder) Next mySubFolder '現在のフォルダー内のファイルを取得 For Each myFile In MyFolder.Files 'ファイルをツリー表示 Set filenode = MyTreeView.Nodes.Add(MyNode, tvwChild, , myFile.Name) filenode.BackColor = RGB(255, 255, 0) Next myFile
End Sub
(マナ) 2019/09/05(木) 20:58
>実行すると『vba ユーザー定義型は定義されていません』と表示されました。
これは
>Dim TargetNode As Node
ここで出るのでは?
TreeViewコントロールを追加すると、参照設定が自動的に増えますが 新規ブックにモジュールをインポートしただけでは、参照設定が追加されないのが原因だと思います (今回はFSOの問題ではないと思います)
テンプレートの作成の仕方が まずいと思いますので
>・標準フォームに全てコードを書いていたのでそちらをエクスポート >・テンプレート形式のxltmを新規で作成しインポート
ではなくて
正常に動いているxlsmファイルをテンプレート形式で保存するだけでいいと思います 参照設定もそのままですし・・
(渡辺ひかる) 2019/09/06(金) 12:33
<渡辺ひかるさん>
エラーが起きる所に関しては私が書かせていただいた部分で起きていると思います。見方が違い実際には指摘を頂いた部分かもしれませんが!
動いているExelからテンプレート保存で正常に動きました・・・
ありがとうございます!
(あみ) 2019/09/09(月) 17:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.