vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest niedziela, 12 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Problem makra w vba


otwartyotwarty rozpoczął: glorm postów: 10



napisał: glorm
postów: 7


umieszczony:
24 stycznia 2012
20:03

edytowany:
24 stycznia 2012
20:03

  
napisał: glorm
postów: 7


umieszczony:
24 stycznia 2012
19:52

  
Thx za pomoc uratowałeś mi skórę
napisał: Trebor
postów: 1209


umieszczony:
24 stycznia 2012
19:38

  
Pobaw się trochę x i y
Private Sub CommandButton1_Click()
Dim X As Double, Y As Double, z As Double
Dim rv As Long, hPen As Long, hBrush As Long
Dim hForm As Long, dcForm As Long, oDC As Long
Dim r As Integer, g As Integer
Const HS_VERTICAL As Long = 1
Const PS_SOLID As Long = 0
hForm = FindWindow(vbNullString, "API nn")
dcForm = GetDC(hForm)
oDC = SaveDC(dcForm)
For X = 2 To 51
For Y = 2 To 51
z = Cells(Y, X)
If z < 0.1 Then kolor = RGB(0, 0, 0)
 If z >= 0.1 And z < 10 Then kolor = RGB(0, 1000, 0)
 If z >= 10 And z < 20 Then kolor = RGB(50, 800, 0)
 If z >= 20 And z < 30 Then kolor = RGB(100, 700, 0)
 If z >= 30 And z < 40 Then kolor = RGB(200, 600, 0)
 If z >= 40 And z < 50 Then kolor = RGB(400, 500, 0)
 If z >= 50 And z < 60 Then kolor = RGB(600, 400, 0)
 If z >= 60 And z < 70 Then kolor = RGB(800, 200, 0)
 If z >= 70 And z <= 80 Then kolor = RGB(1000, 0, 0)
 If z > 80 Then kolor = RGB(0, 0, 0)

hBrush = CreateSolidBrush(kolor)
hPen = CreatePen(PS_SOLID, 2, kolor)
rv = SelectObject(dcForm, hBrush)
rv = SelectObject(dcForm, hPen)
rv = RoundRect(dcForm, (51 - X) * 5, (51 - Y) * 5, (51 - X) * 5 + 5, (51 - Y) * 5 + 5, 0, 0)
DeleteObject hPen
DeleteObject hBrush
 
Next Y
Next X
RestoreDC dcForm, oDC
ReleaseDC hForm, dcForm
End Sub

napisał: glorm
postów: 7


umieszczony:
24 stycznia 2012
13:28

  
For X = 2 To 51
For Y = 2 To 51
z = Cells(X, Y)

w tej procedurze powinny być odczytywane najpierw y

For X = 2 To 51
For Y = 2 To 51
z = Cells(Y, X)

tyle ze wtedy macierz jest do góry nogami oficjalnie powinna być w tym całym programie jeszcze jakaś formuła która obróci obrazek (Y max - Y) natomiast aby powiększyć obrazek rysowany w API nn chyba trzeba użyć interpolacji zawartej w arkuszu ma ktoś pomysł na takie rozwiązanie ??
napisał: glorm
postów: 7


umieszczony:
24 stycznia 2012
13:28

edytowany:
24 stycznia 2012
13:44

  
napisał: glorm
postów: 7


umieszczony:
23 stycznia 2012
21:13

edytowany:
23 stycznia 2012
21:23

  
Procedury barwienia są ok jednak wydaje mi się że macierz jest przestawiona o 90 stopni w lewo na rysunku nie wiem czym to jest spowodowane natomiast rozmiar macierzy jest dobry ale myślałem ze rysunek da się w jakiś sposób powiększyć i wyśrodkować w oknie API nn natomiast mówiąc o przykładach na zamieszczonym kodzie ciężko mi zdefiniować bo z grubsza rozróżniam procedury tego języka i nie wiem co większość z nich robi. Ale dziękuje za pomoc
napisał: Trebor
postów: 1209


umieszczony:
23 stycznia 2012
20:46

  
Czy możesz odnieść się do kodu, który wykonałem na podstawie Twojego. Co w nim jest trafione, a co chybione.
Przykłady lepiej przemawiają. Tabela jest 50 na 50 to daje ciutek małą powierzchnię.
napisał: glorm
postów: 7


umieszczony:
23 stycznia 2012
20:19

  
nazwa pliku rozmiar
kolory_w_userform.xlsm 19.00 kB

kod który zamieściłem ma na celu konwersję macierzy 50 na 50 z formy numerycznej w graficzną mianowicie wartości danych komórek tworzą odpowiednie zakresy, którym muszę nadać kolor w funkcji rgb, każda komórka ma odpowiadać pikselowi w userform'ie. Ogólnie muszę "nauczyć rysować pole userform zakolorowując je odpowiednio". mniej wiecej coś takiego
napisał: Trebor
postów: 1209


umieszczony:
23 stycznia 2012
19:38

  
Obawiam się, że nie rozumiem o co pytasz, a dokładniej jak ma działać Twój kod. Funkcje API to dla mnie magia. Tyle tytułem wstępu.

Private Sub CommandButton1_Click()
Dim X As Double, Y As Double, z As Double
Dim rv As Long, hPen As Long, hBrush As Long
Dim hForm As Long, dcForm As Long, oDC As Long
Dim r As Integer, g As Integer
Const HS_VERTICAL As Long = 1
Const PS_SOLID As Long = 0
hForm = FindWindow(vbNullString, "API nn")
dcForm = GetDC(hForm)
oDC = SaveDC(dcForm)
For X = 2 To 51
For Y = 2 To 51
z = Cells(X, Y)
If z < 0.1 Then kolor = RGB(0, 0, 0)
 If z >= 0.1 And z < 10 Then kolor = RGB(0, 1000, 0)
 If z >= 10 And z < 20 Then kolor = RGB(50, 800, 0)
 If z >= 20 And z < 30 Then kolor = RGB(100, 700, 0)
 If z >= 30 And z < 40 Then kolor = RGB(200, 600, 0)
 If z >= 40 And z < 50 Then kolor = RGB(400, 500, 0)
 If z >= 50 And z < 60 Then kolor = RGB(600, 400, 0)
 If z >= 60 And z < 70 Then kolor = RGB(800, 200, 0)
 If z >= 70 And z <= 80 Then kolor = RGB(1000, 0, 0)
 If z > 80 Then kolor = RGB(0, 0, 0)

hBrush = CreateSolidBrush(kolor)
hPen = CreatePen(PS_SOLID, 2, kolor)
rv = SelectObject(dcForm, hBrush)
rv = SelectObject(dcForm, hPen)
rv = RoundRect(dcForm, X, Y, X + 1, Y + 1, 0, 0)
DeleteObject hPen
DeleteObject hBrush
 
Next Y
Next X
RestoreDC dcForm, oDC
ReleaseDC hForm, dcForm
End Sub

napisał: glorm
postów: 7


umieszczony:
23 stycznia 2012
17:41

  
nazwa pliku rozmiar
proba.xlsm 101.38 kB

Witam wszystkich mam nie mały problem dotyczący napisania makra w języku vba, które musi odczytać dane z macierzy [wczesniej utworzonej macierz 50 na 50] zmiennych "z" wysłaniu ich do userform'a a następnie nadaniu/przypisaniu im koloru oraz zamiana na piksel przy pomocy funkcji rgb [wyswietlanie kolorów w userform]. Czy ktoś był by w stanie mi pomóc jestesm kompletnie zielony jeśli chodzi o ten język


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z