Avatar billede folj Forsker
19. november 2019 - 10:27 Der er 2 kommentarer og
2 løsninger

Array i VBA excel

Hej eksperter !

Jeg sidder og kæmper med en VBA-procedure, hvor jeg vi smide en række med nogle initialer ind i at array, og derefter gennemløbe og undersøge indholdet af arrayet(i første omgang bare se mine værdier, for at holde det simpelt).

Det skal ende med at jeg både finder rækken med datoen i dag (den del virker fint allerede), og finder den kolonne hvor brugerens initialer står.

Men i først omgang skal jeg blot have hjælp til at få en række initialer ind i mit array, og derefter skal jeg kunne gennemløbe dem…

Min kode herunder (den fejler på linien med msgbox hvor jeg forsøger at udskrive værdierne, "object required"):
Sub FindTodaySimple()
Dim TodayRow As Integer
Dim UserColumn As Integer
Dim InitsFound As Boolean
Dim InitRowArray As Variant

TodayRow = FindDateRowInCol(Date, DATECOL) ' så er datorækken fundet

'Vi prøver at finde brugerens kolonne

InitRowRng = Range(Cells(INITSROW, INITSTARTCOL), Cells(INITSROW, PLANSLUTCOLUMN)).Address

'her smider jeg rækken af initialer ind i et array
InitRowArray = Range(InitRowRng) 'her smider jeg rækken af initialer ind i et array

' løber initialer igennem og vil se værdierne
  For i = 1 To PLANSLUTCOLUMN
  MsgBox i & " har værdien " & InitRowArray(1, i).Value
  Next i
  Cells(TodayRow, UserColumn).Select

End Sub
19. november 2019 - 10:40 #1
Mon ikke dit array er 0 baseret, som det standard er, således du i din msgbox skal skrive
InitRowArray(0, i).Value
Avatar billede Jan Hansen Ekspert
19. november 2019 - 11:30 #2
Ej testet men til inspiration:


Option Explicit

Dim Ws As Worksheet
Dim Area As Range
Dim Arr() As Variant
Dim MyRow As Integer, MyColumn As Integer

Sub FindTodaySimple()
    Set Ws = ActiveSheet
    Set Area = Rows("3:3") ' førsterække
    Set Area = Range(Area, Area.End(xlDown)) 'Udvider området til sidste række mrd indhold
    Arr = Area 'fylder området ind i et array
    For MyRow = LBound(Arr, 1) To UBound(Arr, 1) 'gennemtraver alle rækker
        If Arr(MyRow, 1) = Date Then
            For MyColumn = LBound(Arr, 2) + 1 To UBound(Arr, 2) 'gennemtraver alle kolonner (ikke kolonne 1) i aktiv række
                mdsgbox "Kolonne " & MyColumn & "indeholder: " & Arr(MyRow, MyColumn)
            Next MyColumn
        End If
    Next MyRow
End Sub

Avatar billede folj Forsker
22. november 2019 - 08:18 #3
@Jan Hansen
Udover at din Lbound og Ubound var vendt forkert, så var din kode brugbar til inspiration, og min færdige VBA-kode kom til at se således ud:
Sub FindTodaySimple()
Dim TodayRow As Integer
Dim UserColumn As Integer
Dim InitRowArray As Variant

TodayRow = FindDateRowInCol(Date, DATECOL) ' så er datorækken fundet

'Vi prøver at finde brugerens kolonne

InitRowRng = Range(Cells(INITSROW, INITSTARTCOL), Cells(INITSROW, PLANSLUTCOLUMN)).Address
InitRowArray = Range(InitRowRng)

' løber initialer igennem og sammenligner
  MsgBox "Will run from " & LBound(InitRowArray, 2) & " to " & UBound(InitRowArray, 2)
 
  For i = LBound(InitRowArray, 2) To UBound(InitRowArray, 2)
    If UCase(Right(InitRowArray(1, i), 4)) = "FOLJ" Then
  UserColumn = i + 2
      Exit For 'afslutter gennemløb

    End If
  Next i

  Cells(TodayRow, UserColumn).Select

End Sub


Jeg takker for dit engagement.
Avatar billede Jan Hansen Ekspert
22. november 2019 - 11:17 #4
Velbekomme
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester