Excel VBA – wenn man mich nicht aufhält..

Eigentlich will ich doch nur die Breite eine Spalte ermitteln – wenn da nicht der Parameter wäre…

Da als Spaltenindex sowohl eine Zahl als auch eine Buchstabenkombination angegeben werden können, soll der Parameter für die Spalte vom Typ Variant sein, doch da ist viel Unheil möglich. Selbst wenn es sich dabei um einen Integer, Long oder String handelt, kann auch noch der Wert selbst falsch sein. So ist „ABC“ ein gültiger Spaltenindex, „ABBA“ aber nicht.

  1. Public Function getWidth(oWs As Worksheet, vColumn As Variant) As Double
  2. Const ciTypEmpty As Integer = 0
  3. Const ciTypNull As Integer = 1
  4. Const ciTypObject As Integer = 9
  5. Const csFunction As String = "modExcel.getWidth()"
  6. Const ciMinErrNumber As Integer = 1000
  7. Const ciTypeError As Integer = 13
  8. Const csTypeError As String = _
  9. "Der übergebene Parameter kann nicht als Spaltenindex interpretiert" & _
  10. " werden. Übergeben wurde: "
  11. Const ciErrArgumentNull As Integer = 20
  12. Const csErrArgumentNull As String = _
  13. "Statt Spaltenindex NULL übergeben."
  14. Const ciUnbekanntErr As Integer = 23
  15. Dim sFehler As String, iNummer As Long, sDescription As String
  16. Dim iTyp As Integer
  17. On Error GoTo Fehler
  18.  
  19. iTyp = VarType(vColumn)
  20.  
  21. If iTyp = ciTypEmpty Or iTyp = ciTypNull Or iTyp = ciTypObject Then _
  22. Err.Raise Number:=ciErrArgumentNull + ciMinErrNumber + vbObjectError, _
  23. Source:=csFunction, _
  24. Description:=csErrArgumentNull
  25.  
  26.  
  27. getWidth = oWs.Columns(vColumn).Width
  28.  
  29. Ende:
  30. On Error GoTo 0
  31. Exit Function
  32.  
  33. Fehler:
  34. sDescription = Err.Description
  35. iNummer = Err.Number
  36. On Error GoTo 0
  37. If iNummer = ciTypeError Then
  38. sFehler = csTypeError & CStr(vColumn)
  39. iNummer = ciTypeError + ciMinErrNumber + vbObjectError
  40. Err.Raise Number:=iNummer, Source:=csFunction, _
  41. Description:=sFehler
  42. Else
  43. sFehler = "Ein unbekannter Fehler wurde ausgelöst." & _
  44. "Womöglich war der Spaltenindex ungültig. Meldung: " & _
  45. sDescription
  46. iNummer =iNummer + ciMinErrNumber + vbObjectError
  47.  
  48. Err.Raise Number:=iNummer, Source:=csFunction, _
  49. Description:=sFehler
  50. End If
  51. GoTo Ende
  52. End Function

Der gewünschte Abgabewert wird einzig und allein in Zeile 27 ermittelt, der ganze Rest ist Fehlerbehandlung.

Bonuspunkte für jede(n), der oder die erkennt, dass der Mumpitz nicht mal wiederverwendbar ist.