Print side | Luk vindue

Offset problem

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=65
Udskrevet den: 24.Nov.2024 kl. 18:11


Emne: Offset problem
Besked fra: andreas
Emne: Offset problem
Posteringsdato: 24.Aug.2010 kl. 14:36
 
Jeg mangler en kode der kan automatisk gå ned i en kolonne og finde et bestemt tal. Udfra det tal skal Vba så ofsette fra en textbox til den næste tomme celle i en række? Jeg har prøvet mig frem men uden held :(
 



Svar:
Besked fra: Allan
Posteringsdato: 24.Aug.2010 kl. 15:31
Hej Andreas,
 
Uha, det var ikke mange informationer du der kom med Wink
 
Denne kode søger i et område (A1:A100) og finder en værdi (SkalFindes)
Når den har fundet (SkalFindes) laver den Offset på antal rækker nedad (Raekker) og antal kolonner mod høre (Kolonne)
Den celle som rammes, får værdien (SkalSkrives)
 
Prøv denne:
 
Sub Find()
'********************
SkalFindes = 100
Raekker = 10
Kolonner = 2
SkalSkrives = "Her"
'********************
For Each c In Range("A1:A100").Cells
    If c.Value = SkalFindes Then
        c.Offset(Raekker, Kolonner).Value = SkalSkrives
    End If
Next c
End Sub
 
Bemærk at Raekker og Kolonner også kan angives negativt og dermed søge opad.
 
/Allan


Besked fra: andreas
Posteringsdato: 24.Aug.2010 kl. 15:56
Det sku noget nemmere end den jeg selv har kreeret som er noget kringlet:
 
Private Sub CommandButton1_Click()
Set rt = Ark1
For l = 1 To rt.Range("A65536").End(xlUp).Row
If UCase(Cells(l, 1)) = TextBox2.Value Then
Cells(l, 1).Select
End If
Next l
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1) = TextBox1.Value
Set rd = Ark1
For i = 1 To rd.Range("A65536").End(xlUp).Row
If UCase(Cells(i, 1)) = TextBox2.Value Then
Cells(i, 1).Select
End If
Next i
End Sub
 
:) Men den virker :)


Besked fra: Allan
Posteringsdato: 24.Aug.2010 kl. 16:02
Citat: andreas andreas skrev:

Det sku noget nemmer end den jeg selv har kreeret som er noget kringlet:  
:) Men den virker :)
 
Det er jo det der er det fede ved at kode, der er ikke umiddelbart en facitliste, kreativiteten får lov at blomstre.
 
Som du sikkert har lagt mærke til, ynder jeg at kode diverse variable forekomster øverst i koden, det er meget lettere hvis du pludselig får brug for at ændre i koden igen efter et par år.
Resten er en smagssag Smile
 
Meeen Andreas, nu kan jeg jo se at du kan skrive VBA, det forpligter jo her i forummet Big smile
//Allan


Besked fra: andreas
Posteringsdato: 24.Aug.2010 kl. 17:28
Jeg har været rundt i forumet for at se om der er nogen jeg kan hjælpe. Men er nu selv noget af en nybegynder.  Jeg skriver også hvis jeg selv finder løsninger på problemer.


Besked fra: andreas
Posteringsdato: 24.Aug.2010 kl. 17:32
Jeg har prøvet at få den til at skrive "her" i den sidste række udfra det fundne C (xlRight) men kan kun få den til at tælle ned af(xlDown)
 
Private Sub Ok1_Click()
Raekker = 10
Kolonner = 3
SkalSkrives = "Her"
'********************
For Each c In Range("b5:b1000").Cells
    If c.Value = Sagsnr.Text Then
        c.End(xlright).offset(Raekker, Kolonner).Value = SkalSkrives
    End If
Next c
Unload Me
End Sub
 
Hvordan gøres dette??


Besked fra: Allan
Posteringsdato: 24.Aug.2010 kl. 20:18
Jeg er ikke helt med.
 
Hvis vi nu antager at den finder Sagsnr i B5, hvilken celle skal der så skrives 'her' i?
 
//Allan


Besked fra: andreas
Posteringsdato: 25.Aug.2010 kl. 08:15
Hvis Den finder sagsnr i B2 så skal der skrives "Her" i den sidste kolone.
Jeg har prøvet at ilustrer hvad det er jeg gerne vil have :) 
 
A              B             C         D  
Sags nr   Timer       Timer    Timer
100          5              5    
101          5                          
102          4              
osv..         osv..
 
DVS:
Hvis sagsnr = 100 Så skrives "Her" i D2
Hvis sagsnr = 101 så skrives "Her" i C2
OSV...
 
Jeg har lavet en userform med to textbox'er
Den første textbox indtaster man sagsnr, det gør at VBA automatisk finder rækken med det tilsvarende sagsnr.
 
Den anden textbox indtaster man timer man har brugt på sagen. Vba finder så den sidste tomme celle i kolonen og intaster timerne.
 
Håber dette var en bedre forklaring :)


Besked fra: andreas
Posteringsdato: 25.Aug.2010 kl. 19:23
JEG FANT EN LØSNING PÅ DET :)
 
Private Sub Ok1_Click()
Raekker = 0
Kolonner = 1
SkalSkrives = "Her"
'********************
For Each c In Range("b5:b1000").Cells
    If c.Value = Sagsnr.Text Then
        c.End(xlToRight).offset(Raekker, Kolonner).Value = SkalSkrives
    End If
Next c
Unload Me
End Sub
 
Det virker sku Der manglede bare et TO
 


Besked fra: Allan
Posteringsdato: 25.Aug.2010 kl. 21:26
Tak Andreas,
 
Sorry Embarrassed Jeg havde simpelthen ikke tid til at svare før nu, men du klare den jo alligevel Wink supercool.
 
God aften.
 
//Allan
 
 


Besked fra: andreas
Posteringsdato: 26.Aug.2010 kl. 11:57
Ja det tog mig lidt tid men det gik
 
Jeg vil gerne have VBA til at skrive en Msgbox hvis den ikke finder noge??
 
Hvis der ikke findes noget C så skal der vises en besked.
 
 
 
 


Besked fra: Allan
Posteringsdato: 26.Aug.2010 kl. 16:15
Noget lignene:
 
Private Sub Ok1_Click()
Raekker = 0
Kolonner = 1
SkalSkrives = "Her"
'********************
Counter = 0
For Each c In Range("b5:b1000").Cells
    If c.Value = Sagsnr.Text Then
        c.End(xlToRight).Offset(Raekker, Kolonner).Value = SkalSkrives
Counter = Counter + 1
    End If
Next c
If Counter < 1 Then MsgBox "Det blev ikke fundet noget", vbInformation
Unload Me
End Sub
 



Print side | Luk vindue