AW: Update
09.09.2007 11:23:41
Fred
hallo hajo,
danke für deine antwort.
daten und programme zu trennen ist eine gute idee.
habe mittlerweile im archiv gestöbert und dabei folgendes gefunden:
Excel-Version: Excel 2000
* Module mit VB bearbeiten von Bettina Schürmann vom 22.11.2001 - 12:22:06
o Re: Module mit VB bearbeiten - Zusatzfrage von Bettina Schürmann vom 22.11.2001 - 15:40:34 (0)
o Re: Module mit VB bearbeiten von Christoph Dümmen vom 22.11.2001 - 12:53:59 (0)
o Module gesamt austauschen von Christoph Dümmen vom 22.11.2001 - 12:53:29 (0)
o Re: Module mit VB bearbeiten von Nike vom 22.11.2001 - 12:49:22 (0)
Module mit VB bearbeiten
'und jetzt noch ein Brocken um ein Code Modul eines Tabellenblattes auszutauschen...
'wbZiel ist die Mappe, deren Modul ausgetauscht werden muss
'du musst dann nur noch ein Verzeichnis (c:\Temp\Auslagercode\) anlegen
'und dort dein neues Modul Tabelle1.cls ablegen
Sub DeleteAndImport_CodeModule(wbZiel As Workbook)
'Tabellenblattcode löschen und durch neuen ersetzen
'Hierbei handelt es sich um Code eines Tabellenblattes
'Nicht verwechseln mit einem Separaten Code Modul
'Based on Herber 020098v.xls
'Delete the code of a Worksheet, not to be mistaken with
'a seperate code module...
Dim VB As Object
Dim X As Object
Dim FileArray()
Dim FCount%, ProcessCounter%
Dim FName$
Set VB = wbZiel.VBProject
For Each X In VB.VBComponents
'The code inside the codemodule of Table1 is deleted
If X.Type = 100 And X.Name = "Tabelle1" Then
With VB.VBComponents(X.Name).CodeModule
.DeleteLines 1, .CountOfLines
End With
End If
Next X
ChDrive "c"
'Directory possibly has to be changed
ChDir "c:\Temp\Auslagercode\"
FName = Dir("*.cls")
Do While FName ""
FCount = FCount + 1
ReDim Preserve FileArray(1 To FCount)
FileArray(FCount) = FName
FName = Dir()
Loop
For ProcessCounter = 1 To FCount
VB.VBComponents("Tabelle1").CodeModule.AddFromFile FileArray(ProcessCounter)
Next
Set VB = Nothing
Set X = Nothing
End Sub
Module gesamt austauschen
Hallo Bettina,
ja, das habe ich schon gemacht und das hat mir richtig Kopfzerbrechen bereitet.
Wenn es Dir möglich ist, würde ich immer das ganze Modul austauschen, weil Du sonst immer noch prüfen mußt, was in Deiner Codezeile aktuell drinsteht und ob die Änderung ggf. schon einmal durchgeführt wurde. Diese Problem habe ich, da ich von 20 internationalen Einheiten monatlich Mappen zugesendet bekomme und da sind regelmäßig veraltete Versionen genommen worden.
Beispielhaft mal der Code eines ganzen Makros, wo ich das gesamte Modul austausche.
Public Sub ServiceRelease29()
'Christoph Dümmen, 16/10/2001
'Korrigiert Management Report und Tauscht Makro aus
On Error GoTo Fehler
Dim sh As Worksheet
Set sh = wbk.Worksheets("Management_Report")
AddSheet 'Fügt ggf. das Blatt zum _
tracken der ServiceReleases hinzu
If Gelaufen(29) = "OK" Then 'Prüfung, ob Makro gelaufen
ps.Cells(intCounter + 5, 32) = "OK": Exit Sub 'Status in Protokoll eintragen
End If
bolDirty = True 'Änderungen werden vorgenommen. _
Mappe muß später also gespeichert werden
sh.Unprotect 'Blattschutz aufheben
'**************************Eigentliches Makro******************************************* _
sh.Range("Q26") = "=Sum(R26:AC26)" 'Formel korrigieren
Dim CodeModul As CodeModule
Const Importdatei = "r:\planung\mr\mr2001\mr-file\OriginalUpdate_MRscFile.bas"
Set VBKomp = wbk.VBProject.VBComponents.Add(vbext_ct_StdModule)
VBKomp.Name = "tmpOriginalUpdate"
Set CodeModul = wbk.VBProject.VBComponents("tmpOriginalUpdate").CodeModule
wbk.VBProject.VBComponents.Remove wbk.VBProject.VBComponents("OriginalUpdate")
wbk.VBProject.VBComponents.Remove wbk.VBProject.VBComponents("NewOriginalUpdate")
With CodeModul
.AddFromFile Importdatei
End With
'**************************Eigentliches Makro Ende************************************** _
sh.Protect 'Blattschutz aktivieren
Worksheets("ServiceRelease").Range("AC2") = "29" 'Makro als erfolgreich _
gelaufen eintragen
Worksheets("ServiceRelease").Range("AC3") = "OK"
ps.Cells(intCounter + 5, 32) = "now" 'Status in Protokoll eintragen
Exit Sub
Fehler:
Select Case Err.Number
Case 9
ps.Cells(intCounter + 5, 32) = "failed"
bolDirty = False
Exit Sub
Case -2147352565 'Modul nicht vorhanden: Weiter
Resume Next
Case Else
MsgBox "Error while processing ServiceRelease29! Error: " & Err.Number & "," & _
Err.Description, vbCritical, "ERROR"
Resume Next
End Select
'Status in Protokoll eintragen
ps.Cells(intCounter + 5, 2) = "Error"
End Sub
Hoffentlich hilfts Dir.
Christoph
wie findest du das?
gruß
fred