Avatar billede Kodelærlingen Juniormester
25. februar 2015 - 15:23 Der er 4 kommentarer og
1 løsning

VBA: Sheets som globale variabler

Hej
Jeg har lavet nogle subrutiner, hvor jeg bruger sheets i hver subrutine. Jeg kunne godt tænke mig, at definere mine sheets en gang for alle, så jeg ikke behøver at definere selv samme sheets flere gange i forskellige subrutiner.

Hvordan gør jeg det (har ikke lavet/arbejdet globale variabler før)?

Jeg har bl.a. prøvet følgende:

Public mySheet1, mySheet2, mySheet3 As Worksheet
Public Const mySheet1 = Sheets("Styringsark")
Public Const mySheet2 = Sheets("Filplacering")
Public Const mySheet3 = Sheets("Adresser") 

men får følgende fejlmeddelelse: Compile error: Ambiguous name detected: mySheet1
Avatar billede supertekst Ekspert
26. februar 2015 - 11:50 #1
Prøv:
Public mySheet1 As Worksheet, mySheet2 As Worksheet, mySheet3 As Worksheet
Sub testx()  'eller hvad Sub ellers hedder
    Set mySheet1 = Sheets("Styringsark")
    Set mySheet2 = Sheets("Filplacering")
    Set mySheet3 = Sheets("Adresser")
End Sub
Avatar billede Kodelærlingen Juniormester
26. februar 2015 - 14:27 #2
Jeg vil godt tænke mig, at følgende blev sat en gang for alle:

Set mySheet1 = Sheets("Styringsark")
Set mySheet2 = Sheets("Filplacering")
Set mySheet3 = Sheets("Adresser")

så jeg i mine subrutiner bare kan skrive mySheet1, mySheet2 eller mySheet3 uden først at skulle skrive:

Set mySheet1 = Sheets("Styringsark")
Set mySheet2 = Sheets("Filplacering")
Set mySheet3 = Sheets("Adresser")
Avatar billede supertekst Ekspert
26. februar 2015 - 15:20 #3
Så skal du i kaldet af en subrutine overføre MySheetX som parameter - f.eks:

Kald af subrutine: minSubrutine1 mySheet2

Sub minSubRutine2(mitArk)
..
..
..
End Sub
Avatar billede Kodelærlingen Juniormester
27. februar 2015 - 11:09 #4
Jeg forstår ikke helt, hvordan jeg "i kaldet af en subrutine overføre MySheetX som parameter".

Det som jeg har gjort indtil nu er:

Sub1()
Dim mySheet1, mySheet2, mySheet3 As Worksheet
Set mySheet1 = Sheets("Styringsark")
Set mySheet2 = Sheets("Filplacering")
Set mySheet3 = Sheets("Adresser")

'Noget mere kode

End Sub

Sub2()
Dim mySheet1, mySheet2, mySheet3 As Worksheet
Set mySheet1 = Sheets("Styringsark")
Set mySheet2 = Sheets("Filplacering")
Set mySheet3 = Sheets("Adresser")

'Noget mere kode

End Sub


Det som jeg godt kunne tænke mig er noget lignende:

Overordnede variabler, hvor jeg definerer en gang for alle og kan bruge i mine subrutiner:
Dim mySheet1, mySheet2, mySheet3 As Worksheet
Set mySheet1 = Sheets("Styringsark")
Set mySheet2 = Sheets("Filplacering")
Set mySheet3 = Sheets("Adresser")

Sub1()
Dim lastRow As Integer
lastRow = mySheet1.UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Noget mere kode, hvor mySheet1, mySheet2 og mySheet3 indgå

End Sub

Sub2()
Dim lastColumn As Integer
lastColumn = mySheet3.UsedRange.SpecialCells(xlCellTypeLastCell).Column

'Noget mere kode, hvor mySheet1, mySheet2 og mySheet3 indgå

End Sub
Avatar billede Kodelærlingen Juniormester
03. marts 2015 - 10:50 #5
Lukker
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

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