同じシート名で作業していて、存在する場合にのみサイズを変更したい場合は、関数を使用して、存在するかどうかを簡単に確認し、存在する場合はサイズを変更できます。
基礎
Function AutoFitSheetRange(objWorkBook As Workbook, _
strSheetName As String, _
strSheetRange As String) As Boolean
Dim sheet As Worksheet, boolSheetFound As Boolean
For Each sheet In objWorkBook.Worksheets
If sheet.Name Like strSheetName Then
boolSheetFound = True
Exit For
End If
Next
If boolSheetFound Then
objWorkBook.Sheets(strSheetName).Range(strSheetRange).AutoFit
AutoFitSheetRange= True
Else
AutoFitSheetRange= False
End If
End Function
それを使用する
次に、特定の範囲のサイズを変更する(および列として短縮する)ために、適切な方法でシートをループできます。
AutoFitSheetRange bkExampleWorkbook, "Foo", "E:G"
AutoFitSheetRange bkExampleWorkbook, "Bar", "K:M"
エラー処理を追加することを忘れないでください
エラー処理を取り除きたくはありませんが、関数がエラーを確実に処理できるようにしたいのですが、On Error Resume Nextよりもエレガントであり、望ましくない結果を引き起こす可能性があります。
'Error Handled version
Function AutoFitSheetRange(objWorkBook As Workbook, _
strSheetName As String, _
strSheetRange As String) As Boolean
On Error Goto AutoFitSheetRangeError
Dim sheet As Worksheet, boolSheetFound As Boolean
For Each sheet In objWorkBook.Worksheets
If sheet.Name Like strSheetName Then
boolSheetFound = True
Exit For
End If
Next
If boolSheetFound Then 'Resize the range!
objWorkBook.Sheets(strSheetName).Range(strSheetRange).AutoFit
AutoFitSheetRange = True
Else
AutoFitSheetRange = False
End If
Exit Function ' No error hit so exit
AutoFitSheetRangeError:
AutoFitSheetRange = False
Debug.Print Err.Message 'Print out the debug error
End Function
柔軟なエラー応答!
これにより、エラーの発生に関係なく列のサイズが変更されたかどうかを柔軟に確認できるため、将来の決定が容易になります。
If AutoFitSheetRange(bkExampleWorkbook, "Foo", "E:G") Then
MsgBox "I couldn't resize Foo! Doing nothing."
End If
If AutoFitSheetRange(bkExampleWorkbook, "Bar", "K:M") Then
'Do something here
End If
これを自分でテストする機会はありませんでしたが、どうなるか教えてください。
編集:
@brettdjのコメントを踏まえて、シートの存在を確認する機能を分離して、もう少し簡潔にするのがベストだと思いました。シートが存在することを確認するだけの場合は、この関数で十分です。
'Error Handled version
Function SheetExists(objWorkBook As Workbook, strSheetName As String) As Boolean
On Error Goto SheetExistsError
Dim sheet As Worksheet
For Each sheet In objWorkBook.Worksheets
If sheet.Name Like strSheetName Then
SheetExists = True
Exit Function
End If
Next
SheetExistsError:
SheetExists = False
Debug.Print "Couldn't find sheet " & Err.Description 'Print out the debug error
End Function