Porada 29 czerwca 2012
CommonControls - ProgressBar, ListView, TreeView - "Obiekt niedostępny na tym komputerze."
Po aktualizacji Windows z 13.04.2012 na niektórych komputerach, na których uruchamiane są napisane przeze mnie makra zaczęły się pojawiać komunikaty błędów "Obiekt niedostępny na tym komputerze."
Makra tworzę na komputerze z Windows 7 64 bit, a opisany powyżej problem pojawia się na komputerach z Windows XP.
Rozwiązaniem może być dynamiczne tworzenie tych kontrolek w czasie pracy programu.
Jeśli kontrolka ma być "widziana" z poziomu projektu to w zwykłym module należy umieścić deklaracje zmiennej, która będzie reprezentować kontrolkę w kodzie:
ListView:
Public LV As MSComctlLib.ListView
TreeView:
Public TV As MSComctlLib.TreeView
ProgressBar:
Public PG As MSComctlLib.ProgressBar
Jeśli wystarczy "widzialność" na poziomie modułu formularza, to wówczas deklaracje należy wstawić na samej górze modułu formularza, a wyglądają one następująco:
ListView:
Dim LV As MSComctlLib.ListView
TreeView:
Dim TV As MSComctlLib.TreeView
ProgressBar:
Dim PG As MSComctlLib.ProgressBar
Następnie w procedurze UserForm_Activate() tworzymy te kontrolki i ustawiamy odpowiednie właściwości.
ListView:
Private Sub UserForm_Activate()
Set LV = Me.Controls.Add("MSComctlLib.ListViewCtrl.2")
With LV
.Top = 10
.Left = 6
.Width = 100
.Height = 100
.BorderStyle = ccNone
.View = lvwReport
End With
End Sub
TreeView:
Private Sub UserForm_Activate()
Set TV = Me.Controls.Add("MSComctlLib.Treectrl.2")
With TV
.Top = 10
.Left = 126
.Width = 100
.Height = 100
.Style = tvwTreelinesPictureText
.Indentation = 16
End With
End Sub
ProgressBar:
Private Sub UserForm_Activate()
Set PG = Me.Controls.Add("MSComctlLib.ProgCtrl.2")
With PG
.Top = 130
.Left = 6
.Width = 220
.Height = 15
.Min = 0
.Max = 100
.Scrolling = ccScrollingSmooth
End With
End Sub
Przy zakończeniu programu należy oczywiście zwolnić pamięć:
Set LV = Nothing
Set PG = Nothing
Set TV = Nothing
Zapraszam do dyskusji:
http://www.makravba.pl/?go=forum&go2=zobacz&id_watek=2317&return=watek
zamieścił: admin
25 czerwca 2012
Dodałem dziś możliwość komentowania artykułów oraz makr. Wykorzystałem do tego funkcję Facebooka.
Zapraszam do komentowania i dyskusji!
zamieścił: admin
19 czerwca 2012
Nowe makro w dziale Inventor - Material Profiler
zamieścił: Harry
8 maja 2012
Nowy link w dziale linki.
zamieścił: admin
27 kwietnia 2012
Nowe makro w dziale Excel.
zamieścił: admin
5 marca 2012
Problem z wyświetlaniem listy wątków forum dyskusyjnego został rozwiązany.
Był on związany z kwerendą liczącą ilość postów w danym wątku. Serwer MySQL naszego dostawcy nie był w stanie wykonać tej kwerendy, w związku z czym informacja o ilości postów w danym wątku została usunięta.
zamieścił: admin
Porada 10 lutego 2012
Wyrażenia regularne.
Wyrażenia regularne mają znacznie większe możliwości niż operator Like.
Użyć ich można nie tylko do sprawdzania poprawności danych, ale także do wyłuskiwania z tekstu podciągów spełniających określone założenia oraz do zamiany jednego ciągu na drugi.
Poniżej trzy przykłady ilustrujące te możliwości:
Sub Regex_Przyklad_1()
'Sprawdzanie poprawności adresu mailowego
Dim oRegex As Object
Dim strText As String
Set oRegex = CreateObject("VBScript.Regexp")
strText = " admin@vbamania.pl"
'wzorzec e-maila
oRegex.Pattern = "[a-z0-9_.-]+@[a-z0-9_.-]+\.\w{2,4}"
If oRegex.Test(strText) Then MsgBox "Adres prawidłowy - " & strText Else MsgBox "Adres nieprawidłowy - " & strText
Set oRegex = Nothing
End Sub
Sub Regex_Przyklad_2()
'wyłuskiwanie liczb z tekstu
Dim oRegex As Object, oMatches As Object, oM As Object
Dim strText As String, strKom As String, strP As String
Set oRegex = CreateObject("VBScript.Regexp")
strText = "Wyplata: 3500 PLN, ZUS: 1018 PLN, II filar: 190 PLN, III filar: 25 PLN"
'tylko 4-cyfrowe liczby
oRegex.Pattern = "(^|\D)\d{4}(\D|$)"
'liczba cyfr od 2 do 3
'oRegex.Pattern = "(^|\D)\d{2,3}(\D|$)"
'wyszukuje wszystkie ciągi znaków spełniające warunek
oRegex.Global = True
'wyszukuje tylko pierwszy ciąg znaków spełniający warunek
'oRegex.Global = false
Set oMatches = oRegex.Execute(strText)
If oMatches.Count > 0 Then
For Each oM In oMatches
If oM Is oMatches(oMatches.Count - 1) Then strP = "" Else strP = ", "
strKom = strKom & oM.Value & strP
Next oM
strKom = "Dopasowania: " & strKom
Else
strKom = "Brak dopasowań"
End If
MsgBox strKom
Set oRegex = Nothing
Set oMatches = Nothing
End Sub
Sub Regex_Przyklad_3()
'Zamiana jednego ciągu na inny
Dim oRegex As Object
Dim strText As String, strNewText As String
Dim dblWynik As Double
Set oRegex = CreateObject("VBScript.Regexp")
strText = "Wynik wynosi: %d" & vbCrLf & _
"Result is: %d"
'wyszukuje wszystkie ciągi znaków spełniające warunek
oRegex.Global = True
'wyszukuje tylko pierwszy ciąg znaków spełniający warunek
'oRegex.Global = False
'wzorzec
oRegex.Pattern = "%d"
dblWynik = 10.244
strNewText = oRegex.Replace(strText, dblWynik)
MsgBox strNewText
Set oRegex = Nothing
End Sub
zamieścił: admin
Porada 9 lutego 2012
Ikony w kolumnach ListView.
Wprowadziłem dziś nową funkcjonalność serwisu - porady.
Oto pierwsza z nich:
Czy wiecie, że w kontrolce ListView można umieszczać ikony w innych kolumnach, a nie tylko w pierwszej?
Oto, jak to działa:
Załóżmy, że mamy formularz z kontrolką ImageList. W niej umieszczone z kolei dwie ikony z dodanymi kluczami "icon1" oraz "icon2".
Kontrolki tej potrzebujemy jako źródła ikon do ListView, z właściwością View ustaloną na lvwReport.
Oto kod:
Private Sub UserForm_Activate()
Me.ListView1.SmallIcons = Me.ImageList1
Dim oLi As ListItem
Set oLi = Me.ListView1.ListItems.Add(, , "Kolumna nr 1", , "icon1")
oLi.ListSubItems.Add , , "Kolumna nr 2", "icon2"
Set oLi = Nothing
End Sub
zamieścił: admin
1 listopada 2011
Witam ponownie po półtoramiesięcznej przerwie.
Awaria serwisu była spowodowana atakiem wirusa. Mam nadzieję, że udało mi się pozbyć związanych z tym problemów i serwis będzie kontynuował swoją działalność.
zamieścił: admin
13 lutego 2011
W dziale Excel nowa wersja makra BatchXLS.
Ulepszenia w stosunku do poprzedniej wersji dotyczą interfejsu użytkownika.
zamieścił: admin
wszystkich stron: 13
|