2016-07-29 7 views
1

selectを使用せずにコードを書き直してスピードアップしようとしています。選択/アクティブ化を使用せずにワークシート名を別のワークシートにコピーして貼り付ける

私は3つのタブを持っており、タブを選択せず​​に、それぞれのタブに表示されるデータの隣にタブ名を貼りたいとします。

しかし、シート1のようにコードを実行すると、シート1では機能しますが、シート2では同じコードを実行しようとすると「実行時エラー」1004 ':アプリケーション定義またはオブジェクト定義のエラーです。

下記のコードをご覧ください。

Sub Create_Reports_NEWWWW() 
Application.ScreenUpdating = False 

Dim wb As Workbook 
Dim LastRow As Integer 
Dim LastColumn As Integer 

Set wb = ActiveWorkbook 

'copy sheet name to right of raw data on each sheet 
LastRow = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 
LastColumn = wb.Sheets(1).Cells(4, Columns.Count).End(xlToLeft).Column 
wb.Sheets(1).Range(Cells(4, LastColumn + 1), Cells(LastRow, LastColumn + 1)) = wb.Sheets(1).Name 

LastRow = wb.Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 
LastColumn = wb.Sheets(2).Cells(4, Columns.Count).End(xlToLeft).Column 
wb.Sheets(2).Range(Cells(4, LastColumn + 1), Cells(LastRow, LastColumn + 1)) = wb.Sheets(2).Name 

LastRow = wb.Sheets(3).Cells(Rows.Count, 1).End(xlUp).Row 
LastColumn = wb.Sheets(3).Cells(4, Columns.Count).End(xlToLeft).Column 
wb.Sheets(3).Range(Cells(4, LastColumn + 1), Cells(LastRow, LastColumn + 1)) = wb.Sheets(3).Name 

答えて

2

ここにある:

Sub Create_Reports_NEWWWW() 
Application.ScreenUpdating = False 

Dim wb As Workbook 
Dim lastRow As Integer 
Dim lastColumn As Integer 

Set wb = ActiveWorkbook 

With wb.Sheets(1) 
'copy sheet name to right of raw data on each sheet 
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
lastColumn = .Cells(4, .Columns.Count).End(xlToLeft).Column 
.Range(.Cells(4, lastColumn + 1), .Cells(lastRow, lastColumn + 1)) = .Name 
End With 

With wb.Sheets(2) 
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
lastColumn = .Cells(4, .Columns.Count).End(xlToLeft).Column 
.Range(.Cells(4, lastColumn + 1), .Cells(lastRow, lastColumn + 1)) = .Name 
End With 

With wb.Sheets(3) 
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
lastColumn = .Cells(4, .Columns.Count).End(xlToLeft).Column 
.Range(.Cells(4, lastColumn + 1), .Cells(lastRow, lastColumn + 1)) = .Name 
End With 

End Sub 

あなたが非アクティブなワークシート上Cellsを使用することはできません。あなたは使用する必要がありますwb.Sheets(2).Cells(x,y)

このコードのWithブロックは、スペースを節約するためのものです。 .Rangeまたは.Cellsとは、例えば、 wb.Sheets(1)とところでwb.Sheets(1).Cells(x,y)..

として見ることができます。それはSelectActivateの使用を停止することは非常に良いことだ、あなたもActiveWorkbookまたはActiveWorksheetを避ける必要があります。非常に信頼性が低く、ユーザーが何をするのかは決して分かりません。 ;)

HTH

+1

++あなたは正しいですか?行と列の前にDOTSを追加することもお勧めします。 –

+0

よろしくお願いいたします。それらを編集した。 –

+0

私は知っているから。 :P私はそれを説明したいですか? ;) –

関連する問題