Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bereich eines anderen Wbs auswählen

Bereich eines anderen Wbs auswählen
31.10.2017 21:52:14
Barbaraa
Hallo
ich würde gerne eine Auswahl treffen, besser gesagt, den Anwender eine Auswahl treffen lassen.
Wenn das Makro startet, soll der Anwender 3 Sekunden Zeit haben, in das gewünschte Worksheet zu wechseln und dort einen Rechteckbereich von Zellen auszuwählen. Nach Ablauf der drei Sekunden soll das das Makro mit diesen range weiterarbeiten.
Folgender Code funktioniert jedenfalls nicht, wie gewünscht, warum auch immer.
Sub Auswahl()
Dim rAb As Range
Dim Datei As String, Blatt As String
Dim Ecke1x As Long, ecke1y As Long
Dim Ecke2x As Long, ecke2y As Long
Application.Wait (Now + TimeValue("0:00:03"))
'Jetzt händisch Bereich markieren
Beep
Set rAb = Selection
With rAb        'Bereich untersuchen
Datei = "?"
Blatt = .Worksheet.Name
Ecke1x = .Row
ecke1y = .Column
Ecke2x = .Row + .Rows.Count
ecke2y = .Column + .Columns.Count
End With
rAb.Select
End Sub

LG,
Barbara

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich eines anderen Wbs auswählen
31.10.2017 23:41:52
Mullit
Hallo,
nimm besser die OnTime-Methode und dann so in die Richtung:
Option Explicit

Public Sub Auswahl()
    
    Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 3), Procedure:="Auswahl_Selected")
  
End Sub

Public Sub Auswahl_Selected()
    Dim rAb As Range
    Dim Datei As String, Blatt As String
    Dim Ecke1x As Long, ecke1y As Long
    Dim Ecke2x As Long, ecke2y As Long

    'Jetzt händisch Bereich markieren 
    
    Call Beep
    Set rAb = Selection
    Datei = ActiveWorkbook.Name
    With rAb        'Bereich untersuchen 
        Blatt = .Worksheet.Name
        Ecke1x = .Row
        ecke1y = .Column
        Ecke2x = .Row + .Rows.Count - 1
        ecke2y = .Column + .Columns.Count - 1
    End With
    Call MsgBox("Datei: " & Datei & vbCr & _
          "Blatt: " & Blatt & vbCr & _
         "Ecke1x: " & Ecke1x & vbCr & _
         "ecke1y: " & ecke1y & vbCr & _
         "Ecke2x: " & Ecke2x & vbCr & _
         "ecke2y: " & ecke2y, vbExclamation)
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
Nachtrag...:
31.10.2017 23:54:11
Mullit
Hallo nochmal,
uhh, da gehört noch eine Abfrage rein:
Option Explicit

Public Sub Auswahl()
    
    Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 3), Procedure:="Auswahl_Selected")
  
End Sub

Public Sub Auswahl_Selected()
    Dim rAb As Range
    Dim Datei As String, Blatt As String
    Dim Ecke1x As Long, ecke1y As Long
    Dim Ecke2x As Long, ecke2y As Long

    'Jetzt händisch Bereich markieren 
    
    If TypeOf Selection Is Range Then
        Call Beep
        Set rAb = Selection
        Datei = ActiveWorkbook.Name
        With rAb        'Bereich untersuchen 
            Blatt = .Worksheet.Name
            Ecke1x = .Row
            ecke1y = .Column
            Ecke2x = .Row + .Rows.Count - 1
            ecke2y = .Column + .Columns.Count - 1
        End With
        Call MsgBox("Datei: " & Datei & vbCr & _
              "Blatt: " & Blatt & vbCr & _
             "Ecke1x: " & Ecke1x & vbCr & _
             "ecke1y: " & ecke1y & vbCr & _
             "Ecke2x: " & Ecke2x & vbCr & _
             "ecke2y: " & ecke2y, vbExclamation)
   Else
        Call MsgBox("Bitte einen Zell-Bereich auswählen...", vbExclamation)
   End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Bereich eines anderen Wbs auswählen
01.11.2017 00:44:08
Luschi
Hallo Barbaraa,
sowas programmieren zu wollen ist doch totaler Schwachsinn:
- der User weiß garnicht, daß er etwas markieren soll
  woher auch!
- selbst wenn er es weiß, kann er zwar den Bereich markieren
  aber er sieht keine Markierungslinien während der Selektierung!
  verlängere die 'Wartezeit auf 15 Sekunden und probiere es selber aus!
Lösung:
Fordere den User per Application.Input(...) auf, daß er einen Tabellenbereich markiern soll.
Schau in die Vba-Hilfe, da gibt es für den Type-Parameter den Wert '8'.
Falls Deine F1-Taste kaputt ist, oder Du nicht weißt, wie man die Vba-Hilfe aufruft, hier der Link dazu:
https://msdn.microsoft.com/de-de/VBA/Excel-VBA/articles/application-inputbox-method-excel
Ich wundere mich immer mehr über Deine absonderlichen Fragestellungen; gerade Deine letzte Frage
zu 400 ms Wartezeit - was soll das, da stimmt doch das Gesamtkonzept überhaupt nicht.
Und vergiß die Application.SendKeys-Befehle - M$ tut mit jeder neuen Excelversion immer mehr dazu, daß diese Sendebefehle nicht mehr so wirken wie erwartet.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Bereich eines anderen Wbs auswählen
01.11.2017 13:24:37
Barbaraa
Hallo Luschi
erst mal zu "sendkeys". So wie von Dir hier, wie auch sonst überall an allen Ecken und Enden im www, wird vor sendkeys gewarnt, aber nirgends habe ich von einer Alternative gelesen. Ich möchte eine Zahl vom Excel in eine andere Anwendung übertragen, zum Beispiel in ein Preisermittlungsprogramm eines Autoherstellers, und zwar nicht händisch, sondern automatisch. Und den dort errechneten Preis will ich wieder in meine Excel-Tabelle holen. Bis jetzt funktioniert das mit sendkeys.
Nun zu diesem Problem:
Woher der User weiß, dass er etwas markieren soll? Weil er einen Button anklickt, auf dem steht "Bereich definieren", und weil er damit einen Bereich aus einem anderen bereits offenen workbook bestimmen kann, auf den sich das Makro dann bezieht.
Ich hatte es bereits, wie auch von Dir vorgeschlagen, mit
Dim myRange As Range
Set myRange = Application.InputBox(prompt:="Sample", Type:=8)
probiert, aber da war bei der Abfrage der Wechsel auf ein anderes Blatt nicht möglich. Daher mein Weg wie oben beschrieben.
Doch, welch Überraschung, jetzt geht InputBox wie gewünscht.
Nur habe ich jetzt ein anderes Problem: Wie kann ich aus myRange herauslesen, auf welches Workbook sich das bezieht?
Sobald die Abfrage InputBox verlassen ist, bin ich wieder in meinem eigenen Workbook.
LG,
Barbara
Anzeige
AW: Bereich eines anderen Wbs auswählen
01.11.2017 13:33:28
Nepumuk
Hallo Barbara,
du hast doch die Objektvariable myRange. Dessen Parent-Objekt ist das Tabellenblatt:
MsgBox myRange.Parent.Name
und das Parent einer Tabelle ist die Mappe:
MsgBox myRange.Parent.Parent.Name
Gruß
Nepumuk
AW: Bereich eines anderen Wbs auswählen
01.11.2017 14:09:52
Barbaraa
Oh, so funktioniert das: Mit den Verwandtschaftsverhältnissen in VBA.
Meine Mappe, Mutter meines Blattes, ist eine Schwester der Oma von MyRange, der anderen Mappe.
MyRange ist die Nichte der anderen Blätter dieser Oma.
Diese anderen Blätter sind Cousinen der Blätter meiner Mappe.
Vielen Dank, Nepumuk.
LG, Barbara

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige