AW: Thema verfehlt. 6
29.09.2016 14:15:57
Hartmut_M
Hallo,
hier ist der gesamte Code. Die Ausführung starte ich durch einen Button auf einem Tabellenblatt.
Habe jetzt folgendes festgestellt: Bei Betätigung des Buttons, bricht das Programm ab, weil sich die variable "varTabelle" nicht füllt (varTabelle = ActiveSheet.CodeName).
Jetzt das, was ich nicht verstehe. Öffne ich vorher den VBA-Editor und klicke dann auf den Button im Tabellenblatt, läuft das Makro komplett ohne Fehler durch, genauso wie im Einzelschritt mit F8.
Sub Dateiimport()
'Bestandskonto als Variable deklarieren
Dim GL$
GL = Worksheets("Deckblatt").Range("C41").Value
'Prüfen, ob csv-Datei vorhanden
Dim Pfad$
Pfad = "Y:\Desktop\Fachkontrolle\" & GL & ".csv"
If Dir(Pfad) = "" Then
MsgBox "Die CSV-Datei mit der Bestandsnummer " & GL & vbLf & "ist nicht im Ordner _
Fachkontrolle auf dem Desktop vorhanden!"
Exit Sub
End If
'Prüfen ob Tabellenblatt mit GL-Konto existiert
Dim Ws As Worksheet
For Each Ws In ActiveWorkbook.Sheets
If Ws.Name = GL Then Exit Sub
Next Ws
'Neues Tabellenblatt erzeugen mit GL-Kontonummer
ThisWorkbook.Worksheets.Add.Name = GL
'Tabellenblatt aus CSV importieren
Dim Dateiname, Tabellenblatt$
Dim Wsh As Worksheet
Dateiname = "Y:\Desktop\Fachkontrolle\" & GL & ".csv"
Tabellenblatt = GL
Set Wsh = ActiveWorkbook.Sheets(Tabellenblatt)
If Dateiname False Then
Application.ScreenUpdating = False
Workbooks.Open Filename:=Dateiname, Local:=True
ActiveSheet.UsedRange.Copy Wsh.Cells(1)
ActiveWorkbook.Close SaveChanges:=False
Application.ScreenUpdating = True
End If
Range("A1:V1").AutoFilter
'Codename der aktiven Tabelle als Variable
Dim varTabelle$
varTabelle = ActiveSheet.CodeName
'Makro in neues Tabellenblatt kopieren
Dim x As Integer
With ThisWorkbook.VBProject.VBComponents(varTabelle).CodeModule
x = .CreateEventProc("Change", "Worksheet")
.InsertLines x + 1, "Dim NR As String, VN As String"
.InsertLines x + 2, "Set Target = Application.Intersect(Target, Range(""V:V""))"
.InsertLines x + 3, "If Target Is Nothing Then Exit Sub"
.InsertLines x + 4, "If Target.Value = ""X"" or Target.Value = ""x"" Then"
.InsertLines x + 5, "SNR = Target.Offset(0, -20).Value" 'ist zu ändern wenn X nicht in _
Spalte V steht
.InsertLines x + 6, "VN = Target.Offset(0, -18).Value" 'ist zu ändern wenn X nicht in _
Spalte V steht
.InsertLines x + 7, "Sheets(""Bericht"").Select"
.InsertLines x + 8, "Sheets(""Bericht"").Range(""A5"").Activate"
.InsertLines x + 9, "10:"
.InsertLines x + 10, "If ActiveCell """" Then"
.InsertLines x + 11, "ActiveCell.Offset(1, 0).Activate"
.InsertLines x + 12, "GoTo 10"
.InsertLines x + 13, "Else"
.InsertLines x + 14, "ActiveCell.Value = SNR"
.InsertLines x + 15, "ActiveCell.Offset(0, 1).Value = VN"
.InsertLines x + 16, "ActiveCell.Offset(0, 2).Select"
.InsertLines x + 17, "End If"
.InsertLines x + 18, "End If"
End With
End Sub