18. november 2004 - 11:14Der er
12 kommentarer og 1 løsning
Underligt VB Problem med Array
Hej
Betragt følgende: Sub Makro2() Dim tempvalg As Variant tempvalg = "1, 3" ' "Forside," & "3410" ThisWorkbook.Sheets(Array(tempvalg)).Select End Sub
Ovenstående virker ikke, men hvis man manuelt skriver teksten ind, virker det fint. Jeg har også afprøvet med brug af tekster på de enkelte ark (som nu er remmet ud). Det er samme resultat.
Hvad kan det skyldes? Arkvalgene vælges af brugeren dynamisk, så ovenstående er ren test.
for "Ark1", "Ark3" er jo ikke det samme som "Ark1, Ark3"
Hvad hvis du skriver
Sub Makro2() Dim tmpvalg1 As String 'Hvorfor brugte du Variant - du ved jo at det er en string Dim tmpvalg2 As String tmpvalg1 = "Ark1" tmpvalg2 = "Ark2" ThisWorkbook.Sheets(Array(tmpvalg1,tmpvalg)).Select End Sub
Jeg havde faktisk programmet til at bygge en streng op som så således ud:
"Ark1", "Ark2"
Altså een streng indeholdende de to.
Din løsning virker for så vidt at begge mapper bliver valgt. Jeg spekulere så blot på, hvordan jeg kan gøre det dynamisk. Jeg har jo på forhånd valgt de to i dette tilfælde... Jeg giver pointene fordi du sørgede for at vi fik skubbet stenen lidt videre, men har du ide til en dynamisk opsætning (altså at brugeren vælger ark1, ark3 den ene gang og f.eks. ark2 og ark3 en anden gang), så må du gerne skrive tilbage.
Private Sub CommandButton1_Click() Dim i As Integer, SheetNames() As String ReDim SheetNames(ThisWorkbook.Sheets.Count)
Dim TempArk As String, Prompt As String, TempSvar As String, x As Integer For i = 1 To ThisWorkbook.Worksheets.Count Prompt = Chr(10) & Chr(10) Prompt = Prompt & "Ark: " & ThisWorkbook.Worksheets(i).Name Prompt = Prompt & Chr(10) & Chr(10) & Chr(10) Prompt = Prompt & "Tast [JA] for udskriv eller [NEJ]. " Prompt = Prompt & Chr(10) & Chr(10) TempSvar = MsgBox(Prompt, vbYesNo + vbQuestion, "Valg af udskrivningsark") If TempSvar = vbYes Then If SheetNames(1) = "" Then For x = 1 To ThisWorkbook.Worksheets.Count SheetNames(x) = ThisWorkbook.Worksheets(i).Name Next x Else SheetNames(i) = ThisWorkbook.Worksheets(i).Name End If End If Next
Select Case ThisWorkbook.Sheets.Count Case 1: Sheets(Array(SheetNames(1))).Select Case 2: Sheets(Array(SheetNames(1), SheetNames(2))).Select Case 3: Sheets(Array(SheetNames(1), SheetNames(2), SheetNames(3))).Select Case 4: Sheets(Array(SheetNames(1), SheetNames(2), SheetNames(3), SheetNames(4))).Select Case 5: Sheets(Array(SheetNames(1), SheetNames(2), SheetNames(3), SheetNames(4), SheetNames(5))).Select
End Select
End Sub
Ikke den pæneste løsning med select i bunden, men alternativet er en opbygning af en streng, og det virker som bekendt ikke (det var det det hele startede med).
Option Explicit Option Base 1 Private Sub CommandButton1_Click() Dim i As Integer, SheetNames() Dim TempArk As String, Prompt As String, TempSvar As String, x As Integer For i = 1 To ThisWorkbook.Worksheets.Count Prompt = Chr(10) & Chr(10) Prompt = Prompt & "Ark: " & ThisWorkbook.Worksheets(i).Name Prompt = Prompt & Chr(10) & Chr(10) & Chr(10) Prompt = Prompt & "Tast [JA] for udskriv eller [NEJ]. " Prompt = Prompt & Chr(10) & Chr(10) TempSvar = MsgBox(Prompt, vbYesNo + vbQuestion, "Valg af udskrivningsark") If TempSvar = vbYes Then x = x + 1 ReDim Preserve SheetNames(x) SheetNames(x) = ActiveWorkbook.Sheets(i).Name End If Next Sheets(SheetNames()).Select End Sub
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.