- hoehoe1234
- 628
- 2
- 0
- 0
これは生徒さんに書いて頂いたクラス図の上に私がオブジェクトをたどるルートと、パスでのショートカットのルートを追加した図になります。 pic.twitter.com/VYzw3aR39c
2021-05-25 03:00:27TextStreamはフィアルを読み書きする穴(パイプ)なんですね。パイプ自体にはつながっている先を表す情報あありません。ただ1バイトずつ読み書きできるだけのモノです。穴を通じてもとのファイルそのものへの操作(copyとか)はできないんですね。 pic.twitter.com/V9zptNLvPJ
2021-05-25 03:05:56低レイア風にいうとread関数とwrite関数(そういうのがあるとして)をラップしたオブジェクトですね。とても残念なことにこのオブジェクト、エンコーディング対応してないんですね。エンコードにUTF-8を指定したい場合おおいのではないでしょうか?
2021-05-25 03:07:50組み込み関数、ステートメントの場合はバラバラですがFSOはまとまってるので慣れれば使い勝手がよさそうですね。まずはFSO+パスでコードを書いていくのがよいかと思います。 pic.twitter.com/eeoMzFufIB
2021-05-25 03:13:04これは以前にレイメさんと検証したことですね。Filesはコレクションとはいえ、実装上、性能上の問題からでしょうか、番号では個別のFileを取得できないんですね。このためすべてのFileオブジェクトを取得するにはfor each構文を使う必要があります。 pic.twitter.com/q23eEUl2Vk
2021-05-25 03:15:22こんなふうにしてすべてのファイルを取得できます。ファイル名によるフィルタリングは指定できないのでその必要があればコードで表現する必要があります。 pic.twitter.com/cVxQ4SGNKh
2021-05-25 03:16:57同じくフォルダ群を取得する場合にはSubFoldersメソッドを使用します。どうしてFilesのようにFoldersコレクションを直接使えないのでしょうか? pic.twitter.com/V5I3BLlEEO
2021-05-25 03:19:15このような記述もあるので、Foldersコレクション直接使えてもいいような気がしますが、これはコレクションという「見せかけ」でSubFoldersプロパティでラップしてそうみせているのでしょうか? pic.twitter.com/3OTQguHqst
2021-05-25 03:20:59Moveの場合は管理情報の書き換えですので移動先に同名のフィアル、フォルダがあるとエラーになります。デバイスまたがり時の挙動などはまだ試してませんがcopy操作におきかえられるのでしょうか? pic.twitter.com/9IYfSZpo8S
2021-05-25 03:23:24このあたりの挙動は「ためしてみる」で十分だとおもいますが、VBAでのファイルに関する挙動の多くは「区切り記号を最後につけることでフォルダとみなす」場合が多いことは覚えておくとよいでしょう。dir関数でも最後に"\"があるかどうかで挙動が変わりますね。 pic.twitter.com/kvG0cx4aZ0
2021-05-25 03:26:27これは古いunixシステムのcp関数のコードの一部です。ブロックで読んでブロックで書いているだけですね。ファイルのcopyというシステムコールはありません。 pic.twitter.com/2bilVQ3eTa
2021-05-25 03:28:22これも同様のmv関数のコードの一部です。管理情報の書き換えを行っていますね。失敗したら(違うデバイス?)/bin/cpを呼び出してコピーしています。昔のunixのコードはシンプルということが分かると思います。 pic.twitter.com/8Gz0eeK0zq
2021-05-25 03:30:53事前に参照設定しておくかどうかは悩みますね。プロジェクトの規約があるなどの事情がなければ、インテリが利用できますのでFSO、辞書あたりは事前バインディングでよいと思います。 pic.twitter.com/uiKiMvhuqx
2021-05-25 03:36:15連番で大量のファイルを作る場合もVBAを作ると便利ですね。いや、シェルのほうがブレース展開もあるし、簡単なのでは?という話もあるとはおもいますが。 pic.twitter.com/uT4v936hqR
2021-05-25 03:39:13これもFSO+パスによるショートカットですね。FSOが組み込み関数のまとめ役のように振る舞い、名前空間をつくっているのがいいですね。FSOを好んで使う人が多いわけですね。いや、組み込み関数も重要だとおもますけど。 pic.twitter.com/5QKNr8EHiJ
2021-05-25 03:41:23都度宣言する方法ですね。参考書、サイトなどにはすべてを見せるためにこのように関数内でcreateobjectしていますが実際は1つでよいため、staticでFSOインスタンスを保有する形で十分だと思います。 pic.twitter.com/kNWB21mTyD
2021-05-25 03:42:56すこし冗長な書き方をしていますが、FSOを遅延バインディングする場合は、このようなプロパティ関数を1つ作っておくとよいと思います。staticオブジェクトが1つで良いように思いますが、newもできるインタフェースにしています(滝Libから) pic.twitter.com/GPfMBSBz2A
2021-05-25 03:47:55ファイルの一覧をシートに書き出すコードも簡潔に書けますね。 pic.twitter.com/gIvjoveoyU
2021-05-25 03:49:02for each構文の解説をしました。for each構文では取り出す順番はコンテナ(取り出すコレクション)側がきめます。配列、コレクションと言われるものは通常最初の要素から取り出されます。先にみたFilesコレクションのように番号で取得できない場合もあります。 pic.twitter.com/e93A7fE3PI
2021-05-25 03:51:46転記もの、集計ものをつくるポイントをまとめます。 ①レンジのフルエントな使い方をマスターする(まとめ記事をUPしています)。 ②ファイルの操作が自由にできるようになる。FSOも組み込み関数も使えるようになる。 ③アプリ全体の構成を作れるようになる(モジュールへの分割)。
2021-05-25 03:54:11④デバックができるようになる(これには多くの知識概念、経験が必要なので時間がかかります)。 ⑤機能仕様書と全体概要図を書けるようになる(自分が作りたいアプリを言語化できる) ⑥最後まで作り切るという気力。 です。ご興味のある方はDMにてお問い合わせください。 おしまい。
2021-05-25 03:56:00追加1 このサイトでは、FSOと組み込み関数との機能対照表を掲載しており、とてもわかりやすかったのでご紹介します。 239-programing.com/excel-vba/fso/…
2021-05-25 04:00:08