まずは、サンプルコードの Sub ReadText() ... End Sub を CreateObject で書き直したサンプルを以下に示ししてみます。
Sub ReadTextCreateObject()
'[A] CreateObject で書き直したもの
'[B] Microsoft Scripting Runtime への参照設定がないと、ForReading, TristateUseDefault といった定数を使えません。
' そこで、メソッドの引数で数値を直に書いて指定しています
Sub ReadTextCreateObject()
Dim path As String
path = ThisWorkbook.path & "\fsosample\textfile1.txt"
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject") '[A]
Dim txt As Object
Set txt = fs.OpenTextFile(Filename:=path, IOMode:=1, Create:=True, Format:=-2) '[B]
' Set txt = fs.OpenTextFile(Filename:=path, IOMode:=ForReading, Create:=True, Format:=TristateUseDefault)
Debug.Print txt.ReadLine '1行目を読み込みます
Debug.Print txt.ReadLine '2行目を読み込みます
Debug.Print txt.ReadLine '3行目を読み込みます
Debug.Print txt.ReadLine '4行目を読み込みます
Debug.Print txt.ReadLine '5行目を読み込みます
txt.Close
Set txt = Nothing
Set fs = Nothing
End Sub
くうちゃんさんの投稿
(投稿ID: 5191)
今まで、いくつかライブラリの参照設定をしたままマクロブックを配布していました。
職場では全員同じofficeのバージョンを使用する決まりなので、たまたま問題が起きなかったと思いますが、officeのバージョンが新しくなったとき、急にエラーになる可能性がありそうです。
あるページで、ライブラリを参照してマクロを書いたあと、create objectに書き換えて配布するとよい、と書かれているのを見つけました。
create objectに書き換えるというのは、どのようにしたら良いでしょうか。
ライブラリの参照設定を外してset〜の一文をnewからcreate objectに置き換えれば良いでしょうか。
小川 慶一さんのコメント
(コメントID: 7346)
> create objectに書き換えるというのは、どのようにしたら良いでしょうか。
まずは、サンプルコードの Sub ReadText() ... End Sub を CreateObject で書き直したサンプルを以下に示ししてみます。
編集しようとすると分かりますが、以下の点でメンテナンス性が落ちるのであとあと面倒です。
[1] [A]の部分で引数内に書き間違え等あっても構文エラーが発生しない。
[2] 自動メンバ表示が使えない。
[3] [B]に示したように定数が使えないため、可読性が落ちる。
[2], [3] の事情から、以下に示す公式記事等を見つけて、参考にしつつ自分でちまちま実装していくことになります。
[参考]
FileSystemObject オブジェクト(CreateObjectで書くときの書き方を調べる等)
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/filesystemobject-object
OpenTextFile メソッド(定数に対応する値を探す等)
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/opentextfile-method
TextStream オブジェクト
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/textstream-object
公式記事を見つけるには、 "FileSystemObject site:docs.microsoft.com" といったキーワードで検索します。
英語ページしか見つからない場合は、記事のURL内の、 en-us という文字列を ja-jp に直します。
あるいは、"FileSystemObject メソッド site:docs.microsoft.com" 等、検索キーワードに日本語も加えて検索します。
こういう記事を見つける/読むというのは、慣れればまあ何ということはないですが、少し経験値が必要ですね。
ということで...。
正直、 CreateObject を使うというのは、あまりおすすめしたくないやり方です。
僕だったら、ライブラリの参照設定をはずした状態のマクロブックを、参照設定のやり方のマニュアルをつけて配布します。
くうちゃんさんのコメント
(コメントID: 7347)
[1][2]は覚悟していましたが、[3]の定数が使えないというのは知りませんでした。
おすすめの方法で直して回ります。
外部連携は、テキストデータとAccessのようなDBしか使わないと思い込んでいました。
WordやPowerPointndも割と簡単に動かせることを知り、目から鱗です。
10年前に知りたかった、、、
引き続き宜しくお願いします。