Microsoft Excel

Herbers Excel/VBA-Archiv

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

Syntax zu Codenamen | Herbers Excel-Forum


Betrifft: Syntax zu Codenamen von: Jörg-HH
Geschrieben am: 14.11.2009 23:16:12

Guten Abend zusammen,

dieser Code stoppt an der With-Zeile.

Dim strWsName As String
Dim objChbox As Variant
For Each objChbox In Me.Controls
  If TypeName(objChbox) = "CheckBox" Then
    If Left(objChbox.Name, 3) = "Che" Then
      If objChbox.Value = True Then
        strWsName = "Tabelle" & Mid(objChbox.Name, 9)
        With ThisWorkbook(strWsName)
          MsgBox "Mach was auf Tabelle " & strWsName
        End With
      Else
        MsgBox "bubu"
      End If
    End If
  End If
Next
Ich versuche überall, den Codenamen anzusprechen. In der With-Zeile aber frage ich plötzlich nach dem Blattnamen - kann das funktionieren?

Die Boxen sind ja nach den Codenamen durchnumeriert - da müßte doch sowas ähnliches stehen wie
With ThisWorkbook. "Tabelle"&Codenummer

die Codenummer wäre dann ja strWsName , aber wie häng ich das da dran?

Danke für'n Tip...

Jörg

  

Betrifft: AW: Syntax zu Codenamen von: Oberschlumpf
Geschrieben am: 14.11.2009 23:52:53

Hi Jörg

Was meinst du mit "Codenamen"?

Die Zeile

With ThisWorkbook(strWsName)

funktioniert so nicht, da ThisWorkbook ohne zusätzliche Parameter stehen muss.

Versuch mal einfach nur

With ThisWorkbook

Mit ThisWorkbook.usw sprichst du IMMER DIE Datei an, in der das Makro steht, welches gerade ausgeführt wird.

Oder wenn es sich mit dem Namen einer Excel-Datei in der Var strWsName um eine andere Datei handelt, die ebenfalls geöffnet ist, dann versuch

With Workbooks(strWsName)


Hilfts?

Ciao
Thorsten


  

Betrifft: Codenamen von: Jörg-HH
Geschrieben am: 15.11.2009 00:38:37

Hi Thorsten

Codename ist der Name Tabelle1 usw, der links im Editor steht und sich nicht ändert (im Gegensatz zum Blattnamen). Bei der Box ist das der Name CheckBox1 (statt zB BoxMeier als Caption)

In der Withzeile müßte also statt zB Worksheets("Preisliste") etwas stehen wie Worksheets.Tabelle5 oder evtl nur Tabelle5, wobei die 5 aus den vorherigen Zeilen generiert wird.

Da sind soundsoviel Boxen in der UF, die in soundsovie Tabellen was machen. Heißen aber alle unterschiedlich. Also habe ich die Codenamen der Boxen den Tabellen angepaßt - Checkbox5 ist für Tabelle5 zuständig.

hoffe, das war verständlich...?

Jörg


  

Betrifft: AW: Codenamen von: Oberschlumpf
Geschrieben am: 15.11.2009 00:47:43

Hi Jörg

Versuch mal

With ThisWorkbooks.Sheets("Tabelle" & Right(objChbox.Name, 1))


aus "Tabelle" & Right(objChbox.Name, 1) ergibt sich


"Tabelle" & Right(objChbox.Name, 1) =
"Tabelle" & letztes Zeichen vom Namen der Checkbox =
"Tabelle" & "5" (bei CheckBox5) =
"Tabelle5"

Hilfts?

Ciao
Thorsten


  

Betrifft: AW: Codenamen von: IngGi
Geschrieben am: 15.11.2009 01:11:45

Hallo zusammen,

mit den Codenamen der Tabellenblätter funktioniert das nicht, da der Codename - im Gegensatz zum Blattnamen - nicht als String übergeben wird. Eine Möglichkeit wäre, alle Tabellenblätter in einer For Each-Schleife abzuklappern und das gesuchte Tabellenblatt dann an eine Objektvariable zu übergeben, über die sich das Tabellenblatt dann ansprechen ließe. Also sowas:

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
  If ws.CodeName = strWsName Then Exit For
Next 'ws

If ws Is Nothing Then
  MsgBox "Es gibt kein Tabellenblatt mit dem Codenamen" _
    & strWsName, vbCritical
End If
In der If-Struktur wird dann noch geprüft, ob es das gesuchte Tabellenblatt überhaupt gibt.

Danach lässt sich z.B. die Zelle A1 auf dem Tabellenblatt, statt innerhalb einer With-Anweisung mit
.Range("A1")
über die Objektvariable ws mit

ws.Range("A1")
ansprechen.

Gruß Ingolf


  

Betrifft: AW: Codenamen von: Oberschlumpf
Geschrieben am: 15.11.2009 01:21:03

Hi Ingolf

Das verstehe ich nicht.

Ob ich in einem Code nun (wenn Tabelle1 aktiv ist)

Range("A1").Value = "Test"

oder Sheets("Tabelle1").Range("A1").Value = "Test"

verwende, wird in beiden Fällen in Tabelle1 in Zelle A1 "Test" stehen.

Somit kann ich doch den Blattnamen auch durch "Summieren" von Strings bilden.

oder was hab ich jetzt nicht verstanden?

Ciao
Thorsten


  

Betrifft: muß 'ne Schleife sein von: Jörg-HH
Geschrieben am: 15.11.2009 02:19:38

Hi Thorsten,

das mit Right geht nicht, weil das teilweise auch zweistellige Zahlen sind. Mid statt Right wäre ein Weg.

Was Ingolf meint, wußte ich bis dahin nicht, aber dies Wissen wurde mir durch die Wirklichekeit aufgedrängt :-) .... Konstruktionen wie With ThisWorkbooks.Sheets("Tabelle" & Right(objChbox.Name, 1)) habe ich (mit Mid statt Right) in allen erdenklichen Variationen auch vergeblich versucht.
Folgende Variante läuft:

Private Sub cmd_ToDo_ReBlDruck_Click()
Dim strWsName As String
Dim objChbox As Variant
Dim ws As Worksheet
If DruckerWaehlen = True Then     'diese Funktion liegt in modGlobal
  For Each objChbox In Me.Controls
    If TypeName(objChbox) = "CheckBox" Then
      If Left(objChbox.Name, 3) = "Che" Then
        If objChbox.Value = True Then
          strWsName = "Tabelle" & Mid(objChbox.Name, 9)
          For Each ws In ThisWorkbook.Worksheets
            If ws.CodeName = strWsName Then
              With ws
                .Range("Druckbereich").Cells.Interior.ColorIndex = xlNone
                .Range("Druckbereich").PrintOut
                .Range("Druckbereich").Cells.Interior.ColorIndex = 15
              Exit For
              End With
            End If  'ws.CodeName
          Next ws
        End If    'objChbox
      End If    'Left
    End If    'TypeName
  Next      'objChbox
End If    'DruckerWaehlen
End Sub
so - und nu gehn wir alle inne Heia...
Schönen Sonntag!
Jörg


  

Betrifft: AW: Codenamen von: IngGi
Geschrieben am: 15.11.2009 15:00:23

Hallo Thorsten,

du hast vollkommen recht, soweit ich ein Tabellenblatt über den normalen Excel-Blattnamen _ anspreche. Das geht so

ThisWorkbook.Sheets("Tabelle1").Range("A1")
hier wird der Blattname in Anführungszeichen, also als String übergeben. Und dieser String lässt sich natürlich beliebig zusammenstoppeln. Wenn ich dasselbe Tabellenblatt über seinen Codenamen anspreche, sieht das so aus

Tabelle1.Range("A1")
Hier ist Tabelle1 eben kein String, der sich zusammenstoppeln ließe. Das Tabellenblatt wird direkt als Objekt angesprochen, wie zum Beispiel eine Textbox auf einem Userformular

UserForm1.TextBox1.Value
Gruß Ingolf


  

Betrifft: AW: Codenamen von: Oberschlumpf
Geschrieben am: 15.11.2009 20:05:01

Hi Ingolf

Ja, danke. Das was ich zuerst nich verstand, war eben der Unterschied Blatt/Codename.
Aber nun bin auch ich wieder ein wenig schlauer ;-)

Ciao
Thorsten