Userform mit .find ueber anderes Blatt ausfuehren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Userform mit .find ueber anderes Blatt ausfuehren
von: Markus
Geschrieben am: 30.07.2015 11:14:26

Hallo Forum,
habe unter Hilfe eine USERFORM gebaut, die nachfolgendes Makro zum Suchen und Anzeigen von Datensaetzen ueber Textboxen enthaellt. Das Makro laeuft, solange sich die Schaltflaeche zum Aufrufen der USERFORM im Arbeitsblatt befindet, in welchem auch die Datensaetze sind. Nun moechte ich aber eine Art Frontend in einem separatem Arbeitsblatt machen, die alle Makros/Funktionen meiner bescheidenen Datenbank zentral enthaellt.
Tja und nun erhalte ich den beruehmten run-time-error 1004 (activate-methode des range obkejtes kann nicht ausgefuehrt werden) in der Zeile mit "myRange.Activate". Da mein VBA nach wie vor eher bescheiden ist, wollte ich euch fragen, was ich falsch mache in der Ansprache des Arbeitsblattes mit den Datensaetzen. Oder liegt der Fehler woanders??
Vielen Dank vorab fuer euere Unterstuetzung!
Gruesse,
Markus
'
' suchen
'

Private Sub CommandButton2_Click()
Dim WkSh        As Worksheet
Dim lLetzte     As Long
Dim myRange     As Range
Dim strAddress  As String
Dim bolAbbruch  As Boolean
   CommandButton3.Enabled = False  ' den Änder-Button sperren
   CommandButton4.Enabled = False  ' den Lösch-Button sperren
   
   Set WkSh = Worksheets("Dettagli record")
   
   Sheets("Dettagli record").Protect , UserinterfaceOnly:=True
   
   lLetzte = WkSh.Range("A65536").End(xlUp).Row
   If lLetzte < 2 Then lLetzte = 2
      
   If TextBox1.Value = "" Then
      MsgBox "ID record non digitato - azione viene interrotta", _
         48, "   Nota per " & Application.UserName
      TextBox1.SetFocus
      Exit Sub
    Else
      TextBox1.Value = WorksheetFunction.Proper(TextBox1.Value)
    
   ' nachfolgend werden die TextBox1.Werte gesucht.
   ' Mit LookIn:=xlValues wird nach den Zellwerten gesucht.
   ' Mit LookAt:=xlPart muß der Suchbegriff nicht komplett mit
   ' dem Suchergebnis übereinstimmen.
 
      With WkSh
         Set myRange = .Columns(2).Find(What:=UserForm1.TextBox1.Value, _
            LookIn:=xlValues, LookAt:=xlPart, After:=.Cells(Rows.Count, 2))
      
         If Not myRange Is Nothing Then
            strAddress = myRange.Address
            myRange.Activate ' hier erfolgt der run-ime-error
            FundZeile = ActiveCell.Row
            GoSub Anzeigen
            Do
               If MsgBox("Cercare altro record?", 36, "   Conferma") = vbNo Then
                  bolAbbruch = True
                  Exit Sub
                Else
                  Set myRange = .Columns(2).FindNext(myRange)
                  If myRange.Address <> strAddress Then
                     myRange.Activate
                     FundZeile = ActiveCell.Row
                     GoSub Anzeigen
                  End If
               End If
            Loop While Not myRange Is Nothing And myRange.Address <> strAddress
          
            If Not bolAbbruch Then
               MsgBox "Altro record non c'è purtroppo!", _
                   48, "   Informazione per " & Application.UserName
               FundZeile = 0
             Else
               MsgBox "Non trovato!", _
                  48, "   Informazione per " & Application.UserName
               FundZeile = 0
            End If
          Else
            MsgBox "Non trovato!", _
               48, "   Informazione per " & Application.UserName
            FundZeile = 0
            With TextBox2
               .SetFocus
               .SelStart = 0
               .SelLength = Len(.Text)
            End With
         End If
      End With
         
   End If
   
   Exit Sub
   
Anzeigen:
   If FundZeile = 0 Then Exit Sub
      
   TextBox1.Value = ActiveCell.Offset(0, 0).Value ' ID record
   TextBox2.Value = ActiveCell.Offset(0, -1).Value ' ID cliente
   TextBox3.Value = ActiveCell.Offset(0, 1).Value ' Straßenname
   TextBox4.Value = ActiveCell.Offset(0, 2).Value ' Postleitzahl
   TextBox5.Value = ActiveCell.Offset(0, 3).Value ' Ortsname
   TextBox6.Value = ActiveCell.Offset(0, 4).Value ' Ortsname
   TextBox7.Value = ActiveCell.Offset(0, 5).Value ' Telefon
   TextBox8.Value = ActiveCell.Offset(0, 6).Value ' Telefon
   TextBox9.Value = ActiveCell.Offset(0, 7).Value ' Telefon
   TextBox10.Value = ActiveCell.Offset(0, 8).Value ' Telefon
   TextBox11.Value = ActiveCell.Offset(0, 9).Value ' Telefon
   TextBox12.Value = ActiveCell.Offset(0, 10).Value ' Telefon
   TextBox13.Value = ActiveCell.Offset(0, 11).Value ' Telefon
 
    
Return
End Sub

Bild

Betrifft: find-methode muss auf anderes Blatt zugreifen
von: Markus
Geschrieben am: 30.07.2015 14:40:16
Hallo Forum,
scheinbar habe ich meine Frage nicht gut formuliert und vielleicht auch den Betreff nicht richtig benannt. Es faellt mir schwer zu erkennen wo mein Makro-Problem liegt, daher war ich vielleicht nicht konkret genug...
Ich vermute, dass das Prob darin besteht, dass die find-methode auf ein anderes Arbeitsblatt zurgreifen muss und ich das nicht sauber deklariert habe? Der Laufzeitfehler wird hier ausgeloest:
myRange.Activate ' hier an dieser Stelle
Den restlichen Code hab ich ja schon gepostet.
Vielen Dank vorab fuer eure Unterstuetzung!
Gruss
Markus

Bild

Betrifft: AW: find-methode muss auf anderes Blatt zugreifen
von: Rudi Maintaire
Geschrieben am: 30.07.2015 16:43:19
Hallo,
verzichte auf Activate

.....
         If Not myRange Is Nothing Then
            strAddress = myRange.Address
            GoSub Anzeigen
....
Anzeigen:
   TextBox1.Value = myRange.Offset(0, 0).Value ' ID record
   TextBox2.Value = myRange.Offset(0, -1).Value ' ID cliente
   TextBox3.Value = myRange.Offset(0, 1).Value ' Straßenname
   TextBox4.Value = myRange.Offset(0, 2).Value ' Postleitzahl
   TextBox5.Value = myRange.Offset(0, 3).Value ' Ortsname
   TextBox6.Value = myRange.Offset(0, 4).Value ' Ortsname
   TextBox7.Value = myRange.Offset(0, 5).Value ' Telefon
   TextBox8.Value = myRange.Offset(0, 6).Value ' Telefon
   TextBox9.Value = myRange.Offset(0, 7).Value ' Telefon
   TextBox10.Value = myRange.Offset(0, 8).Value ' Telefon
   TextBox11.Value = myRange.Offset(0, 9).Value ' Telefon
   TextBox12.Value = myRange.Offset(0, 10).Value ' Telefon
   TextBox13.Value = myRange.Offset(0, 11).Value ' Telefon
....

GoSub solltest du vergessen. Das führt nur zu Spaghetti-Code.
Gruß
Rudi

Bild

Betrifft: AW: find-methode muss auf anderes Blatt zugreifen
von: Markus
Geschrieben am: 30.07.2015 17:40:54
Hallo Rudi,
ich brauche Activate doch fuer ActiveCell.Row zur Definition der Variablen FundZeile?!
Oder nicht?
Wie auch immer, ich habe in der Zwischenzeit eine Kruecke gebaut und wollte den Thread eigentlich schon als "Erledigt" markieren. Wenn Du Lust hast kannst Du mir nochmal und fuer die Nachwelt antworten ...
Hier die Kruecke:
Habe den Code zum Aufrufen der UserForm um eine garstige select-Zeile erweitert ...

Public Sub UserForm1_anzeigen()
   Sheets("Dettagli record").Select
   UserForm1.Show
   
End Sub
Und den UserForm-Exit-Code entsprechend dann mit Sheets("Scelta cliente").Select erweitert.
Die Loesung finde ich absolut OK, da so die Datensaetze im Hintergrund zu sehen sind, welche mit der UserForm bearbeitet werden.
Vielen Dank fuer die Unterstuetzung dennoch und Dein Interesse!
Markus
(der x-te, hier gibt es im Forum viele davon, beim evtl. naechsten Thread von mir nenne ich mich irgendwie MarkusX oder so... :)

Bild

Betrifft: AW: find-methode muss auf anderes Blatt zugreifen
von: Rudi Maintaire
Geschrieben am: 30.07.2015 23:27:09
Hallo,
ich brauche Activate doch fuer ActiveCell.Row zur Definition der Variablen FundZeile?!
Oder nicht?

Nö, du benutzt sie ja auch nicht weiter.
Gruß
Rudi

Bild

Betrifft: AW: find-methode muss auf anderes Blatt zugreifen
von: Markus
Geschrieben am: 31.07.2015 08:38:03
Hallo Rudi,
FundZeile benoetige ich fuer die Negativ-Ereignisse, falls keine Treffer existieren/keine weiteren Treffer existieren.
Oder liesse sich dies auch mit meiner myRange-Variablen loesen?
Gruss
MarkusX

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Userform mit .find ueber anderes Blatt ausfuehren"