2016-11-22 9 views
1

特定の条件(具体的には名前に「TUBA」を含める)ですべてのシート名をチェックするマクロを作成しようとしています。それらのシート上の範囲をファイル名としてシート名のテキストファイルにエクスポートします。エラー91が発生しています:オブジェクト変数またはブロック変数が設定されていません。デバッグ時にIf WS.name Like "TUBA*" Then行が強調表示されています。これをどうすれば解決できますか?問題のあるコードは以下のとおりです。私は以前、ほぼ同じコードで成功しましたが、Ifステートメント(下の2番目のブロックに示されています)がないので、私はこれを追加しています。変数を設定する必要がある場合は、Excel VBAエラー91、特定のシートのデータをテキストファイルにエクスポートしよう

Sub ExportTubatoText() 

Dim c As Range, r As Range 
Dim output As String 
Dim lngcount As Long 
Dim WS As Worksheet 
Dim Name As String 
Dim strFolder As String 
strFolder = GetFolder("L:TUBA\") 

'\ dialog box opens in that folder as default 
'strFolder = GetFolder("L:TUBA\") 

If strFolder <> "" Then 

    MsgBox strFolder 

End If 

For Each sh In ThisWorkbook.Worksheets 
'if worksheet has 'TUBA' in the title, then it is exported to text 
    If WS.Name Like "TUBA*" Then 
     output = "" 
     For Each r In sh.Range("F3:F200").Rows 
      For Each c In r.Cells 
      output = output & c.Value 
      Next c 
      output = output & vbNewLine 
     Next r 
     Name = sh.Name 
     Open strFolder & "\" & Name & ".txt" For Output As #1 
     Print #1, output 
     Close 
    End If 
Next 
End Sub 

成功コード:

For Each sh In ThisWorkbook.Worksheets 
    output = "" 
    For Each r In sh.Range("O2:O500").Rows 
     For Each c In r.Cells 
     output = output & c.Value 
     Next c 
     output = output & vbNewLine 
    Next r 
    Name = sh.Name 
    Open strFolder & "\" & Name & ".txt" For Output As #1 
    Print #1, output 
    Close 
Next 

答えて

6

If sh.Name Like "TUBA*" Then

またはCへ

If WS.Name Like "TUBA*" Then

を変更してみてくださいあなたのFor EachをWS in...

+2

:この行で

For Each r In sh.Range("F3:F200").Rows For Each c In r.Cells output = output & c.Value Next c output = output & vbNewLine Next r 

これに - Option Explicitはすぐにこのエラーを警告していたでしょう... – bobajob

+0

リッチ、これがあなたの問題を解決したら、それを答えにしてください。そうでない場合は、誰かが助けてくれるように応答してください。 – Rdster

+0

'output = output&c.Value'という行とタイプの不一致エラーが発生しました。私は文字列として 'output'変数を指定しましたが、これはセルに含まれている小数点で動作しますか? Rdster、ご迷惑をおかけしておりました –

1

につけてください。注:これは単なるアイデアであり、@Rdsterが最初のコードがうまくいかない理由を説明するものではありません。

あなたは1列のみ(あなたの両方のコードが行うように)あなたのコードのこの部分を置き換えることができますを使用している場合:ちょうどフォローとして

output = Join(Application.Transpose(sh.Range("F3:F200").Value), vbNewLine) 
+0

非常に有用な、ありがとうFadi。 –

+0

@ RichPrag、ようこそ。 – Fadi