Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro als Addin nicht lauffähig (Laufzeitfehler)

Makro als Addin nicht lauffähig (Laufzeitfehler)
David
Guten Tag,
ich habe mir ein kleines Makro zusammengesucht, welches mir 3 Spalten ( H I J ) an den Kopf der Mappe stellt ( A B C ), die Mappe wird dann durchsucht und aus den Wörtern der Spalte H wird dann eine neue Tabelle erstellt.
In der Arbeitsmappe befindet sich folgender Code zur Erstellung eines Addin (die Funktio isAddin habe ich auf true gesetzt):
Private Sub Workbook_Open()
'Menü erzeugen
Dim Menue As CommandBarPopup
Dim Schaltflaeche As CommandBarButton
' Menüpunkt anlegen
With Application.CommandBars("Worksheet Menu Bar")
Set Menue = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count, temporary:=True)
End With
' Unterpunkte im Menü anlegen
Menue.Caption = "&Tool-Box"                     ' Name des Menüs
Set Schaltflaeche = Menue.Controls.Add
With Schaltflaeche
.Style = msoButtonIconAndCaption    ' Format für Menüpunkt: Icon und Text
.FaceId = 1445                      ' Nummer des Icons
.Caption = "Splitten"  ' Name der Menüzeile
.OnAction = "Splitter"         ' Aktion ausführen  //// Mein Makro heißt Splitter
.BeginGroup = True                  ' Trennlinie erzeugen
End With
End Sub
Und das dazugehörige Makro (Modul) sieht wie folgt aus:
Sub Splitter()
'Precheck
Dim cell As Range
Dim lngLast As Long
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Each cell In Range("H1:H" & lngLast)
If cell.Value = "" Then
cell.Value = "#ERROR"
End If
Next
'Precheck
Dim i As Long
Dim n As Long
Dim k As Integer
Dim d As Integer
Dim ar As Variant
Dim arErg As Variant
Dim arSep As Variant
Dim Dic As Object
Dim ws As Worksheet
Dim iKS As Integer 'Kriterium-Spalte
iKS = 8
Set Dic = CreateObject("scripting.dictionary")
For i = 2 To UBound(ar)
If Len(ar(i, iKS)) Then _
Dic(ar(i, iKS)) = Dic(ar(i, iKS)) + 1
Next
arSep = Sort(Dic.keys)
For d = 0 To UBound(arSep)
ReDim arErg(1 To Dic(arSep(d)) + 1, 1 To UBound(ar, 2))
For i = 1 To UBound(ar)
If ar(i, iKS) = arSep(d) Or i = 1 Then
n = n + 1
For k = 1 To UBound(ar, 2)
arErg(n, k) = ar(i, k)
Next
End If
Next
n = 0
If IsSheetExist(arSep(d)) Then
Set ws = Worksheets(CStr(arSep(d)))
ws.Select
ws.UsedRange.Clear
Else
Set ws = Worksheets.Add(After:=Sheets(Sheets.Count))
ws.Name = arSep(d)
End If
ws.Range("A1").Resize(UBound(arErg), UBound(arErg, 2)) = arErg
ws.Range("H:J").Cut
ws.Range("A:A").Insert xlToRight
Next
End Sub
Function Sort(ar)
Dim i As Long, k As Long, h
For i = UBound(ar) To 0 Step -1
For k = 0 To i - 1
If ar(k) > ar(k + 1) Then
h = ar(k)
ar(k) = ar(k + 1)
ar(k + 1) = h
End If
Next
Next
Sort = ar
End Function
Function IsSheetExist(ByVal wsName As String) As Boolean
On Error Resume Next
IsSheetExist = Not Worksheets(wsName) Is Nothing
End Function In der ersten Mappe funktioniert es, jedoch wenn ich weitere Mappen mit dem Addin bearbeiten will sagt er mir nur:
Laufzeitfehler 13 typen unverträglich
Ich hoffe Jemand kann mir dabei behilflich sein.
Gruß
David
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro als Addin nicht lauffähig (Laufzeitfehler)
08.03.2012 13:30:38
David
PS: der Debugger liefert mir die Stelle: For i = 2 To UBound(ar)
Warum sollte das auch fktn, ...
08.03.2012 13:43:47
Luc:-?
…David,
ar hat zu diesem Zeitpkt ja noch gar keine Dimension, die du mit UBound feststellen könntest. Außerdem gehören in einem ordentl strukturierten Pgm die Dim-Anweisungen an den PgmKorpusanfang. Das ist übersichtlicher, dem Compiler/Interpreter ist's aber egal.
Ist halt so'ne Sache mit zusammengestoppelten Pgmm… ;->
Gruß Luc :-?
Anzeige
AW: Warum sollte das auch fktn, ...
08.03.2012 13:48:50
David
Ich hatte da vorher ar = Tabelle1.Range("A1").CurrentRegion noch stehen aber mit oder ohne ist ihm auch egal, habe auch versucht es als Active Sheet zu makieren, kein Erfolg
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige