
お世話になります。
現在VBAでHTMLの書き出し用プログラムを書いています。
書き出したHTMLをUTF-8に変換するため、
■UTF-8ファイル作成 for VBA
http://www.vector.co.jp/soft/dl/winnt/prog/se320 …
のクラスモジュールを利用させていただいております。
Sub testAで定義した内容を書き出すために、
Sub createTestでtestA fNum(i)とした場合、
「ByRef引数の型が一致しません」と怒られてしまいます…。
単数の生成であれば、testA f1で生成可能なのですが、
生成ファイルが複数あり、配列に格納して処理したいのです。
どなたかお力をお貸しください。
プログラムの知識はほぼ素人レベルですorz
宜しくお願いします。
▼コード
Option Explicit
Public Sub createTest()
Dim fNum As Variant
Dim f1 As New TextFile, f2 As New TextFile, f3 As New TextFile, f4 As New TextFile, f5 As New TextFile, f6 As New TextFile
Dim f7 As New TextFile, f8 As New TextFile, f9 As New TextFile, f10 As New TextFile, f11 As New TextFile, f12 As New TextFile
Dim f13 As New TextFile, f14 As New TextFile, f15 As New TextFile, f16 As New TextFile, f17 As New TextFile
Dim Header As String, BodyS_T As String, BodyS_L As String, GlNavi As String, Promo As String, Contents As String, PrNavi As String, SeNavi As String, Footer As String, BodyE As String
Dim ContentsM As String, ContentsS As String
Dim WBK As Workbook
Dim SH2 As Worksheet
Dim TplBox As Variant
Dim createCurPath As String
Dim i As Integer
Set WBK = ThisWorkbook
Set SH2 = WBK.Sheets(2)
createCurPath = ThisWorkbook.path & "\" & UserForm1.TextBox1.Value
fNum = Array(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)
'<HEADER>
Header = "Header"
'<BODY-START>
BodyS_T = "BodyS_T>"
BodyS_L = "BodyS_L"
'<GLOBAL NAVI>
GlNavi = "GlNavi"
'<PROMO>
Promo = "Promo"
'<CONTENTS>
Contents = "Contents"
ContentsM = "ContentsM"
ContentsS = "ContentsS"
'<PRIMRY NAVi>
PrNavi = "PrNavi"
'<SECONDARY NAVI>
SeNavi = "SeNavi"
'<FOOTER>
Footer = "Footer"
'<BODY-END>
BodyE = "BodyE"
For i = 0 To 16
If i = 0 Then
fNum(i).FileCreate createCurPath & "\index.html", "UTF-8"
ElseIf UserForm1("TextBox" & i + 1).Value <> "" Then
fNum(i).FileCreate createCurPath & "\" & UserForm1("TextBox" & i + 1).Value & "\index.html", "UTF-8"
End If
fNum(i).TextWriteLine Header
If i = 0 Then
fNum(i).TextWriteLine BodyS_T
ElseIf UserForm1("TextBox" & i + 1).Value <> "" Then
fNum(i).TextWriteLine BodyS_L
End If
TplBox = SH2.Range("C" & i + 3).Value
If TplBox <> "" Or TplBox <> "選択" Then
If InStr(TplBox, "-TA-") > 0 Then
testA fNum(i)
fNum(i).TextWriteLine Promo
fNum(i).TextWriteLine PrNavi
ElseIf InStr(TplBox, "-TB-") > 0 Then
testA fNum(i)
fNum(i).TextWriteLine "<hr />"
ElseIf InStr(TplBox, "-TC-") > 0 Then
fNum(i).TextWriteLine ContentsS
End If
End If
fNum(i).FileClose
Next i
End Sub
Public Sub testA(f As TextFile)
f.TextWriteLine "テスト1"
End Sub
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> ByRef(参照渡し)からByVal(値渡し)に変更した際に
> 出てくる問題点等ありますでしょうか。
たぶん大丈夫だと思います ・・・
ByValにした場合メモリー上で引数がコピーされてこれが渡されることのなります
このコピーは必要が無くなればVBが後片付けをしますが
後片付けがいつ行われるかは プログラム上で制御するのが不能です
これが原因でメモリーを圧迫してOutOfMemoryなどのエラーが発生する可能性はありますが
今回ぐらいの規模なら大丈夫でしょう
No.1
- 回答日時:
VBAではユーザーが型定義したオブジェクトを引数に持つプロシージャは暗黙的に ByRef(参照渡し)で行われます
Public Sub TestA( f as TextFile)
と記述した場合
Public Sub TestA(ByRef f as TextFile)
と記述したのと同じになります
このByRefでは呼び出し元と呼び出し先で型が一致している必要があります
しかしお示しのコードでは fNumはVariant型なのに対し
TestAの引数はTextFile型になっているので一致していない
といっているのでしょう
TestA側を
Public Sub TestA( ByVal f as TextFile)
といった具合に ByVal(値渡し)で上手くいかないでしょうか
redfox63様
ご回答ありがとうございます。
>TestA側を
>Public Sub TestA( ByVal f as TextFile)
上記で試したところ無事解決できました!!
本当にありがとうございました!
あと一点ご質問なのですが、
ByRef(参照渡し)からByVal(値渡し)に変更した際に
出てくる問題点等ありますでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
すみません。 VBAについてで...
-
ライン数とステップ数の違いに...
-
c言語プログラミングのプログラ...
-
プログラムの規模を表す単位「k...
-
プログラム構造の「再帰的」に...
-
基本情報技術者の擬似言語プロ...
-
ステップ数について
-
読み仮名をエンターで確定しな...
-
フリーのタイピング練習ソフト
-
MACアドレスとは何ですか?パソ...
-
パソコンでインターネット接続...
-
MOS EXCEL エキスパートに出て...
-
RedHAT系のスタック領域について
-
WINAPについて
-
WINDOWSなどのOSを構成している...
-
hdmiはパラレル?シリアル?
-
エクセルのHLOOKUP関数の検索範...
-
CiscoスイッチのVLANの設定につ...
-
キャラクタ同期でのデータ終端
-
MoveNextの処理速度は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ステップ数について
-
プログラムの規模を表す単位「k...
-
ライン数とステップ数の違いに...
-
ステップ数??
-
VB6.0で #の意味
-
STEPについて
-
ステップ数によるスケジュール
-
ステップカウントツールが作成...
-
基本情報技術者の擬似言語プロ...
-
URLの中の「?=○○」の意味は?
-
プログラムから追加したドロッ...
-
「ByRef引数の型が一致しません...
-
シェルスクリプトについて
-
prologでNの階乗の逆関数を考...
-
ドット絵のようなやつを作るに...
-
プログラムで 一番大きい を定...
-
ubuntuで デイスク/deb/loopと...
-
パソコンでインターネット接続...
-
hdmiはパラレル?シリアル?
-
VB.netでDLLを読み込んで実行す...
おすすめ情報