2017-12-06 15 views
1

Excel-VBAを初めて使用しています。 ;)Excel-VBAの新機能:実行時エラー "91":オブジェクト変数またはブロック変数が設定されていない

実際には、ユーザーフォームから選択したシートでプログラムを実行しようとしています。 プログラムは、選択したシートから新しく作成されたシートに値をインポートします。 Sheet18はシートテンプレートで、新しいシートにコピーされます。

Private Sub CommandButton1_Click() 
UserForm1.Hide 
    Dim wsUserSel As Worksheet 
    Dim ws As Worksheet 
    Dim ExFund As Variant 

    On Error Resume Next 
    Set wsUserSel = ListBox1.Value 
    Set ws = Sheets.Add(after:=Sheets(Sheets.Count)) 
    On Error GoTo 0 
     With wsUserSel 
      ExFund = .Cells(107, 4).Value 
     End With 
     Sheet18.Range("A1:K126").Copy 
     ws.Name = InputBox("Please input the name of new worksheet.", ThisWorkbook.Name) 
     ws.Activate 
     Range("A1").Select 
     ActiveSheet.Paste 
     ActiveSheet.Cells(29, 2) = ExFund 
     ActiveSheet.Cells.EntireColumn.AutoFit 
     Application.CutCopyMode = False 
End Sub 

このコードは、エラー

ファイル名を指定して実行時エラー "91" を返します:

これがコードしているオブジェクトを変数またはWithブロック変数が理由の

を設定していませんコードのこの部分:

With wsUserSel 
     ExFund = .Cells(107, 4).Value 
    End With 

私はそれをwsUserSelに直接入れて使ってみましたが、うまく動作していないようです。

私は間違っていますか?

答えて

1

あなたOn Error Resume Next文はListBox1.ValueWorksheet対象ではありませんので、ラインが失敗します

Set wsUserSel = ListBox1.Value 

を言っラインになっているエラーをマスクしています。使用するワークシートを指定するのはStringと仮定します。

On Error Resume Next 
Set wsUserSel = ListBox1.Value 
Set ws = Sheets.Add(after:=Sheets(Sheets.Count)) 
On Error GoTo 0 

する:


のでセクションが言って変更

Set wsUserSel = Worksheets(ListBox1.Value) 
Set ws = Sheets.Add(after:=Sheets(Sheets.Count)) 
+0

はあなたにYowE3kをありがとうございます。あなたの答えは上にあった! –

関連する問題