Avatar billede tma Juniormester
18. november 2004 - 11:14 Der 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.

Torben
Avatar billede jpvj Nybegynder
18. november 2004 - 11:17 #1
Jeg forstår ikke hvad du vil med

Array(tempvalg)

Venligst forklar...


Sheets returnerer en sheets collection, så vil du eks vil have fat i arket "Ark1", benytter du

Sheets("Ark1").Select
Avatar billede tma Juniormester
18. november 2004 - 11:32 #2
Hvis man vil udskrive en række forskellige ark, skal man vælge arkene. Følgende er taget fra en simpel makrooptagning:

    Sheets(Array("Ark1", "Ark3")).Select
    Sheets("Ark3").Activate

Det jeg så har forsøgt er, at udskrifte "Ark1", "Ark3" med en variabel der har det konkrete indhold. Uden held.

Torben
Avatar billede martin_moth Mester
18. november 2004 - 12:56 #3
Måske skal du have " med. Som jeg forstår det gør du følgende:

tempvalg= "Ark1, Ark3"
ThisWorkbook.Sheets(Array(tempvalg)).Select

Og det virker ikke, vel? Men det er jo heller ikke det sammen som at skrive

ThisWorkbook.Sheets(Array(("Ark1", "Ark3")).Select

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

?
Avatar billede tma Juniormester
18. november 2004 - 13:41 #4
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.

Torben
Avatar billede tma Juniormester
18. november 2004 - 14:27 #5
Har fundet en dynamisk løsning...
Avatar billede martin_moth Mester
18. november 2004 - 15:42 #6
Så slipper jeg :o)

Det må være noget med at læse de bruger-valgte arks navne ind i variabler, og så køre følgende
Avatar billede martin_moth Mester
18. november 2004 - 15:42 #7
Svar :o)
Avatar billede tma Juniormester
18. november 2004 - 15:48 #8
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).

Torben
Avatar billede bak Forsker
18. november 2004 - 16:56 #9
Den er da ok, Torben.
Du kan evt. erstatte din select case opbygning med
Sheets(SheetNames()).Select
Avatar billede bak Forsker
18. november 2004 - 16:57 #10
Husk så lige Option Base 1  øverst
Avatar billede bak Forsker
18. november 2004 - 17:47 #11
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
Avatar billede tma Juniormester
18. november 2004 - 21:43 #12
Selvfølgelig en mere elegant løsning...
Var ikke lige opmærksom på, at det jo var et Array der blev forventet af systemet.

Tak for tippet.

Torben
Avatar billede bak Forsker
19. november 2004 - 08:17 #13
velbekomme, jeg lærer jo også noget hver gang :-)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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