VBA, zliczanie kolumn

0

Witajcie,
Pewnie tutaj takimi rzeczami się nikt nie zajmuje, ale spróbuje. Napisałem w VBA kod na zliczanie kolumn pod pewnym warunkiem. I... nie działa. Ktoś się może na tym zna?

Function FieldCount(TableName As String, i As Integer, suma As Integer) As Integer //Zamiast Dimów, coby tutaj w domyśle "0" podostawiać za "i" oraz "sume" 
Do While i <= 142
    If CurrentDb.TableDefs(TableName).Fields(i) > 0 Then
    suma = suma + CurrentDb.TableDefs(TableName).Fields(i)
    End If
    i = i + 1
Loop
suma = suma / 2
FieldCount = suma
End Function
1

A co to znaczy "nie działa"? Wywala się błędem? Liczy źle? Nic nie zwraca?

1

no to:

CurrentDb.TableDefs(TableName).Fields(i)

Raczej Ci nie zwraca integera. --> https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/tabledef-fields-property-dao

EDIT: A z tego co piszesz to chyba potrzebujesz tego: https://stackoverflow.com/questions/19452952/how-to-count-number-of-fields-in-a-table

0

@BlackBad: 1. Rzeczywiście, nie zwraca integera, hmmm. Jak znam życie, to CInt tam nie pomoże pewnie [EDIT: Bo nie działa mi, ewidentnie]. 2. Tak, tylko tam zlicza wszystkie kolumny. Potrzebne mi zliczanie z warunkiem (np. dla wartości pola: ">0") dla kolumn, nie takie ogólne. | Nie mam pomysłu.

[Pardone... Nie bywam za często tutaj :(]

0

To może inaczej. Opisz dokładnie swój problem i co chcesz osiągnąć. Bo zaczynam podejrzewać, że 1 post wprowadza w błąd.

0

@BlackBad: Chcę napisać funkcję, która pozwoli mi zliczyć pola od drugiego w prawo (no, ale załóżmy, że będzie uniwersalna), w których to wartość będzie większa od zera. [W konkretnym rekordzie]
Czyli dokładnie to, co napisałem.

0

Czyli Ciebie interesują wartości w tablicy a nie sama struktura tablicy. A wtedy to musisz odpytać o te dane bazę - szukaj pod RecordSet.

0

@BlackBad:

Function Zliczaj() As Integer

Dim MojaBaza As DAO.Database, MojRS As DAO.Recordset
Dim i As Integer, suma As Integer

i = 0
suma = 0
 
Set MojaBaza = CurrentDb()
Set MojRS = MojaBaza.OpenRecordset("Galerie", dbOpenForwardOnly)
 
Do While Not MojRS.EOF
 
 
  If MojRS.Fields(i) = Int(MojRS.Fields(i)) And MojRS.Fields(i) > 0 Then
  suma = suma + 1
  End If
  i = i + 1
Loop
 
MojRS.Close

Zliczaj = suma
End Function
 

Dobrze, a wiec. Zrobiłem coś takiego i wyskakuje mi błąd, że pomyliłem typy danych. + Nie jestem pewien czy pola w ten sposób się odlicza.

0

Ten kod mozna zalatwić 1 linijką:

suma = DSUM("kolumnadosumowania","Galerie","kolumnadosumowania>0")

https://support.microsoft.com/pl-pl/office/funkcja-dsum-08f8450e-3bf6-45e2-936f-386056e61a32

Co do zasady to nie ma sensu pobierać calego zestawu danych tylko użyć DSUM czy group by z odpowiednimi warunkami, aby baza to policzyła sama.
Pobieranie wszystkich kolumn tylko aby liczyć wartości z jednej to trochę na wyrost.
Po przeczytaniu Twoich postów nadal nie wiem co chcesz zrobić...

1 użytkowników online, w tym zalogowanych: 0, gości: 1