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

Mehrdeutiger Name - Worksheet_Change

Forumthread: Mehrdeutiger Name - Worksheet_Change

Mehrdeutiger Name - Worksheet_Change
22.01.2005 08:29:23
Heinz
Guten Morgen Leute
Habe in der unterstehenden Formel einen Fehler Fehlermeldung."Mehrdeutiger Name - Worksheet_Change"
Könnte mir bitte jemand dabei helfen.
Danke Heinz

Private Sub CommandButton1_Click()
Sheets("Hauptblatt").Select
End Sub


Private Sub Workbook_Open()
On Error Resume Next
ThisWorkbook.Names("OK").Delete
On Error GoTo 0
End Sub

basMain:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$6" Or Target.Address = "$A$52" Then
Dim neuer_Blattname As String
neuer_Blattname = Range("A6") & " bis " & Range("A52")
ActiveSheet.Name = neuer_Blattname
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, [c6:c52]) Is Nothing Then
Call pause_akt_Z
ActiveCell.Offset(0, 3).Activate
End If
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrdeutiger Name - Worksheet_Change
Ramses
Hallo
Das ist doch klar, ein bischen lesen und überlegen führt da schon zu Lösung.
Du hast im Klassenmodul der Tabelle zwei Makros die gleich heissen.
Auch die Fehlermeldung weist bereits darauf hin.
Ohne das geprüft zu haben, muss es zumindest so heissen:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$6" Or Target.Address = "$A$52" Then
Dim neuer_Blattname As String
neuer_Blattname = Range("A6") & " bis " & Range("A52")
ActiveSheet.Name = neuer_Blattname
End If
If Not Intersect(Target, [c6:c52]) Is Nothing Then
Call pause_akt_Z
ActiveCell.Offset(0, 3).Activate
End If
End Sub

Gruss Rainer
Anzeige
AW: Mehrdeutiger Name - Worksheet_Change
22.01.2005 10:28:46
Heinz
Hallo Rainer
Erstmal DANKE für Deine Lösung bei diesen Problem.Du hast leicht reden bist Profi.Ich komme mir in VBA Programmieren wie ein Bär auf dem Glateis vor.Sind meine allerersten Schritte.
Wenn Du noch so nett wärest und mein 2.Problem ansehen würdest BITTE.
DANKE
Hier ist der Fehler bei Set sh = Worksheets("blatt").Denn die Tabellenblätter werden automatisch nach Zelle A6 & A52 unbennant.
Option Explicit
'in das Tabellenmodul

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, [c6:c52]) Is Nothing Then
Call pause_akt_Z
ActiveCell.Offset(0, 3).Activate
End If
End Sub

'für die gesamte Tabelle
Public Sub pause_ges_Tab()
Dim wt As Byte, i%, x As Byte, optB$
Dim sh As Worksheet
Dim sh1 As Worksheet
Set sh = Worksheets("blatt")
Set sh1 = Worksheets("Legende")
For x = 1 To 5
If sh1.OLEObjects(x).Object = True Then
optB = sh1.OLEObjects(x).Name
End If
Next
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
For i = 6 To 52
wt = Weekday(sh.Cells(i, 2))

Select Case optB
Case "OptionButton1"
If wt = 2 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton2"
If wt = 3 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton3"
If wt = 4 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton4"
If wt = 5 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton5"
If wt = 6 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

End Select

Next
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
'für die Eingabe in der Zeile
Sub pause_akt_Z()
Dim wt As Byte, i%, x As Byte, optB$
Dim sh As Worksheet
Dim sh1 As Worksheet
Set sh = Worksheets("blatt")
Set sh1 = Worksheets("Legende")
For x = 1 To 5
If sh1.OLEObjects(x).Object = True Then
optB = sh1.OLEObjects(x).Name
End If
Next
i = ActiveCell.Row
wt = Weekday(sh.Cells(i, 2))

Select Case optB
Case "OptionButton1"
If wt = 2 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton2"
If wt = 3 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton3"
If wt = 4 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton4"
If wt = 5 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

Case "OptionButton5"
If wt = 6 Then
Range(sh.Cells(i, 4), sh.Cells(i, 5)) = ""
Else
sh.Cells(i, 4) = 11#
sh.Cells(i, 5) = 11.5
End If

End Select

End Sub
Anzeige
AW: Mehrdeutiger Name - Worksheet_Change
Ramses
Hallo
Du musst halt den Namen dafür einsetzen, der für diese Tabelle verwendet wird.
Offensichtlich gibt es eine Tabelle "Blatt" nicht
Gruss Rainer
AW: Mehrdeutiger Name - Worksheet_Change
WernerB.
Hallo Heinz,
Excel/VBA moniert (zurecht), dass Du offenbar zwei Makros mit dem selben Namen ("Worksheet_Change") in einem Projekt verwendest.
Mein Vorschlag (ungetestet): packe den Inhalt beider Makros in ein gemeinsames Makro; dieses ereignisgesteuerte Makro gehört in ein Tabellenblatt-Modul und nicht in ein normales Standard-Modul.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim neuer_Blattname As String
If Target.Address = "$A$6" Or Target.Address = "$A$52" Then
neuer_Blattname = Range("A6") & " bis " & Range("A52")
ActiveSheet.Name = neuer_Blattname
End If
If Not Intersect(Target, [c6:c52]) Is Nothing Then
Call pause_akt_Z
ActiveCell.Offset(0, 3).Activate
End If
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: Mehrdeutiger Name - Worksheet_Change
23.01.2005 08:25:28
Heinz
Guten Morgen WernerB
Danke für Deine Hilfestellung.Werde es mal nach Deiner Anleitung probieren.
M.f.G.
Heinz
;
Anzeige

Infobox / Tutorial

Umgang mit dem VBA-Fehler "Mehrdeutiger Name - Worksheet_Change"


Schritt-für-Schritt-Anleitung

Um den Fehler "Mehrdeutiger Name - Worksheet_Change" zu beheben, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Navigiere zu den Tabellenmodulen: Suche im Projektfenster nach dem entsprechenden Tabellenblatt, in dem dein Makro definiert ist.
  3. Überprüfe die Makros: Stelle sicher, dass es nicht mehrere Worksheet_Change-Ereignisse im selben Modul gibt. Wenn vorhanden, kombiniere die Logik in ein einziges Worksheet_Change-Ereignis.
  4. Beispiel für die Kombination:
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
       Dim neuer_Blattname As String
       If Target.Address = "$A$6" Or Target.Address = "$A$52" Then
           neuer_Blattname = Range("A6") & " bis " & Range("A52")
           ActiveSheet.Name = neuer_Blattname
       End If
       If Not Intersect(Target, [c6:c52]) Is Nothing Then
           Call pause_akt_Z
           ActiveCell.Offset(0, 3).Activate
       End If
    End Sub
  5. Speichern und Testen: Speichere deine Änderungen und teste das Makro, um sicherzustellen, dass der Fehler nicht mehr auftritt.

Häufige Fehler und Lösungen

1. Fehler: Mehrdeutiger Name

  • Ursache: Mehrere Worksheet_Change-Ereignisse im gleichen Modul.
  • Lösung: Kombiniere die Ereignisse in ein einziges Makro.

2. Fehler: Name Excel Fehler

  • Ursache: Versuche, ein Blatt mit einem ungültigen Namen zu benennen.
  • Lösung: Stelle sicher, dass der Name keine verbotenen Zeichen enthält und nicht bereits verwendet wird.

3. Fehler: Bezug auf nicht existierende Tabellen

  • Ursache: Der Code verweist auf ein Tabellenblatt, das nicht existiert.
  • Lösung: Überprüfe die Namen der Arbeitsblätter im Code und passe sie an.

Alternative Methoden

Falls du die Worksheet_Change-Ereignisse nicht verwenden möchtest, kannst du auch:

  • Formeln verwenden: Statt VBA-Programmierung, um dynamische Namen zu erzeugen.
  • Manuelle Umbenennung: Führe die Umbenennung manuell durch, wenn dies besser zu deinem Workflow passt.

Praktische Beispiele

Hier sind einige Beispiele, wie du den Fehler "mehrdeutiger Name vba" vermeiden kannst:

  1. Einfache Namensänderung:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
       If Target.Address = "$B$1" Then
           ActiveSheet.Name = Target.Value
       End If
    End Sub
  2. Kombinierte Bedingungen:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
       If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
           ' Logik hier
       End If
    End Sub

Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error-Anweisungen, um unerwartete Fehler elegant abzufangen.
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um den Code für andere verständlich zu machen.
  • Teste regelmäßig: Führe Tests durch, wenn du Änderungen am VBA-Code vornimmst, um sicherzustellen, dass alles korrekt funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich den Fehler "mehrdeutiger Name vba" vermeiden?

  • Stelle sicher, dass in einem Modul nicht mehrere Prozeduren mit dem gleichen Namen existieren.

2. Was sind die häufigsten Ursachen für den Fehler "Name Excel Fehler"?

  • Ungültige Zeichen im Namen oder der Versuch, ein bereits existierendes Blatt umzubenennen.

3. Kann ich Worksheet_Change in einem normalen Modul verwenden?

  • Nein, Worksheet_Change muss in einem Tabellenblatt-Modul definiert werden.

4. Wie kann ich meine Makros effizienter gestalten?

  • Kombiniere ähnliche Logik in einem einzigen Makro und nutze Funktionen, um wiederkehrende Aufgaben zu kapseln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige