PDA

Vollständige Version anzeigen : Inhalt einer MsgBox als Variable


Lealo
30.03.2012, 15:40
Hallo Leute :)

Ich schreibe gerade eine Makro und habe folgendes Problem. Mithilfe einer Find-Funktion, soll die Makro einen Begriff in einem anderen file finden. Aber nicht nur das, sie soll mir auch sagen, WO sie diesen Begriff gefunden hat. Momentan sagt mir die Makro das indem sie mir eine MsgBox schickt. Ich möchte nun aber den Inhalt der MsgBox als Varaible myFoundCell speichern, damit ich sie weiterverwenden kann.

(Die MsgBox ist einfach eine Zwischenlösung. Wenn jemand weiss, wie ich die gefundene Zelle direkt als Variable abspeichern kann, soll mir das gleich sagen :))

Hier ein Auszug aus meinem Code:

myControlDate = InputBox("Enter the month and year for your graphic like in the example." & vbCrLf & "Example: for February 2011 write 02-11")

Workbooks(FNData).Worksheets(2).Cells.Find(myControlDate).Activate
MsgBox ActiveCell.Address(False, False)

Liebe Grüsse Lealo

Hajo_Zi
30.03.2012, 15:43
die Zelladrese bekommst Du mirt RaFound.Address
Ich bin jetzt von meiner Suche ausgegangen.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Lealo
30.03.2012, 16:03
Also ich hab das so verstanden, dass ich das nun so schreiben soll:

Workbooks(FNData).Worksheets(2).Cells.Find(myControlDate).Activate
myFoundCell = RaFound.Address

Dann kommt aber die Fehlermeldung: Invalid use of property.

Wie genau muss ich diesen Befehl in meine Makro einbauen?

Hajo_Zi
30.03.2012, 16:14
das habe ich nicht vorgeschlagen. Select und Activate ist in VBA nicht notwendig. Der Cursor ist kein Hund der überall rumgeführt werden muss.

Sub Find_Einmal()
' erstellt von HajoZiplies@web.de 02.06.03
Dim RaFound As Range
Dim LoLetzte As Long
Dim sSearch As String
sSearch = Worksheets("Tabelle2").Range("A1")
With Worksheets("Tabelle1")
LoLetzte = IIf(IsEmpty(.Range("A65536")), .Range("A65536").End(xlUp).Row, 65536)
' xlByRows Suche zuerst in Zeilen
' xlByColumns Suche zuerst in Spalten
Set RaFound = .Range("A1:A" & LoLetzte).Find(sSearch, .Range("A" & LoLetzte), , xlWhole, xlByRows, xlNext)
If RaFound Is Nothing Then Exit Sub 'falls nicht gefunden wird Sub verlassen
MsgBox RaFound.Row
End With
Set RaFound = Nothing
End Sub


<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Lealo
30.03.2012, 16:25
Okay, ich glaube ich war zu ungenau. Ich erkläre nochmals, was ich genau machen möchte:

Ich habe eine Makro, die in einem anderen File ein Datum suchen soll. Dieses Datum findet sie auf jeden Fall. Ich möchte aber nun wissen, WO sie dieses Datum findet (in meinem Fall wäre es in F6). Was ich aber eigentlich wissen möchte ist, ob in der Spalte F noch andere Wert vorhanden sind. Denn falls ja, muss ich diese Werte in mein File kopieren, falls nein, kann die Makro beendet werden.
Ich möchte also, dass mir meine Makro sagt, WO sie das Datum gefunden hat, damit ich danach in DIESER Spalte weitersuchen kann. Deshalb dachte ich, ich kann dann die Zelle F6 als Variable speichern und sie später wiederverwenden.

Diese Zelle wechselt ständig, mal ist sie F6, dann G6 usw.

Weisst du was ich machen möchte oder gibt es für dich keinen Sinn?

Lg
Lealo

Hajo_Zi
30.03.2012, 16:29
Gut bei meinen Code wird das Suchergebnis auf eine Variablen gespeichert.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Lealo
30.03.2012, 16:31
Eben. Kennst du auch eine Formel, wo der ORT des Suchergebnisses auf eine Variable gespeichert werden kann?

Lg
Lealo

ransi
30.03.2012, 16:43
HAllo

Hm..
Set dieVAriable=Workbooks(FNData).Worksheets(2).Cells.Find(myControlDate) ??

ransi

Erich G.
31.03.2012, 05:52
Hi Lealo,
vielleicht ist ein wenig mehr Erklärung nötig. Wenn du - wie Ransi in etwa vorschlug - schreibst
Dim rngF as Range ' (ganz oben in der Prozedur)
' dann weiter unten:
Set rngF=Workbooks(FNData).Worksheets(2).Cells.Find(myControlDate)

dann ist (weil das Datum ja immer gefunden wird) rngF die Excelzelle, in der das Datum gefunden wurde.
Das ist ein Range, ein Bereich.

rngF hat viele Eigenschaften, die dir dann zur Verfügung stehen, die du direkt nutzen kannst.
Ein paar Beispiele? Du hast
- rngF.Value (den Wert der Zelle, das ist das Datum).
- rngF.Address (die Adresse der Zelle)
- rngF.Column (Spaltennummer der Zelle)
- rngF.Row (Zeilennummer der Zelle)
- rngF.NumberFormat (das Zahlenformat der Zelle)

Um mit diesen Größen zu arbeiten, brauchst du sie nicht in weiteren Variablen zu speichern.
Hast du rngF, weißt du alles über diese Zelle. Alles klar?:)

(Bei Hajo kam das auch schon vor: MsgBox RaFound.Row)

Lealo
02.04.2012, 07:14
Hallo Erich G.

Okay, jetzt hab ichs verstanden. Das war genau die Art von Erklärung, die es geschafft hat, dass es bei mir klingelt ;)

Dankeschön an alle und besonders an den Erich!

Liebe Grüsse
Lealo