Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Jeg ved ikke, om det er den nemmeste løsning, men den virker. Problemet er, at man kun kan udvide et array i sidste dimension, og når du henter data fra Excel ved arr=range,så har du brug for at udvide i første dimension. Du skal derfor først "vende" arrayet, udvide, tilføje og så "vende" igen.
Function AddToArr() Dim vArr() As Variant Dim vArrKolA() As Variant Dim vTempArr() As Variant Dim x As Integer
vArr() = Range("f2:f6") vArrKolA = Range("a2:a6")
' Du kan kun tilføje til sidste dimension i et array ' derfor skal arrayet vendes TransponeArray_Var vArr(), vTempArr()
' Redimensioner dit temp array ReDim Preserve vTempArr(LBound(vTempArr, 1) To UBound(vTempArr, 1), _ LBound(vTempArr, 2) To UBound(vTempArr, 2) + UBound(vArrKolA, 1)) As Variant
' Indsæt data fra kolonne a For x = LBound(vArrKolA, 1) To UBound(vArrKolA, 1) Step 1 vTempArr(1, x + UBound(vArr, 1)) = vArrKolA(x, 1) Next x
' Vend igen for korrekt udlæsning til cellerne TransponeArray_Var vTempArr(), vArr() Range("g2:g11") = vArr() End Function
Function TransponeArray_Var(ByRef InputArray() As Variant, ByRef OutputArray() As Variant) ' Transpones a Variant array into a new array Dim x As Long Dim y As Long
ReDim OutputArray(LBound(InputArray, 2) To UBound(InputArray, 2), LBound(InputArray, 1) To UBound(InputArray, 1)) As Variant
For x = LBound(InputArray, 2) To UBound(InputArray, 2) Step 1 For y = LBound(InputArray, 1) To UBound(InputArray, 1) Step 1 OutputArray(x, y) = InputArray(y, x) Next y Next x End Function
Hvis der er, kunne jeg også godt tænke mig at kende den, men jeg tvivler, da man kun kan udvide et array i sidste dimension. I et array, der er hentet fra en range, står rækker i første dimension og kolonner i sidste. Hvis du vil koble data på kolonnevis, kan du bare skrive
redim preserve array(lbound(array,1) to ubound(array,1), lbound(array,2) to ubound(array,2) + antal kolonner, du vil have på) og så tilføje data.
Hvis det drejer sig om rækker, er du nødt til at vende arrayet, så rækkker kommer til at stå i sidste dimension for at du kan udvide det.
Det er jo trods alt kun tre step 1) vend array (funktionben TransponeArray_Var) 2) udvid array 3) vend array tilbage
Jeg har lagt funktionen TransponeArray_Var i en klasse, som jeg bare lægger ind, når jeg skal bruge den. Så kan den jo genbruges :-)
Det er jeg næsten klar over, men man kan som sagt kun føje til i sidste dimension af et array, og når man henter et array fra Range, står rækkerne desværre i første dimension.
Selvom koden ser voldsom ud, er det jo blot
1) Vend array, så rækkerne kommer i sidste dimension 2) Udvid ved at ReDim array 3) Tilføj til dit array 4) Vend igen array, så der kan skrives til en Range i dit Excelark.
Bemærk, at der er to funktioner. Den sidste af dem er den, der vender arrayet.
Synes godt om
Ny brugerNybegynder
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.