Witam
Chcę napisać makro do analizy dokumentu Excela składającego się z dwóch kolumn: jednej kolumny z wysokościami, a drugiej z kodem referencyjnym przypisanym do każdej wysokości (plik jest dołączony jako przykład).
Użytkownik rejestruje wartość wysokości w UF i chciałbym, aby makro spojrzało na plik Excel i pokazało mi w innym polu UF odniesienie przypisane do tej wysokości. Do tej pory mogę otworzyć Excela, ale gdy próbuję wykonać operacje porównawcze: wartość wprowadzona w UF przez użytkownika RÓWNA SIĘ wartości analizowanej kolumny, to nie działa.
Sprawdziłem i mój program analizuje wszystkie wartości (wyświetliłem msgboxy dla każdej testowanej pętli: if, while, for itp.), ale porównanie nie działa. Jakby nigdy nie znalazł równej wartości.
Jestem na 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
Z góry dziękuję.
Mewa w niebezpieczeństwie
hauteurs.xlsx
Cześć Mewa,
Biorąc pod uwagę kod, który wyświetlasz, jest to Vba excel i wiem co nieco o oprogramowaniu vba, ale musi być podobny. Jeśli dobrze rozumiem, co CHCESZ napisać, to to, że szuka w kolumnie A i w wierszu i, a i jest zmienną twojej pętli, aby utworzyć wszystkie wiersze?
Ale dla mnie PISZESZ, że chcesz patrzeć w kolumnie i więc 1=A, 2=B itd. w wierszu 2, więc nie poruszasz się w dobrym kierunku. Przejrzyj swoje warunki, ponieważ aby dokładnie przeanalizować wszystkie wiersze, musisz zacząć od 2 i przejrzeć kolejność w oznaczeniu komórki, ponieważ komórka to litera i cyfra.
Poza tym nie znam się w vba excelu ale na solidworks trzeba przekonwertować liczbę na znaki, aby uzyskać literę kolumny.
Witam
Problem wynika z pętli for.
Gdy wartość zostanie znaleziona, musisz wyjść z pętli, w przeciwnym razie kod będzie nadal wykonywany i zastąpi znalezioną wartość. Hurt:
For i = 1 To 50
If exSheet.Cells(i, 2).Value = oCabinHigh Then
oCodeHigh = Val(exSheet.Cells(i, 3))
Exit For
End If
Next
A dla komórek i kolumny w programie Excel zaczyna się od 1. Zasadniczo kolumna A, wiersz 1 = Komórki(1,1), w tym przypadku w kodzie sprawdzasz B i zwracasz C, które jest pustą wartością.
4 polubienia
@Roub25
W tym czasie dla mnie zrobiłem kopiuj/wklej mój kod, na moim oryginalnym excelu jestem w kolumnie B podczas czytania i otrzymuję wartość kolumny C, wiem, że nie mam z tym problemu. jak powiedziałem, przetestowałem pętle, sprawiając, że MsgBoxes wydają się sprawdzać, czy mogę odczytać dane z arkusza kalkulacyjnego.
Napisałem więc kod VBA w oprogramowaniu, aby odczytać Excela, zmodyfikowałem moją pętlę For zgodnie z @Cyril.f i proszę o poszukanie wartości 2110 (która istnieje w pierwszych 50 wartościach z odniesieniem 0), ale dopasowanie nie jest rozpoznawane.
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
Może mam błąd w deklarowaniu zmiennych, które spowodowałyby problem? lub formuła Val(...) nie działa lub ...?
Pętla skanuje wszystkie komórki od B3 do B20 (testowane przez wyświetlacz msgbox) ale to wszystko, nie mam nic więcej.
Witam
Po przeprowadzeniu testu na załączonym pliku Excel zmień liczbę kolumn:
Dla i = 1 do 50 Krok 1
Jeśli exSheet.Cells(i, 1). Wartość <> oCabinHigh Then
Inaczej
oCodeHigh = Val(exSheet.Cells(i, 2))
Zakończ jeżeli:
Następny
Pozdrowienia
1 polubienie
Dziękuję wszystkim, dokonując kumulacji wszystkich odpowiedzi, znalazłem rozwiązanie (które wydaje się działać na razie)
If Val(exSheet.Cells(i, 2)) = Val(oCabinHigh) Then
oCodeHigh = exSheet.Cells(i, 3)
Exit For
Else
Tak więc, a priori, to sposób identyfikacji wartości moich zmiennych nie był poprawny.
Jeszcze raz dziękuję wszystkim za szybkość odpowiedzi.
Czasami więc musisz wiedzieć, jak zachować prostotę i korzystać z natywnych narzędzi Excela:
Wybierasz swój pierwszy wiersz, przechodzisz do "Dane" "Automatyczny filtr"
Tak więc, klikając nazwę swojej kolumny, możesz stworzyć piękny filtr z opcjami zaawansowanymi.
Jeśli celem jest tylko znalezienie kodu powiązanego z długością, jest to więcej niż wystarczające, nie martwiąc się o to......