Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1156to1160
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Export ohne VBA Codes

Export ohne VBA Codes
Ronny
Hallo @all,
was gibt es schöneres als bei solchem Wetter an einem VBA-Probleme zu grübeln.
Aus diesem Grund möchte ich euch ein Freude machen und euch ein Problem anbieten. ;-)
Mit folgendenm Code möchte ich 2 Tabellenblätter (auf denen im VBAProject Codes hinterlegt sind) in eine neue Exceldatei exportieren ohne, dass in der neuen Datei diese Codes auf den Blättern liegen.
Sub Export()
Dim Pfad As String
Dim ExpNam As String
SendKeys ("%{f11}" & "%xi" & "Passwort" & "{Enter}" & "{Enter}")
Pfad = ThisWorkbook.Path
ExpNam = InputBox("Bitte geben Sie den Namen des Exports an.", "Dateiname Export")
Dim Quelle As Object
Set Quelle = ActiveWorkbook
'kopieren
With Quelle.VBProject.VBComponents("Tabelle1").CodeModule
strCodeT1 = .Lines(1, .CountOfLines)
End With
With Quelle.VBProject.VBComponents("Tabelle2").CodeModule
strCodeT2 = .Lines(1, .CountOfLines)
End With
'löschen
Dim VBA_Code As Object
With ActiveWorkbook.VBProject
For Each VBA_Code In .VBComponents
Select Case VBA_Code.Type
Case 1, 2, 3
'nix
Case 100
If VBA_Code.name = "Tabelle1" Or VBA_Code.name = "Tabelle2" Then
With VBA_Code.CodeModule
.DeleteLines 1, .CountOfLines
End With
End If
End Select
Next
End With
'Sheets Kopieren
Sheets(Array("Tabelle1", "Tabelle2")).Select
Sheets(Array("Tabelle1", "Tabelle2")).Copy
ActiveWorkbook.SaveAs Filename:=Pfad & "\" & ExpNam & ".xls"
ActiveWorkbook.Close
'einfügen
Quelle.VBProject.VBComponents("Tabelle1").CodeModule.AddFromString (strCodeT1)
Quelle.VBProject.VBComponents("Tabelle2").CodeModule.AddFromString (strCodeT2)
End Sub

Mit der Sendkeys-Anweisung möchte ich mein Projekt entsperren um den temporären Zugriff (weiter unten im Code) zu gewährleisten.
Mein Problem ist genau diese Entsperrung des Projektes. Aus irgendeinem Grund wird das zweite "Enter" nicht gesendet und der Code wird nicht weiter verarbeitet.
Über einen Lösungsansatz wäre ich sehr dankbar.
Nasse Grüße,
Ronny.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Export ohne VBA Codes
19.05.2010 12:22:29
Uppe
Hallo Ronny,
versuche es mal so:
SendKeys "%{f11}" & "%xi" & "Passwort" & "{Enter 2}", True
Gruß Uppe
AW: Export ohne VBA Codes
19.05.2010 12:49:28
Ronny
Hallo Uppe,
vielen Dank für die rasche Antort.
Leider funktioniert das auch nicht.
Das VBA-Projekteigenschaftsfenster bleibt geöffnet.
Ich muss dazu sagen, das ich das gesamte Makro aus der Symbolleiste heraus starte. Dies dürfte aber kein Problem sein,oder?
AW: Export ohne VBA Codes
19.05.2010 13:39:11
fcs
Hallo Uppe,
lösche den Code in der neu erstellten Datei. Dann ersparst du dir die Manipulationen in der Quelldatei.
Gruß
Franz
Sub Export()
Dim Pfad As String
Dim ExpNam As String
Pfad = ThisWorkbook.Path
ExpNam = InputBox("Bitte geben Sie den Namen des Exports an.", "Dateiname Export")
'Sheets Kopieren
Sheets(Array("Tabelle1", "Tabelle2")).Copy
ActiveWorkbook.SaveAs Filename:=Pfad & "\" & ExpNam & ".xls"
Call Code_loeschen(wkb:=ActiveWorkbook)
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Private Sub Code_loeschen(wkb As Workbook)
'Gesamten Code und Module in Datei wkb löschen
Dim myVBComponents As Object
On Error GoTo Fehler
' If MsgBox("Sämtlichen VBA-Code in Datei """ & wkb.Name & """ löschen?", _
vbYesNo, "VBA-Code löschen") = vbYes Then
'Sicherheits-check um nicht sich selbst zu löschen
If LCase(wkb.Name) = LCase(ThisWorkbook.Name) Or _
LCase(wkb.Name) = LCase("Personl.xls") Or _
LCase(wkb.Name) = LCase("Personal.xlsb") Then
MsgBox "In der Arbeitsmappe " & ActiveWorkbook.Name & _
" darf dieses Makro nicht ausgeführt werden!"
Exit Sub
End If
With wkb.VBProject
For Each myVBComponents In .VBComponents
Select Case myVBComponents.Type
Case 1, 2, 3
With myVBComponents.CodeModule
.DeleteLines 1, .CountOfLines
End With
.VBComponents.Remove .VBComponents(myVBComponents.Name)
Case 100
With myVBComponents.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
' End If
Fehler:
If Err.Number  0 Then
MsgBox "Fehler: " & Err.Number & vbLf & Err.Description & vbLf _
& "VBA-Code wurde ggf. wegen Sperrung des Zugriffs nicht gelöscht!"
End If
End Sub

Anzeige
AW: Export ohne VBA Codes
19.05.2010 14:06:41
Ronny
@Franz:
Hallo Franz,
vielen Dank für die Antwort.
Dein Vorschlag war auch mein erster Anstz, nur ist eine Worksheet_Activate Prozedur auf dem Tabllenblatt, sodass er direkt nach dem kopieren der Sheets(der Code ist noch in diesen vorhanden) den Fehler "Sub nicht definiert" ausspuckt. Er kommt also garnicht in die Sub zum löschen des Codes.
Es handelt sich dabei um die Sub zum Aufruf der Commandbar bei der Aktivierung dieses Sheets in der Originaldatei.
@Uppe:
Mit Projekteigenschaftsfenster meine ich die "Userform", welche erscheint, wenn man die Tasten Alt+F11, Alt+xi, Passwort und 1mal Enter drückt (Vorrausgesetzt das VBA Projekt ist geschützt) oder Alternativ im Projektexplorer rechte Maus auf das Projekt und dann Eigenschaften von VBA-Project... klickt
Ich habe auch schon nur die "Sendkeys Anweisung" ohne die Exportfunktion getestet, leider mit demselben Ergebnis. Wenn ich es "händisch" mache klappt es genau mit dieser Tastenfolge...
Anzeige
AW: Export ohne VBA Codes
19.05.2010 13:42:45
Uppe
Hallo Ronny,
ich habe es aus der Symbolleiste getestet, bei mir funktioniert es.
Was klappt denn bei dir nicht?
Und was heißt "Das VBA-Projekteigenschaftsfenster bleibt geöffnet." ? Du schließt es ja nirgends, dann bleibt es auch geöffnet.
wenn Du am Ende Deines Codes SendKeys "%Dh", True eingibst, wird das Fenster geschlossen.
Gruß Uppe
AW: Export ohne VBA Codes
19.05.2010 14:09:50
Ronny
Hey Uppe, hier ein der aus meiner Antwort zu Franz Lösung, welcher dich betrifft.
"...
@Uppe:
Mit Projekteigenschaftsfenster meine ich die "Userform", welche erscheint, wenn man die Tasten Alt+F11, Alt+xi, Passwort und 1mal Enter drückt (Vorrausgesetzt das VBA Projekt ist geschützt) oder Alternativ im Projektexplorer rechte Maus auf das Projekt und dann Eigenschaften von VBA-Project... klickt
Ich habe auch schon nur die "Sendkeys Anweisung" ohne die Exportfunktion getestet, leider mit demselben Ergebnis. Wenn ich es "händisch" mache klappt es genau mit dieser Tastenfolge..."
Anzeige
AW: Export ohne VBA Codes
19.05.2010 14:30:00
Ronny
Ich habe ein Lösung gefunden, welche aber ein wenig unbefriedigend ist.
Der fehler beim Kopieren kam immer direkt nach dem kopieren und noch vorm löschen des Codes in der neuen Datei. Dies lag daran, dass in diesen Codes Subs ausgeführt werden sollten, welche aber im Modul der ursprünglichen Datei abgelegt sind. Diese konnte dann natürlich die neue Datei nicht finden (was sie eigentlich auch nicht braucht, da der gesamte VBA Code dann eh gelöscht werden sollte).
Ich habe nun in der Ursprungsdatei die 3 nicht "auffindbaren" Subs nicht nur im Modul zu stehen, sondern auch in den beiden Tabellenblättern. So findet er nach dem kopieren diese Subs udn meckert nicht, das diese nicht definiert sind. Anschliessend wird dann in der neuen Datei der gesamte VBA Code aus den Sheets gelöscht.
Danke nochmal an die fleissigen Helfer und falls jemand doch noch die "eierlegende Wollmilchsau" parat hat: Immer her damit. ;-)
Viel Spass noch im Büro oder zu Hause.
Grüße,
Ronny.
Anzeige
kleine Frage
19.05.2010 15:05:55
Rudi
Hallo,
warum kopierst du nicht erst die Inhalte und dann die Format in neue Sheets?
Dann brauchst du keinen Code zu löschen.
Gruß
Rudi
AW: kleine Frage
19.05.2010 15:13:30
Ronny
Hey Rudi,
tja, ich brauche Bezüge von Tabelle 1 zu Tabelle 2 und kopiere mir in einem Schwung die beiden Blätter inklusive formatierung und Bezüge und Namen etc.
Wie sollte es den aussehen, wenn ich erst die Inhalte und dann die Formate kopiere?
AW: kleine Frage
19.05.2010 15:43:28
Rudi
Hallo,
etwa so:
Sub tt()
Dim wkbNeu As Workbook, wkbQ As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet
Set wkbQ = ActiveWorkbook
Set wks1 = wkbQ.Sheets("Tabelle1")
Set wks2 = wkbQ.Sheets("Tabelle2")
Application.ScreenUpdating = False
Set wkbNeu = Workbooks.Add
wks1.Cells.Copy
With wkbNeu.Sheets(1)
.Name = wks1.Name
.Paste
.Cells(1.1).PasteSpecial xlFormats
End With
wks2.Cells.Copy
With wkbNeu.Sheets(2)
.Name = wks2.Name
.Paste
.Cells(1.1).PasteSpecial xlFormats
End With
Application.CutCopyMode = False
wkbNeu.ChangeLink Name:=wkbQ.Name, NewName:=wkbNeu.Name
Application.ScreenUpdating = True
End Sub

Gruß
Rudi
Anzeige
AW: kleine Frage
19.05.2010 16:11:44
Ronny
Also das klappt wunderprächtig!!
Ich werde mir morgen dann den Code noch so anpassen, wie ich Ihn brauche, aber das Gerüst steht!!
Vielen Dank an Alle, die sich trotz des super Wetters Zeit für meine Anliegen genommen haben. ;-)
Grüße Ronny.
AW: kleine Korrektur
19.05.2010 16:22:23
Rudi
Hallo,
es muss natürlich
.Cells(1, 1).PasteSpecial
heißen.
Gruß
Rudi
AW: kleine Korrektur
19.05.2010 16:23:59
Ronny
Schon gemerkt. ;-)
Danke Nochmals und noch nen schönen Tag...

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige