Einlesen eines Wertes in Excel über SW und Abrufen einer Referenz in derselben Tabelle

Hallo

Ich möchte ein Makro schreiben, um ein Excel-Dokument zu untersuchen, das aus zwei Spalten besteht: eine Spalte mit Höhen und die zweite mit einem Referenzcode, der jeder Höhe zugewiesen ist (eine Datei ist als Beispiel angehängt).

Der Benutzer registriert einen Höhenwert in einem UF und ich möchte, dass das Makro sich die Excel-Datei anschaut und mir in einem anderen Feld des UF die Referenz anzeigt, die dieser Höhe zugewiesen ist. Bisher kann ich Excel öffnen, aber wenn ich versuche, die Vergleichsoperationen durchzuführen: Der vom Benutzer in das UF eingegebene Wert entspricht dem Wert der untersuchten Spalte, funktioniert nicht.

Ich habe alle Werte überprüft und mein Programm prüft sie (ich habe für jede getestete Schleife msgboxes angezeigt: if, while, for, etc.), aber der Vergleich funktioniert nicht. Als ob er nie den gleichen Wert gefunden hätte.

Ich bin im SW 2012

Private Sub MAJCmd_Click()

Dim xlApp           As Excel.Application
Dim xlWB            As Excel.Workbook
Dim exSheet         As Excel.Worksheet
Dim i               As Integer

'On ouvre Excel
Set xlApp = New Excel.Application
xlApp.Visible = True


'On ouvre le fichier de références des panneaux
Set xlWB = xlApp.Workbooks.Open("Y:\PDM\NAVIRES\TEST VALIDATION\CAO\TEST-Standards\Hauteurs Panneaux.xlsx")
Set exSheet = xlWB.ActiveSheet
xlApp.Visible = True


For i = 1 To 50 Step 1
    If exSheet.Cells(i, 2).Value <> oCabinHigh Then
    Else
    oCodeHigh = Val(exSheet.Cells(i, 3))
    End If
Next
        
MsgBox oCodeHigh
        
xlWB.Close
xlApp.Quit

Set exSheet = Nothing
Set xlWB = Nothing
Set xlApp = Nothing

End Sub

Vielen Dank im Voraus.

Eine Möwe in Not


hauteurs.xlsx

Hallo Möwe,

Angesichts des von Ihnen angezeigten Codes handelt es sich um Vba Excel und ich weiß ein oder zwei Dinge über VBA SW, aber es muss ähnlich sein. Wenn ich richtig verstehe, was Sie schreiben möchten, ist, dass es in Spalte A und in Zeile i sucht, wobei i die Variable Ihrer Schleife ist, um alle Zeilen zu erstellen? 

Aber für mich SCHREIBST du, dass du in Spalte i schauen willst, also 1=A, 2 =B usw. in Zeile 2, also bewegst du dich nicht in die richtige Richtung. Überprüfen Sie Ihre Bedingungen, denn um alle Zeilen zu überprüfen, müssen Sie bei 2 beginnen und die Reihenfolge in Ihrer Zellenbezeichnung überprüfen, da eine Zelle aus einem Buchstaben und einer Zahl besteht.

Darüber hinaus weiß ich nicht, in VBA Excel, aber auf SolidWorks müssen Sie die Zahl in Zeichen umwandeln, um den Buchstaben der Spalte zu erhalten.

Hallo

Das Problem ergibt sich aus der for-Schleife.

Wenn der Wert gefunden wird, müssen Sie aus der Schleife aussteigen, sonst wird der Code weiter ausgeführt und überschreibt den gefundenen Wert. Großhandel:

For i = 1 To 50
    If exSheet.Cells(i, 2).Value = oCabinHigh Then
         oCodeHigh = Val(exSheet.Cells(i, 3))
         Exit For
    End If
Next

Und für die Zellen und Spalten in Excel beginnt es bei 1. Grundsätzlich gilt: Spalte A, Zeile 1 = Zellen(1,1), in diesem Fall prüfen Sie in Ihrem Code B und geben C zurück, was ein leerer Wert ist.

4 „Gefällt mir“

@Roub25

Zu der Zeit habe ich ein Kopieren / Einfügen meines Codes gemacht, in meinem ursprünglichen Excel bin ich in Spalte B beim Lesen und ich bekomme einen Spaltenwert C, ich weiß, dass ich dafür kein Problem habe. Wie gesagt, ich hatte die Schleifen getestet, indem ich MsgBoxes erscheinen ließ, um zu bestätigen, dass ich die Daten aus der Tabelle lesen konnte.

Also habe ich einen VBA-Code unter SW geschrieben, um Excel zu lesen, ich habe meine For-Schleife wie durch @Cyril.f angegeben geändert und ich bitte darum, nach dem Wert 2110 zu suchen (der in den ersten 50 Werten mit der Referenz 0 vorhanden ist), aber die Übereinstimmung wird nicht erkannt.

For i = 3 To 20 Step 1
    MsgBox exSheet.Cells(i, 2).Value & "....." & exSheet.Cells(i, 3).Value
    If exSheet.Cells(i, 2).Value = oCabinHigh.Value Then
        oCodeHigh = Val(exSheet.Cells(i, 3))
        Exit For
    End If
Next

Vielleicht habe ich einen Fehler beim Deklarieren von Variablen, der ein Problem verursachen würde? oder die Val(...)-Formel funktioniert nicht oder ...?

Die Schleife scannt alle Zellen von B3 bis B20 (getestet vom msgbox-Display), aber das war's, mehr habe ich nicht.

 

Hallo

Ändern Sie nach einem Test der angehängten Excel-Datei die Anzahl der Spalten:

Für i = 1 bis 50 Schritt 1
    Wenn exSheet.Cells(i, 1). Wert <> oCabinHigh Then
    Oder
    oCodeHoch = Wert(exBlatt.Zellen(i, 2))
    Ende, wenn
Nächster

Herzliche Grüße

1 „Gefällt mir“

Vielen Dank an alle, indem ich alle Antworten kumuliert habe, habe ich die Lösung gefunden (die im Moment zu funktionieren scheint)

    If Val(exSheet.Cells(i, 2)) = Val(oCabinHigh) Then
        oCodeHigh = exSheet.Cells(i, 3)
        Exit For
    Else

Es war also a priori die Art und Weise, den Wert meiner Variablen zu identifizieren, die nicht korrekt war.

Nochmals vielen Dank an alle für die Schnelligkeit Ihrer Antworten.

Manchmal muss man also wissen, wie man es einfach hält und die nativen Tools von Excel verwendet:

Sie wählen Ihre erste Zeile aus und gehen zu 'Daten' 'Automatischer Filter'

Wenn Sie also auf den Namen Ihrer Spalte klicken, können Sie einen schönen Filter mit erweiterten Optionen erstellen.

Wenn das Ziel nur darin besteht, den Code zu finden, der der Länge zugeordnet ist, ist das mehr als genug, ohne sich darüber Gedanken machen zu müssen......