Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[EXCEL][VBA] zmienna nazwa pliku

figram 09 Lut 2010 22:28 9318 6
  • #1 09 Lut 2010 22:28
    figram
    Poziom 2  

    WITOJCIE.
    Napisałem makro, które ma porównywać wartości w różnych plikach, jeśli znajdzie takie same komórki to kopiuje komórke która znajduje sie obok w odpowiednie miejsce w drugim pliku (ale to nie jest ważne). To co sprawia mi kłopot to potrzeba używania różnych nazw pliku, a w poleceniu

    Windows("nazwa_pliku").Activate

    nie da użyć się zmiennej [ Windows(nazwa).Activate].

    Jak mogę z tego wybrnąć??

    Poniżej zamieszczam makro, jeśli mielibyście jakieś uwagi usprawniające to chętnie wysłucham:)

    Code:
    Sub silnik(nazwa_pliku)
    
    Dim plik As Workbook

    nazwa = ThisWorkbook.Sheets("zam_od_handlowca").Cells(7, 4).Value // tutaj chciałem przypisac do zmiennej nazwę pliku, jest inna od
    Application.ScreenUpdating = False // nazwa_pliku ze wzgledu na potrzebny format
    Set plik = Workbooks.Open(Filename:= _
    nazwa_pliku)
    Sheets("dyl").Select

    Windows("wzorzec_zamowienia.xls").Activate // stala nazwa

    Sheets("zam_od_handlowca").Select
    Range("C16").Select

    For i = 15 To 170
    produkt = Cells(i, 3).Value
    Windows(nazwa).Activate // TU wlasnie mam problem
    Cells(15, 3).Select
    x = 0
    Do While ActiveCell.Value <> produkt And x < 200
    ActiveCell.Offset(1, 0).Select
    x = x + 1
    Loop
    If ActiveCell.Value = produkt Then
    gramatura = ActiveCell.Offset(0, -1).Value
    ilosc = ActiveCell.Offset(0, 2).Value
    cena = ActiveCell.Offset(0, 1).Value
    Windows("wzor_zamowienia.xls").Activate // ta nazwa jest stala wiec nie ma problemu
    If Cells(i, 2) = gramatura Then
    Cells(i, 5) = ilosc
    End If
    If Cells(i, 4) = cena Then
    Cells(i, 10) = "ok cena"
    Else
    Cells(i, 10) = "zla cena"
    End If

    End If
    Windows("wzor_zamowienia.xls").Activate


    Next i
    Application.ScreenUpdating = True
    End Sub


    Z gory dziekuje za wszelkie insynuacje.

    0 6
  • Pomocny post
    #2 10 Lut 2010 08:49
    adamas_nt
    Moderator Programowanie

    Zamiast

    Code:
    nazwa = ThisWorkbook.Sheets("zam_od_handlowca").Cells(7, 4).Value // tutaj chciałem przypisac do zmiennej nazwę pliku, jest inna od
    
    Application.ScreenUpdating = False // nazwa_pliku ze wzgledu na potrzebny format
    Set plik = Workbooks.Open(Filename:= _
    nazwa_pliku)
    Sheets("dyl").Select

    Windows("wzorzec_zamowienia.xls").Activate // stala nazwa

    Sheets("zam_od_handlowca").Select
    Range("C16").Select

    For i = 15 To 170
    produkt = Cells(i, 3).Value
    Windows(nazwa).Activate // TU wlasnie mam problem
    zastosowałbym
    Code:

    Application.ScreenUpdating = False // nazwa_pliku ze wzgledu na potrzebny format
    Set nazwa = Workbooks.Open(Filename:= Sheets("zam_od_handlowca").Cells(7, 4).Value)
    Sheets("dyl").Select

    Windows("wzorzec_zamowienia.xls").Activate // stala nazwa

    Sheets("zam_od_handlowca").Select
    Range("C16").Select

    For i = 15 To 170
    produkt = Cells(i, 3).Value
    Windows(nazwa.Name).Activate
    i gdzieś na końcu
    Code:
    Set nazwa = Nothing

    0
  • #3 10 Lut 2010 09:06
    jakubw
    Poziom 18  

    Zacznijmy od tego że da się użyć zmiennej.

    Code:

    Sub test()
    plik = "test.xls"                            //ten zmieniający się plik
    Workbooks.Open ("c:\test.xls")       //tu jakaś ścieżka do niego
    Windows(plik).Activate                  //tu go aktywujemy ( nie widać bo jest 1szy )
    Windows("glowny.xls").Activate          // Tu aktywujemy plik z makrem
    Windows(plik).Activate                     //tu aktywujemy ten zmienny plik żeby pokazać
    End Sub


    Tak naprawdę musisz tylko sobie zmieniać ten plik jakoś.
    Na przykład na początku makra stworzyć FileDialog do wybierania z dysku
    tego zmiennego pliku i podstawianie wybranego pliku do zmiennej plik.
    I to tyle
    Powodzenia
    .
    .
    nudziło mi się więc dorobiłem Ci resztę, notabene z helpa
    Code:

    Sub test()

      Dim fDialog As Office.FileDialog
      Dim varFile As Variant
     
      Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

      With fDialog
          .AllowMultiSelect = False
          .Title = "Wybierz plik od przedstawiciela"
          .Filters.Clear
          .Filters.Add "Pliki Arkuszy Excela", "*.xls"
          .Filters.Add "Wszystie pliki", "*.*"
         
          If .Show = True Then

          For Each varFile In .SelectedItems
                sciezka = varFile
          Next
          Else
             MsgBox "Wcisnąłeś Cancel"
          End If
      End With

    plik = Dir(sciezka)

    Workbooks.Open (sciezka)
    Windows(plik).Activate
    Windows("new.xls").Activate
    Windows(plik).Activate
    End Sub



    a to już wynik razem z oknem dialogowym.

    Jak to mówią w każdym serwisie "U mnie to działa" :)

    0
  • #4 10 Lut 2010 17:31
    figram
    Poziom 2  

    Dziękuje bardzo za odpowiedzi:)
    problem, który miałem polegał na tym że chciałem nazwę zmiennego pliku pobierać z komórki w arkuszu ale chyba to rozwiązanie z dialog boxem jest lepsze ze względu na użytkującego:)
    Dam znać jak przetestuje wieczorem.
    i Jeszcze raz wielkie dzięki

    Dodano po 4 [godziny] 33 [minuty]:

    Przetestowałem i wybrałem sposób, który podał adamas_nt. Niestety nie mogę skorzystać z okien dialogowych ponieważ wyskakuje mi błąd

    Cytat:

    Dim fDialog As Office.FileDialog ---- user - defined type not defined


    wiec kompletenie nie kumam czym to jest spowodowane.
    Jakies sugestie?

    0
  • #5 11 Lut 2010 09:42
    jakubw
    Poziom 18  

    Hmm. Ciekawe.
    To skorzystaj z inputa.

    np.:

    Code:

    plik = InputBox("PODAJ ŚCIEŻKĘ DO PLIKU")

    lub tak jak chciałeś wcześniej z komórki.

    0
  • #6 11 Lut 2010 09:54
    marcinj12
    Poziom 40  

    Żeby skorzystać z opcji FileDialog musisz dołączyć referencję do biblioteki: w edytorze VBA Tools->References i dać ptaszka przy Microsoft Office 11 Library albo jakoś w tym stylu

    0
  • #7 13 Lut 2010 01:28
    figram
    Poziom 2  

    dziekuje za odpowiedzi poprubujemy:)

    P.S.
    Podziwiam za cierpliwość i chęć niesienia pomocy.

    0