#2199 closed Bug (Fixed)
_ExcelSheetAddNew() abends if specified sheet already exists
| Reported by: | Spiff59 | Owned by: | water |
|---|---|---|---|
| Milestone: | 3.3.9.5 | Component: | Standard UDFs |
| Version: | 3.3.8.1 | Severity: | None |
| Keywords: | Cc: |
Description (last modified by )
The _ExcelSheetAddNew() function abnormally terminates script execution with a COM error if called specifying a sheet name that already exists within the workbook. Also, after the error, the workbook will erroneously contain a new generically named sheet ("Sheet 1", "Sheet 2", etc).
The following change adds a loop to check if the sheet is already in the workbook, and kicks out a new @error value (@error = 2) if found.
; #FUNCTION# ====================================================================================================================
; Name...........: _ExcelSheetAddNew
; Description ...: Add new sheet to workbook - optionally with a name.
; Syntax.........: _ExcelSheetAddNew($oExcel[, $sName = ""])
; Parameters ....: $oExcel - An Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
; $sName - The name of the sheet to create (default follows standard Excel new sheet convention)
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error on errors:
; |@error=1 - Specified object does not exist
; |@error=2 - Specified sheet already exists
; Author ........: SEO <locodarwin at yahoo dot com>
; Modified.......: litlmike, Spiff59
; Remarks .......: None
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _ExcelSheetAddNew($oExcel, $sName = "")
If Not IsObj($oExcel) Then Return SetError(1)
If $sName Then
Local $iTemp = $oExcel.ActiveWorkbook.Sheets.Count
For $xx = 1 To $iTemp
If $oExcel.ActiveWorkbook.Sheets($xx).Name = $sName Then
Return SetError(2)
EndIf
Next
EndIf
Local $oSheet = $oExcel.ActiveWorkBook.WorkSheets.Add().Activate()
If $sName Then $oExcel.ActiveSheet.Name = $sName
Return 1
EndFunc ;==>_ExcelSheetAddNew
Attachments (0)
Change History (6)
comment:2 by , on May 19, 2012 at 2:23:32 PM
| Resolution: | → Rejected |
|---|---|
| Status: | new → closed |
That function doesn't follow its specification regarding return values.
If you want to submit some code then either do it correctly or don't do it at all. I understand the desire to be useful but please don't do it by adding new bugs.
I'll close this as "Rejected", and I'm hoping you will report it again, only correctly next time. By correctly I mean with explanation of the bug, reproducer (where is it now?), and suggestions if you have any.
comment:3 by , on May 25, 2012 at 6:06:20 PM
Oh, the SetError() returns... shame on me.
Leaving it as rejected works for me.
comment:4 by , on Sep 30, 2012 at 1:05:23 PM
| Component: | AutoIt → Standard UDFs |
|---|---|
| Description: | modified (diff) |
| Resolution: | Rejected |
| Status: | closed → reopened |
comment:5 by , on Sep 30, 2012 at 1:09:48 PM
| Description: | modified (diff) |
|---|
comment:6 by , on Sep 30, 2012 at 6:57:37 PM
| Milestone: | → 3.3.9.5 |
|---|---|
| Owner: | set to |
| Resolution: | → Fixed |
| Status: | reopened → closed |
Fixed by revision [7352] in version: 3.3.9.5

I suppose I could have made the @error = 2 test a single-line If/Then statement, if anyone cares...