VBA Tools

Archiwum autora

Przeniesienie danych z transponowniem do pliku CSV

napisane przez Oskar w dniu piątek, 4 Maj, 2012, w kategorii Porady - Excel

Dla kilku tysięcy wierszy wykonanie poniższej transpozycji formułą jest niewykonalne, Tabela przestawna też nie da oczekiwanego efektu. Rozwiązaniem jest użycie kodu VBA.

Dla utrudnienia przyjmijmy iż nasze dane mają być exportowane nie w osobnym arkuszu ale do pliku CSV.

Poniżej układ jaki posiadamy (lewa strona) oraz jaki chcemy osiągnąć (prawa strona):

 

Dalej przedstawiam kod jakim można dokonać transpozycji:

Option Explicit

Sub run_this_procedure()
'MVP OShon from VBATools.pl
Const file$ = "c:\temp\plik.csv" '<- change this path
Const kwant$ = ";"
Dim f#: f = FreeFile()
Dim x&, max_row&: max_row = Cells(Rows.Count, "a").End(xlUp).Row
Dim pobrany$

Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
 OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Open file For Output As #f
For x = 2 To max_row
 If Cells(x, 1) = Cells(x + 1, 1) Then
   pobrany = pobrany & Cells(x, 2) & kwant
 Else
   pobrany = pobrany & Cells(x, 2) & kwant
   Print #f, Cells(x, 1) & kwant & pobrany
   pobrany = ""
 End If
Next x
Close #f
End Sub

Jeśli mamy wiele danych możemy okracić kod paskiem postępu lub elementami wskazującymi progres w pasku stanu Excela.

(c) Shon Oskar – www.VBATools.pl

Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

Skomentuj przejdź do artykułu ...

Dodanie obrazków do listy wyboru

napisane przez Oskar w dniu wtorek, 17 Kwiecień, 2012, w kategorii Porady - Excel

W załączniku prezentuje rozwiązanie – jak dodać obrazki do listy wyboru „listview” o dowolnej wielkości?

W sytuacji gdy menu automatycznie zwijało by swoje pozycje należy przewidzieć/zagwarantować niezbędne miejsce na jego wyświetlenie.

Ten przykład oparty jest na pętli, ale w podobny sposób możesz dodać zdjęcia o dowolnej nazwie, lub dodać je czytając konstrukcję pliku xml.

'MVP OShon from VBATools.pl
Dim scezka$, x&

Private Sub UserForm_Initialize()
scezka = ThisWorkbook.Path
ImageCombo1.Font.Size = 48
Image1.Visible = False

With ImageCombo1.ComboItems
 .Clear
 'możesz nie wyłowywać w pętli, ale jeden po drugim
 For x = 1 To 3 'ilosc elementów
 Image1.Picture = LoadPicture(scezka & "\XL_" & x & ".jpg")
 Call load_to_imageCombo("Nr_" & x, "Rekord " & x, "El_" & x)
 Next x
End With
ImageCombo1.ComboItems.item(1).Selected = True
End Sub

Sub load_to_imageCombo(klucz$, rekord$, zdjecie$)
 ImageList1.ListImages.Add Key:=zdjecie, Picture:=Image1.Picture
 Set ImageCombo1.ImageList = ImageList1
 ImageCombo1.ComboItems.Add Key:=klucz, _
 Text:=rekord, _
 Image:=zdjecie
End Sub

W załączniku przykład.

Porady_Zdjecie_z_listview (3)

(c) Shon Oskar – www.VBATools.pl

Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

Skomentuj przejdź do artykułu ...

Błąd DNS VBATools.pl

napisane przez Oskar w dniu niedziela, 15 Kwiecień, 2012, w kategorii Informacje

Przez ostatnie 2-3 dni był problem dostępu do zasobów VBATools. Nie wykluczone ze przyczyna była awaria ISP u którego usługa ta była opłacona. Podstawą aby tak sądzić był fakt iż po nr IP nasz serwis był dostępny. Nie wchodząc jednak w szczegóły miejmy nadzieje że taka przypadłość była incydentalna.

Skomentuj :, przejdź do artykułu ...

Sprawdzenie czy strona internetowa istnieje

napisane przez Oskar w dniu piątek, 13 Kwiecień, 2012, w kategorii Porady - Excel, Porady - Outlook

Pamiętacie może ankietę zorganizowaną przez Franmo, producenta aplikacji Odkurzacz. Pisałem na ten temat w ogłoszeniach na VBATools.

To iż akcja została zakończona mogę spokojnie podpowiedzieć rozwiązanie. Rozwiązanie bez podawania podpowiedzi, ale metody VBA na odszukanie istniejącej strony www.

To iż strona miała zawierać się w przedziale 4rech znaków i było tylko jedno rozwiązanie procedura wyników 4!=256 stron może być obsłużona w następujący sposób.

Option Explicit

Sub szukaj_wersji()
Const domain$ = ".franmo.pl/"
Dim czas As Single: czas = Timer
Dim z1&, z2&, z3&, z4&, q&, str$
Range("a:a").Clear
For z1 = 1 To 4
 For z2 = 1 To 4
 For z3 = 1 To 4
 For z4 = 1 To 4
 str = "http://" & literka(z1 & z2 & z3 & z4) & domain
 If Len(WebExists(str)) > 0 Then
 q = q + 1
 ActiveSheet.Hyperlinks.Add _
 Anchor:=Cells(q, 1), _
 Address:=str: GoTo koniec
 'bo i tak spodziewamy się 1 wyniku
 End If
 Next
 Next
 Next
Next
koniec:
Beep
Debug.Print Timer - czas
Debug.Print "Ilość stron " & q
End Sub

Function literka(wart$) As String
Dim u&, r$
 For u = 1 To Len(wart)
 r = r & LCase(Chr(Mid(wart, u, 1) + 64))
 Next u
literka = r
End Function

Private Function WebExists(strona$) As String
'kontrolka XML z referencji
'Dim objHttp As New MSXML2.ServerXMLHTTP

'lub późne wiązanie
Dim objHttp As Object

On Error GoTo blad:
Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
 With objHttp
 .setTimeouts 1000, 1000, 1000, 5000
 .Open "GET", strona, False
 .Send
 WebExists = .responsetext
 End With
blad:
If Err > 0 Then WebExists = ""
Set objHttp = Nothing
End Function

Wynik jest osiągalny po 116 sekundach (zakładając dobry dostęp do docelowego serwera). Metodę można usprawnić prowadzając funkcję opartą na właściwości parent, która będzie zagłębiała się w obrębie jednej pętli na zadeklarowaną ilość.

(c) Shon Oskar – www.VBATools.pl

Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

Skomentuj przejdź do artykułu ...

Podział zbiorczego pliku wizytówek na pojedyncze pliki VCF

napisane przez Oskar w dniu czwartek, 12 Kwiecień, 2012, w kategorii Freeware (bezpłatne), Narzędzia .NET, Narzędzia Outlook

Roundcube - open source webmail software

Jeden z formowiczów Outlook.pl miał potrzebę podziału wyeksportowanych kontaktów ze zbiorczego pliku VCF wyprodukowanego z programu Roundcube. To iż Outlook z pakietu Office nie potrafi podzielić takiego pliku i wyświetla go jako jeden kontakt, utrudnia jego wykorzystanie… (czytaj dalej …)

Skomentuj :, , , , przejdź do artykułu ...

Błąd bibliotek VBA „Object library invalid or contains references…”

napisane przez Oskar w dniu środa, 11 Kwiecień, 2012, w kategorii Informacje

Dzisiaj miałem trzy maszyny, na których pojawił sie komunikat: „Object library invalid or contains references to object definitions that could not be found”, który uniemożliwił korzystać z zaprogramowanych narzędzi w MS Office. Co zrobić w takim przypadku opisuje poniżej. (czytaj dalej …)

Komentarzy: 2 :, , przejdź do artykułu ...

Dodatek do FF Skype uniemożliwia kopiowanie w Excel

napisane przez Oskar w dniu środa, 11 Kwiecień, 2012, w kategorii Informacje

Od piątku walczyłem z przypadłością związaną z uniemożliwieniem poprawnego kopiowania właściwości obszaru w MS Excel. Objawiało się to brakiem zaznaczenia obszaru (podświetlona ramka) a kończyło się wklejeniem tylko tekstu (bez formatów wypełnienia, treści formuły, kolorów itp..). Jedynym sposobem aby skopiować formułę było przeciągnięcie formuły z wcześniej umieszczonej powyżej. (czytaj dalej …)

Skomentuj :, , przejdź do artykułu ...

VS2011 Beta

napisane przez Oskar w dniu środa, 4 Kwiecień, 2012, w kategorii Informacje

Stopniał śnieg i chyba już w tym roku go nie zobaczymy. Przyszedł też czas na to aby odurzyć parę przełożonych na później acz istotnych tematów.

Jednym z nich jest test Visual Studio 2011. Jego pojawienie się na rynku zbiega się z emisją wersji Developer i Customer Preview o którym jakiś czas pisałem. W nim właśnie będzie można odnaleźć nowe szablony dedykowane dla tego systemu. (czytaj dalej …)

Skomentuj :, przejdź do artykułu ...

Odkurzacz 13

napisane przez Oskar w dniu wtorek, 3 Kwiecień, 2012, w kategorii Informacje

Fanmo wypuścił nową wersje odkurzacza – już do pobrania na warunkach ankiety. Dla tych którzy nie spotkali się do tej pory z jego wcześniejszymi wersjami należy się małe wprowadzenie.

Odkurzacz to program, mający na zadanie odchudzenia/odkurzenia naszego systemu operacyjnego ze wszystkich zbędnych plików. (czytaj dalej …)

Skomentuj :, przejdź do artykułu ...

CodeTwo Public Folders do wygrania 10×10 licencji

napisane przez Oskar w dniu piątek, 30 Marzec, 2012, w kategorii Informacje

ObrazekJaką funkcję programu Microsoft Outlook lubisz najbardziej i dlaczego? Tak brzmi pytanie konkursowe. Czy nie jest za trywialne, ale bogactwo funkcjonalności tego wyjątkowego klienta pocztowego daje mnóstwo możliwości.

Spośród 10 najciekawszych odpowiedzi producent przekaże ich autorom nagrodę w postaci licencji do programu pracy grupowej w Outlooku CodeTwo Public Folders (na 10 stanowisk każda).

Jako moderator forum Outlook.pl zachęcam do wzięcia udziału. Taka okazja może się więcej nie powtórzyć!

(czytaj dalej …)

1 Komentarz :, , przejdź do artykułu ...