Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1432to1436
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

Einfache suche und anschießend batch mit parameter

Einfache suche und anschießend batch mit parameter
21.06.2015 14:16:33
Benjamin

Liebe Experten,
Zu meiner Frage habe ich seit zwei Tagen recherchiert aber jedoch nichts lauffähiges zustande gebracht.
Ich versuche ein Makro zu basteln, dass über eine Userform die letzte ausgewählte Zeile identifiziert, Anschließend soll in der ersten Zeile gesucht werden in welcher Spalte sich "G3E_FNO" Und G3E_FID" befinden, da diese Zeilen in der Vorbearbeitung in unterschiedlichen Spalten stehen können. wenn FID und FNO Spalten ermittelt sind möchte ich den Wert von FID und FNO an eine Batch-Datei weitergeben.
Aktuell habe ich eine Userform aufgesetzt die Folgendermaßen aussieht:

Private Sub CommandButton1_Click()
'OK-Knopf
'Bisheriger code
'Zeilenvariable
Dim Row As Long
'Batchaufruf
Dim batch
'Ausgabestrings für die Parameter
Dim FNO_Text As String
Dim FID_Text As String
'Rangevariable zum Auslesen
Dim Spalte_FID As Range
Dim Spalte_FNO As Range
'Letzte ausgewählte zeile auswählen
Row = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
'Finde FID & FNO in der ersten zeile
Set Spalte_FID = ActiveSheet.Rows(1).Find(what:="G3D_FID*", lookat:=xlWhole)
Set Spalte_FNO = ActiveSheet.Rows(1).Find(what:="G3D_FNO*", lookat:=xlWhole)
'Wähle die Zellen an Standort Row,Spalte_FID & Row,FNO_Spalte aus und verwandle den inhalt in  _
einen String
Set FID_Text = ActiveSheet.Range(Cells(Row, FID_Spalte.Column)).Select
Set FNO_Text = ActiveSheet.Range(Cells(Row, FNO_Spalte.Column)).Select
'Batchaufruf mit string parametern
batch = Shell("C:\beispiel.bat " & FID_Text & FNO_Text, 1)
'Fenster Schließen
Unload Me
End Sub
habe einfach nicht den Hauch einer Ahnung wie ich das fertig bekommen soll und werde aus der API auch noch nicht so schlau, da ich VBA erst seit ca. 1 Woche Programmiere.
Ich hoffe ihr könnte mir erklären:
-Wie ich die suche Mache und anschließend auf die benötigten Parameter zurückgreifen kann.
-Wie ich einen String mit dem Inhalt einer Zelle belegen kann
vielen Dank im Vorraus
Mfg Ben

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einfache suche und anschießend batch mit parameter
21.06.2015 14:51:13
Michael
Hallo Ben,
zum Suchen bzw. die .find-Methode lies bitte mal https://www.herber.de/mailing/vb/html/xlmthfind.htm
Die gesuchte Information befindet sich in der Zelle c, auf deren Inhalt Du mit .value zugreifen kannst.
Im Beispiel wird der Zelle eine Farbe verpaßt (Zeile nach dem Do), anstelle dieser Zeile kannst Du dann entsprechend einsetzen: FID_Text=c.value bzw. bei der zweiten Suche FNO_Text = c.value.
Kommst Du damit zurecht?
Schöne Grüße,
Michael

AW: Einfache suche und anschießend batch mit parameter
21.06.2015 14:59:32
Benjamin
nicht so wirklich :D
Also ich muss :
For Each c In [A1:C5] Hier die erste Zeile auswählen?
If c.Font.Name Like "Cour*" Then Hier"co..." auf "G3E_FID" ändern? und c auf c.value?
c.Font.Name = "Times New Roman" Hier dann nur die spaltenzahl zwischenspeichern?
End If
Next
Und anschließend nochmal das ganze für die G3E_FNO?

Anzeige
Beispiel anbei
21.06.2015 15:25:27
Michael
Hi Ben,
ich hab's mal schnell zusammengefügt, bis auf die Batchdatei und die userform, da mußt halt den Kommentar wieder entfernen ...
Option Explicit
Private Sub CommandButton1_Click()
Dim zeile As Long ' row ist ein Excel-Schlüsselwort
'Batchaufruf
Dim batch
'Ausgabestrings für die Parameter
Dim FNO_Text As String
Dim FID_Text As String
'Rangevariable zum Auslesen
Dim c As Range
'Suchbegriff definieren
FNO_Text = "G3D_FID"
FID_Text = "G3D_FNO"
'Letzte ausgewählte zeile auswählen
zeile = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
With Worksheets(1).Range("a1:c" & zeile)
Set c = .Find(FNO_Text, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
FNO_Text = c.Value
Else
MsgBox FNO_Text & "nicht gefunden"
Exit Sub
End If
End With
With Worksheets(1).Range("a1:c" & zeile)
Set c = .Find(FID_Text, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
FID_Text = c.Value
Else
MsgBox FID_Text & "nicht gefunden"
Exit Sub
End If
End With
MsgBox FNO_Text & " " & FID_Text
'Habe hier keine batch
'Batchaufruf mit string parametern
'batch = Shell("C:\beispiel.bat " & FID_Text & FNO_Text, 1)
'batch = Shell("C:\beispiel.bat " & FID_Text & " " & FNO_Text, 1)
'geändert, weil hier bestimmt ein Leerzeichen rein muß
'Fenster Schließen
'Unload Me
'auskommentiert, habe hier keine userform
End Sub
Das *chen hinter dem Suchbegriff habe ich rausgenommen, weil ich vermute, daß Du alles suchen möchtest, was mit den Buchstaben vorher anfängt - dafür habe ich dann xlwhole in xlpart geändert.
Happy Exceling,
Michael

Anzeige
AW: Beispiel anbei
21.06.2015 15:52:06
Benjamin
Das klappt noch nicht... .mist...
er findet die FID und die FNO nicht
also nochmal auf Anfang :D (Tut mir wirklich leid wenn ich nerve)
Ich habe eine Tabelle die wie folgt aussieht
G3_FNO | Name | Zustand | G3E_FID | ...
12345 |xyz | 123abc |1234... | ...
Ich möchte also eine Beliebige Zeile auswählen, das Makro Staren und nur auf OK Drücken.
Wenn ok gedrückt wurde dann springt das Script in die 1. Zeile wo die Spaltennamen drinnstehen, und sucht dort nach der spalte in der FID und FNO stehen und kombiniert diese mit der ausgewählten zeile (Bsp.1223) also hier 1223,4 für FID & 1223,1 für fno.
Anschließend soll der inhalt der ausgewählten fid und fno an eine Batch gesendet werden

Anzeige
AW: Beispiel anbei
21.06.2015 19:45:30
Benjamin
Klappt leider nicht... fid und fno werden jetzt genau gespiegelt angezeigt.. sprich fno ist eigentlich fid und fid eigentlich fno...

Private Sub CommandButton1_Click()
Dim zeile As Long ' row ist ein Excel-Schlüsselwort
'Batchaufruf
Dim batch
'Ausgabestrings für die Parameter
Dim FNO_Text As String
Dim FID_Text As String
'Rangevariable zum Auslesen
Dim c As Range
'Suchbegriff definieren
FNO_Text = "G3E_FID"
FID_Text = "G3E_FNO"
Dim FID_Spalte As Long
Dim FNO_Spalte As Long
Dim FNO_Ob As Range
Dim FID_Ob As Range
'Letzte ausgewählte zeile auswählen
zeile = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
'FNO SUCHEN
With ActiveSheet.Range("a1:c" & zeile)
Set c = .Find(FNO_Text, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
FNO_Text = c.Value
FNO_Spalte = c.Column
MsgBox "FNO IN SPALTE " & FNO_Spalte
Else
MsgBox FNO_Text & "nicht gefunden"
Exit Sub
End If
End With
'FID SUCHEN
With ActiveSheet.Range("a1:c" & zeile)
Set c = .Find(FID_Text, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
FID_Text = c.Value
FID_Spalte = c.Column
MsgBox FID_Spalte
Else
MsgBox FID_Text & "nicht gefunden"
Exit Sub
End If
End With
MsgBox FNO_Text & " " & FID_Text
'Batchaufruf mit string parametern
'batch = Shell("C:\Users\Benjamin\Desktop\beispiel.bat " & FID_Ob.Value & " " & FNO_Ob.Value,  _
1)
'Fenster Schließen
Unload Me
End Sub

Anzeige
Update: :)
21.06.2015 20:26:09
Benjamin
Also ich hab den Zahlendreher gefunden und kann jetzt bestimmen in welcher spalte fid und fno sind.
jetzt würde ich gerne die Inhalte (values oder text .. je nachdem was geht) aus den Zelle mit der Adresse (zeile:Spalte_FID) und (Zeile:Spalte_FNO) auslesen und zwischenspeichern.

AW: Beispiel anbei
22.06.2015 14:24:04
Benjamin
Hallo Michael,
Ich muss in der ersten Zeile die Namen überprüfen weil es sein kann das die Ausgabe der vorbearbeitung variiert. Sprich mal ist FID in spalte 2 mal in spalte 5, gleiches gilt für FNO.
Mittlerweile bin ich schon was weiter habe aber immer noch keinen konkreten und eleganten Ansatz. Ich kann jetzt die Spalten ermittlen.. muss aber noch die .values der jeweiligen zeilen/spaltenkombinationen zwischenspeichern.
Hier der Aktuelle Code:
Public Ende As Long
Public batch
Option Explicit

Private Sub CommandButton1_Click()
Dim zeile As Long ' row ist ein Excel-Schlüsselwort
'Batchaufruf
Dim batch
'Ausgabestrings für die Parameter
Dim FNO_Text As String
Dim FID_Text As String
'Rangevariable zum Auslesen
Dim z As Range
'Suchbegriff definieren
FNO_Text = "G3E_FNO"
FID_Text = "G3E_FID"
'Spaltenzwischenspeicher
Dim FID_Spalte As Long
Dim FNO_Spalte As Long
'Ausgabeobjekte
Dim FNO_Ob As String
Dim FID_Ob As String
'Letzte ausgewählte zeile auswählen
zeile = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
'FNO SUCHEN
With ActiveSheet.Range("a1:z" & zeile)
'FNO Wird in der obersten Spalte gesucht um festzustellen wo in zeile fno und wo fid
Set z = .Find(FNO_Text, LookIn:=xlValues, lookat:=xlPart)
If Not z Is Nothing Then
'Probehalber habe ich den wert überkopiert
FNO_Text = z.Value
'Hier wird die Spalte zwischengespeichert
FNO_Spalte = z.Column
'Kontrollausgabe
MsgBox "FNO IN SPALTE " & FNO_Spalte
Else
'Errorausgabe
MsgBox FNO_Text & "nicht gefunden"
Exit Sub
End If
End With
'FID SUCHEN
With ActiveSheet.Range("a1:c" & zeile)
'FID Wird in der obersten Spalte gesucht um festzustellen wo in zeile fno und wo fid
Set z = .Find(FID_Text, LookIn:=xlValues, lookat:=xlPart)
If Not z Is Nothing Then
'Probehalber habe ich den wert überkopiert
FID_Text = z.Value
'Hier wird die Spalte zwischengespeichert
FID_Spalte = z.Column
'Kontrollausgabe
MsgBox "FID IN SPALTE " & FID_Spalte
Else
MsgBox FID_Text & "nicht gefunden"
Exit Sub
End If
End With
'Hier möchte ich die values der zellen mit dieser id wiedergeben
FNO_Ob = zeile & " ," & FNO_Spalte
FID_Ob = zeile & " ," & FID_Spalte
MsgBox "FNO in Zeile " & zeile & " , und in Spalte " & FNO_Spalte
MsgBox "FID in Zeile " & zeile & " , und in Spalte " & FID_Spalte
'Batchaufruf mit string parametern
batch = Shell("C:\Users\Benjamin\Desktop\Beispiel.bat " & FID_Ob & " " & FNO_Ob, 1)
'Fenster Schließen
Unload Me
End Sub

Anzeige
AW: Beispiel anbei
25.06.2015 20:13:42
Michael
Hi Ben,
irgendwie verstehe ich das ganze Problem nicht. In meinem Code (und auch in Deinem) Code suchst Du nach dem Wert für FID_Text; wenn der Wert gefunden wurde, wird er jeweils mit FID_Text = z.Value bzw. FNO_Text = z.Value übernommen, und damit ist der Kittel geflickt: Du mußt nur diese zwei Variablen in den batch-aufruf übernehmen:
batch = Shell("C:\Users\Benjamin\Desktop\Beispiel.bat " & FID_Text & " " & FNO_Text, 1)
Weiteres nur mit Beispieldatei.
Schöne Grüße,
Michael

Einfache suche und anschießend batch mit parameter
21.06.2015 16:04:53
Hajo_Zi
lese mal Forums FAQ.
Zu Crossposting lies diese Seite Hajo-Excel.de
Durch Crosspostuing werden mehrere Gruppen von Leuten mit dem gleichen Thema befasst, ohne dass sie voneinander wissen.
Naturgemäß laufen dann die Antworten, die im einen Forum "zu spät" gegeben wurden, ins Leere und bleiben ohne Resonanz.
Es reicht also, zunächst in einem Forum zu posten - wenn die Antworten dann unbefriedigend sein sollten, steht es einem anschließend immer noch offen, ein anderes Forum zu Rate zu ziehen.
Ich mache keine Werbung für andere Foren und verzichte darum auf den Link.

Anzeige
AW: Einfache suche und anschießend batch mit parameter
21.06.2015 16:09:45
Benjamin
ich bitte das zu entschuldigen :/
Es ging mir lediglich darum einen geeigneten Ansprechpartner zu finden.
Bekomm die jetzt auch nicht mehr gelöscht da die mit 10 min mail gemacht sind. Ich hoffe ihr seit ein wenig nachsichtig mit mir ich fühle mich hier auch sehr viel besser aufgehoben

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige