Akademia VBA

czyli jak uzyskać władzę nad światem … danych

Jak z VBA wywołać okno dialogowe do pobrania nazwy pliku od użytkownika

Kategorie: Excel VBA,Office VBA,Uniwersalne VBA — Dariusz Kolasa o 12:39, 21 Lip 2011

Pod Excelem można to zrobić na dwa sposoby:
Korzystając z biblioteki Office (funkcja bardzo podobna do WskazFolder):

Function WskazPlik(TytulOkna As String, TytulPrzycisku As String) As String
    Dim Okno As FileDialog
    Dim Wybrane As String
    Set Okno = Application.FileDialog(msoFileDialogFilePicker)
    Okno.Title = TytulOkna
    Okno.ButtonName = TytulPrzycisku
    If Okno.Show = -1 Then
        WskazPlik = Okno.SelectedItems(1)
    End If
End Function

Lub korzystając z metody Excela:

Function WskazPlik_MetodaExcel() As String
    WskazPlik_MetodaExcel = Excel.Application.GetOpenFilename()
End Function

Pierwsza funkcja jest nieco bardziej skomplikowana ale bardziej uniwersalna, druga jest skrajnie prosta i nie wymaga niczego poza Excelem. Oczywiście obie można rozbudować o możliwość filtrowania plików…

W komentarzach znajduje się dyskusja na temat konstrukcji wiążącej With..End With

9 komentarzy »

37

Komentarz- Monika Morawska

9 Kwi 2012 @ 22:15

Zawsze mnie zastanawia, dlaczego używając zmiennych obiektowych ludzie nie skracają sobie sięgania do właściwości obiektów przez „Width”?

[cc lang=”vb”]
Function WskazPlik(TytulOkna As String, TytulPrzycisku As String) As String
Dim Okno As FileDialog
Dim Wybrane As String
Set Okno = Application.FileDialog(msoFileDialogFilePicker)
With Okno
.Title = TytulOkna
.ButtonName = TytulPrzycisku
If .Show = -1 Then
WskazPlik = .SelectedItems(1)
End If
End With
End Function
[/cc]

38

Komentarz- Dariusz Kolasa

10 Kwi 2012 @ 9:40

po pierwsze z lenistwa
po drugie akurat w tym wypadku chyba to moje jest czytelniejsze, ale to oczywiście kwestia dyskusyjna
po trzecie – zdarzają się błędy użycia np With Selection, gdzie w konstrukcji With obiekt jest przedefiniowany, np:
[cc lang=”vb”]
Sub NieprawidloweUzycieWith()
With Selection
.Font.ColorIndex = 33
.CurrentRegion.Select
.Font.ColorIndex = 34
End With
End Sub
[/cc]

Komentarz- petereus

7 Paź 2014 @ 17:54

a jak z .SelectedItems(1) pobrać nazwe pliku?

pomijając Mid()

Komentarz- Darek Kolasa

7 Paź 2014 @ 19:31

no ale właśnie .SelectedItems(1) to jest wprost nazwa pliku wskazanego w oknie przez uzytkownika, i właśnie ona jest zwracana przez funkcję
Chyba, że chodzi o samą nazwę pliku a nie pełną (bez foldera), to wtedy oczywiście trzeba użyć funkcji tekstowych np InStrRev, aby odnaleźć ostatni ukośnik, a potem mid, jak najbardziej :)

Komentarz- Wojtek

15 Paź 2014 @ 14:49

Dlaczego ta funkcja nie działa w Outlooku (2010)? Po wywołaniu dostaję komunikat:
„Run-time error 438
Object doesn`t support this property or method”.

Pozdrawiam!
Wojtek

Komentarz- Wojtek

21 Paź 2014 @ 7:42

Chyba nikt tu nie odpisuje na komentarze?;)

Przygotowuję formularz w Outlooku, który będzie wysyłał wiadomość na zawsze ten sam adres. Będzie miejsce na dodanie komentarza, ale najistotniejszym elementem będzie możliwość dodawania załączników. Stąd konieczność użycia okna dialogowego wskazującego plik. I tu pojawia się problem. Powyższy kod działa w Word, Excel i pewnie innych programach pakietu Office, ale w Outlook wywala powyższy błąd. Czy ktoś jest w stanie pomóc mi rozwiązać ten problem?

Komentarz- Darek Kolasa

5 Lis 2014 @ 21:36

dodaj referencję do biblioteki Microsoft Office

Komentarz- rapi22

20 Lip 2015 @ 20:42

a jak zrobić aby otworzyło domyślnie katalog z lokalizacji sieciowej gdzie trzeba wskazać dany plik.
Od razu informuje ze zasób nie może być zmapowany gdyż nie ma uprawnień na koncie użytkownika do mapowania.

Komentarz- Darek Kolasa

21 Lip 2015 @ 10:57

można spróbować użyć polecenia ChDir

RSS komentarzy do wpisu. Adres trackback

Zostaw komentarz

Dozwolone znaczniki XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>