Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

mit VBA Code VBA Zeilen änden | Herbers Excel-Forum


Betrifft: mit VBA Code VBA Zeilen änden von: Claudia
Geschrieben am: 03.01.2010 16:56:56

Hallo liebe Excel Helfer,

ein frohes neues Jahr allen hier im Forum.
Wir haben in unserer Firma an vielen Aussendienstmitarbeitern Programme ausgegeben, die aber zum Teil sehr unterschiedlich geändert worden sind. Jetzt soll eine ganz bestimmte Zeile (nur ist diese nirgends an der gleichen Stelle) geändert werden. Das Prog ist geschützt, VBA Passwort ist bekannt.

Ich habe hier im Archiv schon gesucht und einiges gefunden, komme aber nicht weiter und bitte um Hilfe.

Es soll ein kleines Prog geschrieben werden (update.xls) welches sich im gleichen Verzeichniss wie die Ursprungsdatei befinden müsste (Preise.xls)

Jetzt muss update.xls in Preise.xls folgendes ändern
von .Caption = "Preise 2009"
nach .Caption = "aktuelle Preisliste"

Hier das was ich gefunden und gebastelt habe aber irgendiwe überhaupt nicht funktioniert:

Sub aufheben() 'VBA-Kennwort in Preise.xls aufheben
Workbooks.Open Filename:="Preise.xls"
SendKeys "%{F11} %Xi{TAB 9}" & "Passwort" & "{tab}{enter}{enter} %q"
With Workbooks("Preise.xls").VBProject

End Sub
' in ein Modul
Const SuchZeile = ".Caption = ""Preise 2009"""
Const NeueZeile = ".Caption = ""aktuelle Preisliste"""
Sub VBAZeileÄndern()

    Set VBE = ...... 'die gesuchten Zeilen stehen im Ursprungsprogramm in Diese Arbeitsmappe


' ob de Code ab hier wirklich richtig ist wage ich dann zu bezweifeln
    With VBE
        For x = 1 To .countoflines
         i = .countoflines
            If Trim(.Lines(x, 1)) = NeueZeile Then
                .ReplaceLine x, SuchZeile
                Exit Sub
            End If
            If Trim(.Lines(x, 1)) = SuchZeile Then
                .ReplaceLine x, NeueZeile
                Exit Sub
            End If
        Next x
    End With
End Sub
Wer kann mir bitte helfen
Liebe Grüße
Claudia

  

Betrifft: mit VBA Code VBA Zeilen änden von: Uduuh
Geschrieben am: 03.01.2010 17:38:33

Hallo,
das wird hakelig.
1. ist die Sendkeys-Reihenfolge von der Excelversion abhängig.
2. muss dem Zugriff auf des VBA-Projekt vertraut werden. Diese Einstellung kann man nur manuell vornehmen

Gruß aus’m Pott
Udo



  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: Claudia
Geschrieben am: 03.01.2010 18:34:50

Hallo Udo,
die Excel Versionen sind alle 2003 und der Zugriff auf des VBA-Projekt kann ich den Mitarbitern ja per Mail erklären, das diese das entsprechend einstellen.

Kannst Du mir weiterhelfen?
Gruß
Claudia


  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: Claudia
Geschrieben am: 03.01.2010 20:46:10

Hallo Udo,
die Excel Versionen sind alle 2003 und der Zugriff auf des VBA-Projekt kann ich den Mitarbitern ja per Mail erklären, das diese das entsprechend einstellen.

Kannst Du mir weiterhelfen?
Gruß
Claudia


  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: Herbert Grom
Geschrieben am: 04.01.2010 16:07:19

hi udo,

hast du meine email noch nicht gelesen? bitte melde dich! danke!

sorry claudia!

gruß herbert


  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: dan
Geschrieben am: 04.01.2010 02:25:27

Hallo,
hier ein Versuch :-).

Der Code versucht alle Zeilen im VBProject finden und etsaetzen. Bin mir nicht sicher, ob das so in Ordnung ist?

Auch die SendKeys sind manchmal problematisch, also ich kann nicht garantieren, dass diser Code auch bei Dir funktioniert.

Gruss dan, cz.

' <<< add VBA extensibility reference >>>

Option Explicit

Private Const SuchZeile = ".Caption = ""Preise 2009"""
Private Const NeueZeile = ".Caption = ""aktuelle Preisliste"""

Public Sub aufheben() 'VBA-Kennwort in Preise.xls aufheben
  
  Dim AltKey As String
  Dim CtrlKey As String
  Dim preiseWorkbook As Workbook
  Dim preiseWorkbookVBProject As VBIDE.vbProject
  
  On Error GoTo Err_aufheben

  Set preiseWorkbook = Workbooks.Open(Filename:=ThisWorkbook.Path & "\Preise.xls")
  Set preiseWorkbookVBProject = preiseWorkbook.vbProject
  
  AltKey = "%"
  CtrlKey = "^"
  
  SendKeys AltKey & "{F11}", True    'Open VB Editor
  SendKeys AltKey & "T", False       'Select Tools toolbar
  SendKeys "e", False                'Select VBAProject Properties
  SendKeys "psw", False             'Enter password into dialog box, <<< change "psw' to your  _
own password >>>
  SendKeys "{ENTER}", False          'Press OK, Project properties dialog should show up
  SendKeys CtrlKey & "{PGDN}", False 'Change tab-page to Protection
  SendKeys "{ENTER}", True          'Press OK to unprotect the project
  
  If (preiseWorkbookVBProject.Protection = vbext_pp_none) Then
  
    Call ReplaceCaption(preiseWorkbookVBProject, SuchZeile, NeueZeile)
    SendKeys AltKey & "{F11}", False   'Close VB Editor
  
  Else
    
    MsgBox "Protection removal failed."
    
  End If
  
  
  Exit Sub
  
Err_aufheben:
  MsgBox Err.Description, vbOKOnly, "Error in Sub aufheben"
End Sub

Private Sub ReplaceCaption(ByRef preiseWorkbookVBProject As VBIDE.vbProject, ByVal oldText As  _
String, ByVal newText As String)
  Dim vb_component As VBComponent
  Dim codeModuleLine As Long
  
  For Each vb_component In preiseWorkbookVBProject.VBComponents
    With vb_component.CodeModule
      For codeModuleLine = 1 To .CountOfLines
        If Trim(.Lines(codeModuleLine, 1)) = oldText Then
            .ReplaceLine codeModuleLine, newText
        End If
      Next codeModuleLine
    End With
  Next
End Sub



  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: Claudia
Geschrieben am: 04.01.2010 12:03:30

Hallo Dan,

danke für Deine Bemühung, aber funktioniet leider nicht.
Habe noch mal auf offen gestellt, vielleicht hat noch jemand eine Idee.
Gruß
Claudia


  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: dan
Geschrieben am: 04.01.2010 12:56:25

Hallo Claudia,
wie verhaelt sich der Code wenn es auf Deinem PC lauft? Bekommst Du irgenwelche Meldungen (error message-boxes)?

Du hast (nehme ich an) einen deutschen Excel, dort sind die 'shortcut keys' anders. Also man muss den Code dem entsprechend aendern. Erst dann koennten die SendKeys funktionieren.

Gruss, dan


  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: Rudi Maintaire
Geschrieben am: 04.01.2010 13:08:06

Hallo,
für deutsches XP:
SendKeys AltKey & "{F11}", True 'Open VB Editor
SendKeys AltKey & "x", False 'Select Tools toolbar
SendKeys "i", False 'Select VBAProject Properties
SendKeys "psw", False 'Enter password into dialog box, <<< change "psw' to your own password >>>
SendKeys "{ENTER}", False 'Press OK, Project properties dialog should show up
SendKeys CtrlKey & "{PGDN}", False 'Change tab-page to Protection
SendKeys "{ENTER}", True 'Press OK to unprotect the project

für 2003 evtl nochmal anpassen.

Gruß
Rudi


  

Betrifft: AW: mit VBA Code VBA Zeilen änden von: Herbert Grom
Geschrieben am: 04.01.2010 16:41:06

Hallo Claudia,

vielleicht kann ich Dir bei Deinem Problem helfen. Versuche es mal damit:




Sub ModulZeileTauschen()
    Dim iCounter%
    With ThisWorkbook.VBProject.VBComponents("Modul4").CodeModule     'Name "Modul4" anpassen
        For iCounter = 1 To .CountOfLines
            If .Lines(iCounter, 1) = "  MsgBox ""Austauschen!""" Then 'dieser Text wird ausgetauscht
                .ReplaceLine iCounter, "  MsgBox ""Ausgetauscht!"""   'mit diesem Text. Blanks beachten!
                Exit Sub
            End If
        Next iCounter
    End With
End Sub


     Code eingefügt mit Syntaxhighlighter 4.7



Dieses Makro sucht im "Modul4" nach der Zeile mit dem Code " MsgBox "Austauschen!"". Zu beachten sind dabei sowohl die Blanks am Textanfang wie auch die doppelten Anführungszeichen. Probiers mal!

Gruß Herbert


Beiträge aus den Excel-Beispielen zum Thema "mit VBA Code VBA Zeilen änden"