Avatar billede Slettet bruger
03. august 2012 - 22:39 Der er 39 kommentarer og
1 løsning

Forskelige makro hjælp søges.

Hej eksperter!

Jeg har brug hjælp til forskellige makro i excel 2007.

1. Den makro jeg har insat nulstiller alt, men vil gerne have af den ikke nulstiller formlerne i cellerne: "B1:B31,D1:D31,F1:F31,H1:H31,J1:J31"
fks. af mine formler stadig er i de celler. når jeg bruger makro.

Public Sub Nulstil()
    Application.ScreenUpdating = False
    For Each cc In Range("B1:B31,C1:D31,D1:D31,E1:E31,F1:F31")
        cc.Value = ""
    Next
   
    Application.ScreenUpdating = True
    MsgBox "Nulstilling udført"
End Sub

2. Makro der godkender dage. fks. er alle i cellerne: "B1:B31,C1:D31,D1:D31,E1:E31,F1:F31" sorte, men så længe de ikke er godkendt er teksten rød.

3. Makro der godkender mdr og gemmer/logger cellerne i ark2. skal kunne huskes op til 36 mdr. (om så der skal bruges 36 ark)

4. kan man lave en makro til af udskrive excel filen hvor med af "figurerne" ikke røger med? så fks. ved excel af det er market (og kun udskriver kun det der er markeret hver gang.?)og af den laver en PDF fil og gemmer det et sted på en bestemt placerning inden den udskriver.

5. Makro der kan hente de celler som i 3. har gemt. hvor med man kan hente det til senere brug. hvor med man udfylder hviken mån man vil have fat i og så køre man makro, og så klare excel resten.

Har søgt lidt efter det. men har ikke fundet noget andet brugbar andet end den øvereste makro. jeg vil stadig gerne søge efter det, men vil være taknemlig over hjælp fra en/flere!

tak på forhånd.
Avatar billede Slettet bruger
04. august 2012 - 00:25 #1
har fundet denne løsning til 1. men er der ikke en nemmere måde af gøre det på? så jeg ikke skal lave en for hver celle.?

Public Sub Nulstil()
    Application.ScreenUpdating = False
    For Each cc In Range("A1:A3,B1:B3")
        cc.Value = ""
    Next
   
    Application.ScreenUpdating = False
    For Each cc In Range("C1:C1")
        cc.Value = "=B1*A1"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("C2:C2")
        cc.Value = "=B2*A2"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("C3:C3")
        cc.Value = "=B3*A3"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("D1:D1")
        cc.Value = "=C1*B1"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("D2:D2")
        cc.Value = "=C2*B2"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("D3:D3")
        cc.Value = "=C3*B3"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("E1:E31")
        cc.Value = "=D1/C1+B1+A1"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("E2:E2")
        cc.Value = "=D2/C2+B2+A2"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("E3:E3")
        cc.Value = "=D3/C3+B3+A3"
        Next
       
    Application.ScreenUpdating = True
    MsgBox "Nulstilling udført"
End Sub
    Application.ScreenUpdating = False
    For Each cc In Range("E1:E1")
        cc.Value = "=D1/C1+B1+A1"
        Next
       
    Application.ScreenUpdating = True
    MsgBox "Nulstilling udført"
End Sub
Avatar billede Slettet bruger
04. august 2012 - 00:27 #2
VDR: #1 sætter den lige ordenligt ind:

Public Sub Nulstil()
    Application.ScreenUpdating = False
    For Each cc In Range("A1:A3,B1:B3")
        cc.Value = ""
    Next
   
    Application.ScreenUpdating = False
    For Each cc In Range("C1:C1")
        cc.Value = "=B1*A1"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("C2:C2")
        cc.Value = "=B2*A2"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("C3:C3")
        cc.Value = "=B3*A3"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("D1:D1")
        cc.Value = "=C1*B1"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("D2:D2")
        cc.Value = "=C2*B2"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("D3:D3")
        cc.Value = "=C3*B3"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("E1:E31")
        cc.Value = "=D1/C1+B1+A1"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("E2:E2")
        cc.Value = "=D2/C2+B2+A2"
        Next
       
    Application.ScreenUpdating = False
    For Each cc In Range("E3:E3")
        cc.Value = "=D3/C3+B3+A3"
        Next
       
    Application.ScreenUpdating = True
    MsgBox "Nulstilling udført"
End Sub
Avatar billede store-morten Ekspert
04. august 2012 - 01:32 #3
Sub Nulstil()
    Application.ScreenUpdating = False
        Range("A1:B3").Clear
            Range("C1") = "=B1*A1"
            Range("D1") = "=C1*B1"
            Range("E1") = "=D1/C1+B1+A1"
                Range("C1:E1").AutoFill Destination:=Range("C1:E3"), Type:=xlFillDefault
    Application.ScreenUpdating = True
    MsgBox "Nulstilling udført"
End Sub
Avatar billede supertekst Ekspert
04. august 2012 - 12:22 #4
Alternativ - sletter kun celler uden formel:

Sub test()
    For Each cc In Range("A1:A4")
        If cc.HasFormula = False Then
            cc.Value = ""
        End If
    Next cc
End Sub
Avatar billede store-morten Ekspert
04. august 2012 - 12:44 #5
Hvis kun indtastning skal nulstilles:
Sub Nulstil_Indtasning()
        Range("A1:B3").Clear
    MsgBox "Nulstilling udført"
End Sub

I A1:B3 er der ingen formler?
Er der en grund til at du vil skrive formlerne i C1:E3 igen?
Avatar billede store-morten Ekspert
04. august 2012 - 15:06 #6
Sub GodkenderSort()
For Each c In Range("B1:F31")
    'Hvis cellen er "tom" springes til næste celle
    If c.Value = "" Then GoTo Tom
       
        If c.Font.ColorIndex <> 1 Then
            'Hvis cellen ikke har farve 1 (Sort)
          MsgBox c.Address & " Har forkert farve" & vbCrLf & _
          "Farve nr: " & c.Font.ColorIndex & vbCrLf & _
          "Cellens indeholder: " & c.Value
         
          'Hvis cellen har farve 1 (Sort)
          Else
          MsgBox c.Address & " Har rigtig farve ( OK )" & vbCrLf & _
          "Farve nr: " & c.Font.ColorIndex & vbCrLf & _
          "Cellens indeholder: " & c.Value
        End If
Tom:
    Next c
End Sub
Avatar billede Slettet bruger
05. august 2012 - 00:39 #7
#Store-morten når jeg tænker over det så nej, behøver den ikke skrive det igen, men hjælper mig med af forstå lidt af det bedre jo mere jeg leger med det :).

GodkenderSort koden, gør ikke helt hvad jeg vil have,
har fundet en ligne jeg skal bruge i den som er:

    Sub TEST123()
    If (Range("D1") + Range("E1")) <> 0 Then
        Range("I8").Value = Range("I8").Value + 1

men der ved skal den fks. teksten skal være rød fra starten af, når man så køre koden, skal teksten blive sort, (der skal ikke være msgbox på) og så må man meget gerne kun kunne godkende de dage som har været der/samme dag, men aldrig nogle dage vi ikke er nået til.



#Supertekst en super kode som jeg faktisk kan bruge til noget af det jeg skal opbygge i excel. da den virker nemmere end den anden kode.
Avatar billede store-morten Ekspert
05. august 2012 - 00:51 #8
Koden gennem løber område B1:F31.
Skal den det det?

Koden springer tomme over.
Skal den det det?

Når koden finde en celle med sort tekst.
Hvad skal den så?

Når koden finde en celle med rød tekst.
Hvad skal den så?
Avatar billede store-morten Ekspert
05. august 2012 - 00:58 #9
Sub GodkenderSort()
For Each c In Range("B1:F31")
    'Hvis cellen er "tom" springes til næste celle
    If c.Value = "" Then GoTo Tom
       
        If c.Font.ColorIndex <> 1 Then
          'Hvis cellen ikke har farve 1 (Sort)

          'Skriv noget kode her
         
          'Hvis cellen har farve 1 (Sort)
          Else

          'Skriv noget kode her

        End If
Tom:
    Next c
End Sub
Avatar billede Slettet bruger
05. august 2012 - 01:19 #10
#Store-morten

må meget gerne springe tomme celler over.

til fks.

A1      B1      C1              D1                E1
787    221    173927    38437867    1229  <-- teksten er rød.

Laver jeg en figur og trykker på den så den køre koden, skal teksten blive sort.
der ved af denne del skal gøre:

    Sub TEST123()
    If (Range("D1") + Range("E1")) <> 0 Then
        Range("I8").Value = Range("I8").Value + 1

er at den skal tælle hvor mange gange der bliver trykket på figuren, som så røger over under figuren. jeg har set det i et excel ark et sted på nettet, men ja, gemte ikke koden da jeg ikke kunne tyde det den gang, :).
Avatar billede store-morten Ekspert
05. august 2012 - 02:27 #11
Koden gennem løber område B1:F31.
Skal den det det?
Avatar billede Slettet bruger
05. august 2012 - 02:32 #12
i dette tilfælde A1:B3 (da det er et test afk, jeg laver koden om når jeg bruger det i det rigtige ark) - sidder med et test ark da der er privat info i det rigtige ark jeg er i gang med. (så nemmere af sende et test ark hvis det var det der skulles ske på et tidspunkt ;))
Avatar billede store-morten Ekspert
05. august 2012 - 03:24 #13
Prøv:
Sub GodkenderTest()

For Each c In Range("B1:F3")

    'Hvis cellen ikke har farve 3 (Rød)
    If Not c.Font.ColorIndex <> 3 Then
    'Hvis D1+E1 ikke er 0
      If (Range("D1") + Range("E1")) <> 0 Then
      'Ændres Font farve til "Automatisk"
      c.Font.ColorIndex = -4105
        End If
        End If
Next
'Celle I8 tæller 1 op
Range("I8").Value = Range("I8").Value + 1
End Sub
Avatar billede store-morten Ekspert
05. august 2012 - 17:17 #14
Lille rettelse: Række der behandles.
Sub GodkenderTest()
For Each c In Range("B1:F31")
'Række der behandles
rk = c.Row
    'Hvis cellen ikke har farve 3 (Rød)
    If Not c.Font.ColorIndex <> 3 Then
    'Hvis D1+E1 ikke er 0
      If Range("D" & rk) + Range("E" & rk) <> 0 Then
      'Ændres Font farve til "Automatisk"
      c.Font.ColorIndex = -4105
        End If
        End If
Next
'Celle I8 tæller 1 op
Range("I8").Value = Range("I8").Value + 1
End Sub
Avatar billede Slettet bruger
05. august 2012 - 18:41 #15
#Store-Morten det var sådan jeg havde tænkt mig, det kunne være godt hvis man kunne tilføje i F1:31 datoere, og af de dage der ikke har været der kunne godkendes. men ved ikke lige om det er muligt :)?
Avatar billede Slettet bruger
05. august 2012 - 18:49 #16
Update med:

3. pt. jeg er nået til. men ville gerne have den til af logger tal/bogstaver så den ikke logger selve formler.

Sub Logge_Data
Application.ScreenUpdating = False

    Sheets("Ark1").Range("G6").Copy
    Sheets("Ark2").Activate
    Range("A10000").End(xlUp).Offset(1, 0).Activate
    ActiveCell.PasteSpecial

    Application.CutCopyMode = False
    Sheets("Ark1").Activate
    Range("A1").Select
Application.ScreenUpdating = True

End Sub

4. Pt. jeg er nået med denne formel, men kunne godt tænke mig af den gemmer selv på min nas server, samt med af den kun gemmer fra A1:G40 i PDF fil så jeg ikke får alle de der figure med, (ved ikke om det er muligt. og evt. den altid printer A1:G40. så den ikke spørger ikke om hvilket ark.

Public Sub XLS_Til_Pdf_Print()
Dim stiNavn As String, filNavn As String, fil As String, sti As String
Dim temp As Variant, xlsObj As Object

    stiNavn = Application.GetOpenFilename          'ønskede fil udpeges
    temp = Split(stiNavn, "\")
    filNavn = temp(UBound(temp))
    temp = Split(filNavn, ".")
    fil = temp(0)
    temp = Split(stiNavn, filNavn)
    sti = temp(0)                  'kan erstattes af anden sti
   
    Set xlsObj = CreateObject("Excel.application")
    xlsObj.Workbooks.Open stiNavn
   
    xlsObj.ActiveWorkbook.Sheets(Array("Ark1", "Ark2", "Ark3")).Select
   
    xlsObj.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        sti & fil & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

    xlsObj.Application.Quit
    Set xlsObj = Nothing
   
Dim Iprint As String
    Iprint = InputBox("hvilket ark skal printes?", , 0, 100, 100)
   
    If Iprint = "1" Then
        Sheets("Ark1").Activate
        Sheets("Ark1").PrintOut Copies:=1, Collate:=True
    End If
   
    If Iprint = "2" Then
        Sheets("Ark2").Activate
        Sheets("Ark2").PrintOut Copies:=1, Collate:=True
    End If
    End Sub
Avatar billede store-morten Ekspert
05. august 2012 - 18:50 #17
Sender du dit test ark?
Adr. under profil
Avatar billede Slettet bruger
05. august 2012 - 19:22 #18
#Store-morten.

mail sendt.
Avatar billede store-morten Ekspert
05. august 2012 - 20:11 #19
Prøv:
Sub GodkenderTest()
For Each c In Range("B1:F31")
c.Activate
'Række der behandles
rk = c.Row
    'Hvis cellen ikke har farve 3 (Rød)
    If Not c.Font.ColorIndex <> 3 Then
    'Hvis D+E ikke er 0 og "Dato" ikke forekommet
      If Range("D" & rk) + Range("E" & rk) <> 0 And Range("F" & rk) < Now Then
      'Ændres Font farve til "Automatisk"
      c.Font.ColorIndex = -4105
      Else
      MsgBox "Active celle kan ikke godkendes"
        End If
        End If
Next
'Celle I8 tæller 1 op
Range("I8").Value = Range("I8").Value + 1
End Sub
Avatar billede Slettet bruger
05. august 2012 - 20:30 #20
Den er perfekt hvis den springer tomme celler over :).
Avatar billede store-morten Ekspert
05. august 2012 - 20:46 #21
tomme celler?
I række?
Avatar billede store-morten Ekspert
05. august 2012 - 20:48 #22
Sub GodkenderTest()
For Each c In Range("B1:F31")
c.Activate
'Hvis cellen er "tom" springes til næste celle
    If c.Value = "" Then GoTo Tom
'Række der behandles
rk = c.Row
    'Hvis cellen ikke har farve 3 (Rød)
    If Not c.Font.ColorIndex <> 3 Then
    'Hvis D+E ikke er 0 og "Dato" ikke forekommet
      If Range("D" & rk) + Range("E" & rk) <> 0 And Range("F" & rk) < Now Then
      'Ændres Font farve til "Automatisk"
      c.Font.ColorIndex = -4105
      Else
      If Range("F" & rk) = "" Then GoTo Tom
      MsgBox "Active celle kan ikke godkendes"
        End If
        End If
Tom:
    Next c
'Celle I8 tæller 1 op
Range("I8").Value = Range("I8").Value + 1
End Sub
Avatar billede Slettet bruger
05. august 2012 - 20:48 #23
yup, hvis der kommer en tom celle i en hel række, skal den bare springes over.
Avatar billede Slettet bruger
05. august 2012 - 20:53 #24
Den er god :) den du linkede til sidst.
Avatar billede store-morten Ekspert
05. august 2012 - 21:18 #25
punkt 3. Prøv med:

Sub Logge_Data()
Application.ScreenUpdating = False

    Sheets("Ark1").Range("G6").Copy
    Sheets("Ark2").Activate
    Range("A10000").End(xlUp).Offset(1, 0).Activate
    ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


    Application.CutCopyMode = False
    Sheets("Ark1").Activate
    Range("A1").Select
Application.ScreenUpdating = True
End Sub
Avatar billede Slettet bruger
05. august 2012 - 21:37 #26
præcis sådan jeg ville have den til :p
Avatar billede Slettet bruger
05. august 2012 - 21:38 #27
jeg sidder lige og leger med =SLÅ.OP til af hente de dataer som der bliver logge, men det driller skam :)
Avatar billede store-morten Ekspert
05. august 2012 - 23:56 #28
punkt 3. Kort ;-)

Sub Logge_Data_2()
Set x = Sheets("Ark1").Range("G6")
Sheets("Ark2").Range("A10000").End(xlUp).Offset(1, 0) = x.Value
End Sub
Avatar billede Slettet bruger
06. august 2012 - 00:28 #29
kan jeg se :p. - jeg har brug for en der logger data, og så når den logger igen, skal den "gemme" i samme celle. så hvis den gemmer 505 og næste gang den gemmer er 1596 skal den være i samme celle som "505" så den faktisk bare sletter 505 og overføre 1596 :), er det muligt,

og har du en ide til af overføre fks. K1:O31 (det er 31 celler ned af og 5 rækker data) - kan ikke få =HVIS.FEJL(LOPSLAG( eller =SLÅ.OP til det :p
Avatar billede store-morten Ekspert
06. august 2012 - 00:39 #30
Sub Logge_Data_3()
Set x = Sheets("Ark1").Range("G6")
Sheets("Ark2").Range("A2") = x.Value
End Sub
Avatar billede store-morten Ekspert
06. august 2012 - 00:41 #31
Skal K1:O31 overføres/logges på samme måde?
Avatar billede Slettet bruger
06. august 2012 - 00:44 #32
K1:O31 er noget der er blevet logged' i ark2.
nu skal man kunne hente det igen til ark1.
Avatar billede store-morten Ekspert
06. august 2012 - 00:51 #33
Så på Ark1 celle? skal der hentes data fra Ark2 celle?
Med markro eller formel? (Lopslag eller andet)
En celle af gangen eller alle på en gang?
Avatar billede Slettet bruger
06. august 2012 - 01:00 #34
Gerne med makro hvis det er nemmere.
eller nu starter vi lige forfra, for det fylder lidt mere end K1:031.

Ark1:

der er data i alle celler/rækker så det ser sådan ud: A1:O70
de er så blevet logget til ark2 i cellerne: A1:O70
nu skal vi/jeg prøve se af flytte dem fra ark2 til ark1.
fks. ved af skrive "januar" sted så den henter fra den mdr.

så næste mdr jeg logger ark1 til ark2 så det ser sådan ud: A145:O70 og der ved hvis jeg vil hente kan man skrive "februar" og så logges det bare videre der ud af,
Avatar billede store-morten Ekspert
06. august 2012 - 01:05 #35
Ser på det og vender tilbage.
Avatar billede Slettet bruger
06. august 2012 - 01:06 #36
bare iorden. jeg prøver stadig af lege med det selvom det driller :)
Avatar billede Slettet bruger
06. august 2012 - 03:08 #37
en der kan forklare om man kan sætte fks: ark1, A1:E31 så det er kun det der bliver gemt i PDF og bliver printet ud?

Public Sub XLS_Til_Pdf_Print()
Dim stiNavn As String, filNavn As String, fil As String, sti As String
Dim temp As Variant, xlsObj As Object

    stiNavn = Application.GetOpenFilename          'ønskede fil udpeges
    temp = Split(stiNavn, "\")
    filNavn = temp(UBound(temp))
    temp = Split(filNavn, ".")
    fil = temp(0)
    temp = Split(stiNavn, filNavn)
    sti = temp(0)                  'kan erstattes af anden sti
   
    Set xlsObj = CreateObject("Excel.application")
    xlsObj.Workbooks.Open stiNavn
   
    xlsObj.ActiveWorkbook.Sheets(Array("Ark1", "Ark2", "Ark3")).Select
   
    xlsObj.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        sti & fil & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

    xlsObj.Application.Quit
    Set xlsObj = Nothing
   
Dim Iprint As String
    Iprint = InputBox("hvilket ark skal printes?", , 0, 100, 100)
   
    If Iprint = "1" Then
        Sheets("Ark1").Activate
        Sheets("Ark1").PrintOut Copies:=1, Collate:=True
    End If
   
    If Iprint = "2" Then
        Sheets("Ark2").Activate
        Sheets("Ark2").PrintOut Copies:=1, Collate:=True
    End If
    End Sub
Avatar billede store-morten Ekspert
06. august 2012 - 10:30 #38
Prøv at finde "Vis sideskift"
Træk den 'blå' ramme til højre, så der kun udskrives 1 side.
Avatar billede store-morten Ekspert
06. august 2012 - 10:32 #39
Rammen til højte skal trækkes til venstre ;-)
Avatar billede store-morten Ekspert
07. august 2012 - 22:17 #40
Her med sikkerhed mod "Fejl indtastning"

Private Sub CommandButton1_Click()
Dim md As String
md = InputBox("Tast måned som nr. 1 til 12", "Vælg måned der skal flyttes")

'Hvis der står noget i cellen
If Len(md) > 0 Then
  'Er det en talværdi (numerisk)?
  If IsNumeric(md) Then
    'Er talværdien mellem 1 og 12
      If md > 0 And md < 13 Then
        Start = md * 70 - 69
        slut = md * 70
        'Henter her
        Set x = Sheets("Ark3").Range("A" & Start, "O" & slut)
        'Indsætter her
        Sheets("Ark3").Range("Q1:AE70") = x.Value
        'Sheets("Ark3").Range("Q" & Start, "AE" & slut) = x.Value
      Else
        MsgBox "Talværdien skal være mellem 1 og 12", , "Fejl indtastning!"
        CommandButton1_Click
      End If
  Else
      MsgBox "Du skal skrive en talværdi", , "Fejl indtastning!"
      CommandButton1_Click
  End If
End If
MsgBox "Det er vist skidt, at du slet ikke tør prøve!", , "Chancel eller 'Tom'!"
End Sub
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