• 締切済み

ExcelのVBA で実行エラー5

ExcelのVBA で実行時エラー5のプロシージャの呼び出し、または引数が不正です。 と出るのですが、何が悪いのでしょうか? 引っかかる部分は下のコードの「tf.Writeline (Wl)」のところです。 'On Error GoTo ErrorHandler tf.Writeline (Wl) On Error GoTo 0 Wl = "" C = C + 1 End If 回答よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

ExcelのVBA となっているが、FSOの質問でもあります。 全般にエラーの原因解明の質問として説明不足です。 うまく動く下記例をWEBで見つけたので実行してみました。うまく動きます(参考)。 パターン的にはおかしいところはないと思います。 残るは「(Wl)」の変数の子の瞬間の中身です。 簡便なのは、tf.Writeline (Wl)の行の前に Msgbox WI を直前行に入れて実行して、変数WIに何(文字列)が入っているか見てください。 (正しくは、VBAのデバッグ・トレース法に従ってやってください) また C=C+1という行が見えますが、WIの値を決定する(Cを使った)エクセルVBAのコード行があるはずです。それぐらい書かないと原因がわからない。 読者に、手がかりを与えなさすぎる。 ーー FSOのWriteLineを使った例 Sub CreateFile() Dim fso, tf Set fso = CreateObject("Scripting.FileSystemObject") Set tf = fso.CreateTextFile("C:\Users\XXX\Documents\テスト用.txt", True) '改行文字を付けて 1 行書き込みます。 tf.WriteLine ("1、2、3 をテストしています。") ' ファイルに改行文字を 3 つ書き込みます。 tf.WriteBlankLines (3) '1 行書き込みます。 tf.Write ("これはテストです。") tf.Close End Sub 例を挙げます。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 情報が少ないですね。 試しに tf.Writeline (Wl) を tf.Writeline Wl にしてみるとか。

関連するQ&A

  • VBAでエラートラップがうまくいきません。

    VBAで次のようなプロシージャを実行してみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Target.Value = " " Then          ~コード~   END IF END SUB すると複数のセルが選択されるとエラーがでます。そこで次のようにしてみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   On Error GoTo エラー処理   If Target.Value = " " Then     On Error GoTo 0           ~コード~   END IF   EXIT SUB エラー処理:   EXIT SUB END SUB ところがこれでもやっぱりIF文のところでエラーがでます。 当方初心者でなぜエラーがでるのかわかりません。 わかりやすくご教授ください。 よろしくお願いします。

  • VBA エラーハンドラーについて

    VBAについてお教えください。テキストファイルを開いて、データ処理を行おうと思っています。 下記のような処理をおこなっています。 On Error GoTo ErrorHandler 'ファイル番号を取得 FNo = FreeFile Do While Not EOF(FNo) ~~処理 ~~処理 Loop 'ファイルを閉じる Close #FNo ErrorHandler: ~~処理 end sub ループが無事に終わって、ファイルを閉じるところまで行くのは良いのですが、Close #FNoの後に処理がErrorHandler:に移ってしまいます。 特に問題が無ければ、ErrorHanderを飛び越えてend subに行くと思っていたのですが、認識が違うのでしょうか? それとも何らかのエラーが起こっているのでしょうか?

  • エクセルVBAでOn Error Resume Next

    エラーを回避するためにOn Error Resume Nextを使用することがありますが、その有効範囲について教えてください。 記述の在るプロシージャ内だけかと思っていたのですが、 どうも記述した以降、End Subのまでの間を超えて、そのプロシージャから呼び出す次のプロシージャ以降まで効いているみたいです。 ひょっとしてOn Error Goto 0で止めないと、連続しているプロシージャの最後まで有効なのでしょうか?

  • 実行時エラー92 forループが初期化されていませ

    エクセルVBAでFor Eachを使ってるのですが、 Nextの部分で 実行時エラー92 forループが初期化されていません。 というエラーになります。 On Error GoTo ERR1 For Each myObj In objIE.Document.all.tags("ul") If myObj.className = "" Then '○○の場合 Exit Sub ERR1: If Err.Number = 424 Then On Error GoTo 0 'エラーを解除 '▲▲の場合 If strカテゴリ Like "" Then Exit Sub End If End If End If Next というコードなのですが、どこかおかしいですか?

  • Access(VBA)のエラー処理

    いつもお世話になりますm(__)m Access2003(VBA)のエラー処理について教えて下さい。 いつも、エラー処理は、各private sub毎に記述しています。 例えば private sub A() on error goto ErrShori (処理など) exit sub ErrShori: (エラー処理) end sub private sub B() on error goto ErrShori (処理など) exit sub ErrShori: (エラー処理) end sub 上記のようにしていますが、エラー処理は共通で、どうにか1つの記述(?)で全てのプロシージャに対してエラー処理が出来ればと思っています。 いろいろ調べましたが見あたらず、今は一つ一つのプロシージャに「on error...」と書いています。 MDBファイル単位で「エラーがあるとこれを実行」のような共通のエラー処理を実装する事は出来ないのでしょうか? お詳しい方、是非ご教授下さい。可能であればサンプルを記述頂くと助かります。 宜しくお願い致しますm(__)m

  • VBAについて教えてください。

    過去のQNo.457545であったのですが エクセルに20080801と入力すると 自動的に平成20年8月1日と表示されるVBAについて 下記の構文で可能ということでした。 この場合、変換がされるのは A1からA10までのセルだと思うのですが 加えてC1からC10も変換させるには どこかに入力を加えることで 可能になるでしょうか? よろしくお願いします。 QNo.457545にあった構文です。 Sheet1のコードウインドウに貼り付け ↓ Const HenkanAdr = "A1:A10" 'この範囲で機能する。変更して下さい Private Sub Worksheet_Change(ByVal Target As Excel.Range)   Dim txt As String   Application.EnableEvents = False   On Error GoTo ErrorHandler   If Target.Count = 1 Then     If Not Intersect(Target, Range(HenkanAdr)) Is Nothing Then       txt = Right("00000000" & Target.Text, 8)       txt = Left(txt, 4) & "/" & Mid(txt, 5, 2) & "/" & Right(txt, 2)       Target = Format(txt, "gggee年mm月dd日")     End If   End If   Application.EnableEvents = True   Exit Sub ErrorHandler:   Application.EnableEvents = True End Sub

  • Excel VBA

    Excel2007のVBAの初心者です。 列のなかにある黄色のセルの個数をカウントしたいと思い、いろいろ探しているとVBAにおいて以下のようなコードを発見しました。  Dim c As Range,cu As Long  Application.Volatile  For Each c In a  If c.Interior.ColorIndex = 6 Then cu = cu +1  Next  color6 = cu  End Function しかし、いざやってみると 「コンパイルエラー プロシージャの外では無効です」 と表示され、うまくいきません。コードが違うのかどうかも分からないし、この警告文の意味もわかりません。 どなたか詳しい方。よろしくお願いします。

  • On Error GoTo でエラーが発生する

    Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0    Do    On Error GoTo ErrorTrap2       '-エラーの発生するコード 2    On Error GoTo 0    Loop ErrorTrap2: End Sub しかし、以下のようにSubで二つに分けるとエラーは出ません。 Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0 Call Macro2 End Sub Sub Macro2()     Do      On Error GoTo ErrorTrap2       '-エラーの発生するコード 2     On Error GoTo 0     Loop   ErrorTrap2: End Sub 「On Error GoTo 0」がうまく解除できていないのかと思い、いろいろ試してみました。 しかし、どういった理由かはわかりませんでした。 「On Error GoTo」は、Subでは、ひとつしか使えないのでしょうか。

  • エクセル2003のVBAについて

    次のコードのように、初めにクリックしたセルに、次にクリックしたセルの内容をコピーするVBAを書いたのですが、コピー先の列を、複数指定する方法がわかりません。 たとえば、C~O列(3~15)のように指定できればと思っています。 このようなことは可能でしょうか? ご教授いただけます方、よろしくお願い申し上げます。 -------------------------------------------------- Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 2 Then Exit Sub On Error Resume Next '想定しないエラーを無視 If Target.Cells(1) = "" Then If Target.Column <> 3 Then Exit Sub 'C列 コピー先 Set FrstCell = Target.Cells(1) Else If Target.Column <> 18 Then Exit Sub 'R列 コピー元 Target.Copy FrstCell.MergeArea End If On Error GoTo 0 'エラートラップ終了 End Sub

  • vba 四捨五入 について教えてください。

    VBA初心者です。お世話になりますがよろしくお願いします。 vbaでRound関数を使って四捨五入したいと考えております。 以下のコードで実行するとエラー(プロシージャの呼び出し,または引数が不正です。)が出ます。 何がなんだかわからずに困っております。 どうかご教授よろしくお願いします。 Sub 計算() Worksheets("abc").Activate Dim LastRow As Long Dim i As Integer LastRow = Worksheets("abc").Range("K65536").End(xlUp).Row For i = 6 To LastRow If Cells(i, 11) = 0 Then Cells(i, 12) = "" Else Cells(i, 12) = Round(Cells(i, 9) / Cells(i, 11),-2) End If Next End Sub

専門家に質問してみよう