Einfache suche und anschießend batch mit parameter

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

Betrifft: Einfache suche und anschießend batch mit parameter
von: Benjamin
Geschrieben am: 21.06.2015 14:16:33

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

Bild

Betrifft: AW: Einfache suche und anschießend batch mit parameter
von: Michael
Geschrieben am: 21.06.2015 14:51:13
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

Bild

Betrifft: AW: Einfache suche und anschießend batch mit parameter
von: Benjamin
Geschrieben am: 21.06.2015 14:59:32
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?

Bild

Betrifft: Beispiel anbei
von: Michael
Geschrieben am: 21.06.2015 15:25:27
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

Bild

Betrifft: AW: Beispiel anbei
von: Benjamin
Geschrieben am: 21.06.2015 15:52:06
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

Bild

Betrifft: AW: Beispiel anbei
von: Benjamin
Geschrieben am: 21.06.2015 19:45:30
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


Bild

Betrifft: Update: :)
von: Benjamin
Geschrieben am: 21.06.2015 20:26:09
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.

Bild

Betrifft: AW: Beispiel anbei
von: Benjamin
Geschrieben am: 22.06.2015 14:24:04
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


Bild

Betrifft: AW: Beispiel anbei
von: Michael
Geschrieben am: 25.06.2015 20:13:42
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

Bild

Betrifft: Einfache suche und anschießend batch mit parameter
von: Hajo_Zi
Geschrieben am: 21.06.2015 16:04:53
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.

Bild

Betrifft: AW: Einfache suche und anschießend batch mit parameter
von: Benjamin
Geschrieben am: 21.06.2015 16:09:45
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Einfache suche und anschießend batch mit parameter"