PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAActiveCell.OffsetActiveCell.Offset
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2020-04-13 21:25
 
 Ändrad av ex16  på 2020-04-13 21:39:20

 Hej!

Om jag står i ex. cell C2 och mitt makro kör följande kod ActiveCell.Offset(1, 1).Select 
Då hamnar jag som bekant på D3. Hur löser jag om jag istället vill hamna på D3 på Blad2 om jag från början stod på C2 på Blad1. Det måste lösas på så sätt att jag ska kunna använda mig av vilken cell som helst från Blad1 och göra samma förflyttning på Blad2.

Mvh

 

 

 

Nytt inlägg
 2020-04-14 11:04
 
Du kan referera till ett blad genom indexring, namn på blad, eller kodnamn på blad.

Indexering är vilket nummer räknat från vänster ditt bladnamn hamnar,
Namn på bladet är vad bladet heter...
Kodnamn är ett sätt att döpa blad i editorn

Oavsett metod så behöver bladet vara aktivt för att du ska kunna välja cellen. Med indexering av blad:

Dim rng As Range: Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(1, 1).Select

Sedan så är activate och select något endast inspelad kod pysslar med. De två raderna är antagligen onödiga, istället kan rangen anropas direkt i nästa kodfjutt.

Istället för Selection. kan man skriva rng.
Istället för with selection går det att skriva with rng.offset(1,1) osv osv.

Mvh
Christian
Nytt inlägg
 2020-04-14 20:52
 

Perfekt!
Tackar så mycket!
 


 

 

Nytt inlägg
 2020-04-19 10:51
 

Kört fatt lite, så jag försöker fråga om fler tillägg i mitt makro. Koden nedan gäller för någom cell i blad1 mellan B1:B15 som ska förflyttas till blad2. Det fungerar ju, som sagt.

Dim rng As Range:
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(0, 4).Select
 
Dock behöver jag även alternera med fler i samma makro beroende på vilken cell som är vald i blad1. Behöver 8 stycken olika, förmodat med if, else if och else.
 
Nästa aternativ är om någon cell är vald mellan F1:F15 i blad1 och ska förflyttas till blad2 med rng.Offset(24, -1).Select
 
Ett tredje alternativ är då om någon cell är vald mellan J1:J15 i blad1 och ska förflyttas till blad2 med rng.Offset(48, -5).Select
 
Mvh
Nytt inlägg
 2020-04-19 21:36
 
 Ändrad av ex16  på 2020-04-19 21:37:10

Har nästan löst det själv. Har dock inte löst så att jag kan köra makrot med aktiv cell någonstans mellan B1 och B15. Operatorn "Or" fungerar om man skriver upp ActiveCell.Adress=  igen. 

Sub A()
Dim rng As Range:

If ActiveCell.Address = "$B$1" Then
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(0, 4).Select
 
ElseIf ActiveCell.Address = "$F$1" Then
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(24, -1).Select
 
Else:
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(48, -5).Select

End If
End Sub
Nytt inlägg
 2020-04-20 06:55
 

 Hej hej

För att undersöka om cellen befinner sig i ett områdce hade jag användt mig av intersect. 

Dim rngB as range: set rngB = Sheets(1).range("B1:B15")

If Not Intersect(rngB, activecell) is nothing then

Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(0, 4).Select

Därefter sätter du upp liknande vilkor för dina tre olika områden enligt liknande metod med elseif som du själv redan gjort. 

 

/C

 

 

 

Nytt inlägg
 2020-04-20 21:48
 
 Ändrad av ex16  på 2020-04-20 22:02:05

Perfekt! Blev så här till slut. Kommer ha nytta av Intersect till mer kodning. Tackar igen!

Sub A()
Dim rngB, rngC, rngD As Range:
Set rngB = Sheets(1).Range("B1:B15")
Set rngC = Sheets(1).Range("F1:F15")
Set rngD = Sheets(1).Range("J1:J15")
 
If Not Intersect(rngB, ActiveCell) Is Nothing Then
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(0, 4).Select
 
ElseIf Not Intersect(rngC, ActiveCell) Is Nothing Then
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(24, -1).Select
 
Else
If Not Intersect(rngD, ActiveCell) Is Nothing Then
Set rng = Sheets(2).Range(ActiveCell.Address)
rng.Parent.Activate
rng.Offset(48, -5).Select
 
End If
End If
End Sub
Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAActiveCell.OffsetActiveCell.Offset

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter